diff --git a/collector/src/main/java/com/navercorp/pinpoint/collector/dao/hbase/HbaseSqlMetaDataCompatibility.java b/collector/src/main/java/com/navercorp/pinpoint/collector/dao/hbase/HbaseSqlMetaDataCompatibility.java
new file mode 100644
index 000000000..887d324c7
--- /dev/null
+++ b/collector/src/main/java/com/navercorp/pinpoint/collector/dao/hbase/HbaseSqlMetaDataCompatibility.java
@@ -0,0 +1,75 @@
+/*
+ * Copyright 2014 NAVER Corp.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.navercorp.pinpoint.collector.dao.hbase;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Qualifier;
+import org.springframework.stereotype.Repository;
+
+import com.navercorp.pinpoint.collector.dao.SqlMetaDataDao;
+import com.navercorp.pinpoint.common.hbase.HBaseAdminTemplate;
+import com.navercorp.pinpoint.common.hbase.HBaseTables;
+import com.navercorp.pinpoint.thrift.dto.TSqlMetaData;
+
+/**
+ * @author minwoo.jung
+ */
+//@Repository
+public class HbaseSqlMetaDataCompatibility implements SqlMetaDataDao {
+
+ private final Logger logger = LoggerFactory.getLogger(this.getClass());
+
+ private final boolean SQL_METADATA_VER2_EXISTED;
+
+ @Autowired
+ private SqlMetaDataDao hbaseSqlMetaDataPastVersionDao;
+
+ @Autowired
+ private SqlMetaDataDao hbaseSqlMetaDataDao;
+
+ @Autowired
+ public HbaseSqlMetaDataCompatibility(HBaseAdminTemplate hBaseAdminTemplate) {
+ SQL_METADATA_VER2_EXISTED = hBaseAdminTemplate.tableExists(HBaseTables.SQL_METADATA_VER2);
+
+ if (SQL_METADATA_VER2_EXISTED == false) {
+ logger.warn("Please create 'SqlMetaData_Ver2' table.");
+ }
+
+ if(hBaseAdminTemplate.tableExists(HBaseTables.SQL_METADATA) == false && SQL_METADATA_VER2_EXISTED == false) {
+ throw new RuntimeException("Please check for sqlMetaData_ver2 table in HBase. Need to create 'SqlMetaData_Ver2' table.");
+ }
+ }
+
+ @Override
+ public void insert(TSqlMetaData sqlMetaData) {
+ if (SQL_METADATA_VER2_EXISTED) {
+ hbaseSqlMetaDataDao.insert(sqlMetaData);
+ } else {
+ hbaseSqlMetaDataPastVersionDao.insert(sqlMetaData);
+ }
+ }
+
+ public void setHbaseSqlMetaDataPastVersionDao(SqlMetaDataDao hbaseSqlMetaDataPastVersionDao) {
+ this.hbaseSqlMetaDataPastVersionDao = hbaseSqlMetaDataPastVersionDao;
+ }
+
+ public void setHbaseSqlMetaDataDao(SqlMetaDataDao hbaseSqlMetaDataDao) {
+ this.hbaseSqlMetaDataDao = hbaseSqlMetaDataDao;
+ }
+}
diff --git a/collector/src/main/java/com/navercorp/pinpoint/collector/dao/hbase/HbaseSqlMetaDataDao.java b/collector/src/main/java/com/navercorp/pinpoint/collector/dao/hbase/HbaseSqlMetaDataDao.java
index 507cf7a56..0c269fbae 100644
--- a/collector/src/main/java/com/navercorp/pinpoint/collector/dao/hbase/HbaseSqlMetaDataDao.java
+++ b/collector/src/main/java/com/navercorp/pinpoint/collector/dao/hbase/HbaseSqlMetaDataDao.java
@@ -32,9 +32,9 @@ import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.stereotype.Repository;
/**
- * @author emeroad
+ * @author
*/
-@Repository
+//@Repository
public class HbaseSqlMetaDataDao implements SqlMetaDataDao {
private final Logger logger = LoggerFactory.getLogger(this.getClass());
@@ -43,7 +43,7 @@ public class HbaseSqlMetaDataDao implements SqlMetaDataDao {
private HbaseOperations2 hbaseTemplate;
@Autowired
- @Qualifier("metadataRowKeyDistributor")
+ @Qualifier("metadataRowKeyDistributor2")
private RowKeyDistributorByHashPrefix rowKeyDistributorByHashPrefix;
@Override
@@ -64,9 +64,9 @@ public class HbaseSqlMetaDataDao implements SqlMetaDataDao {
byte[] sqlBytes = Bytes.toBytes(sql);
// added sqlBytes into qualifier intentionally not to conflict hashcode
- put.addColumn(HBaseTables.SQL_METADATA_CF_SQL, sqlBytes, null);
+ put.addColumn(HBaseTables.SQL_METADATA_VER2_CF_SQL, sqlBytes, null);
- hbaseTemplate.put(HBaseTables.SQL_METADATA, put);
+ hbaseTemplate.put(HBaseTables.SQL_METADATA_VER2, put);
}
private byte[] getDistributedKey(byte[] rowKey) {
diff --git a/collector/src/main/java/com/navercorp/pinpoint/collector/dao/hbase/HbaseSqlMetaDataPastVersionDao.java b/collector/src/main/java/com/navercorp/pinpoint/collector/dao/hbase/HbaseSqlMetaDataPastVersionDao.java
new file mode 100644
index 000000000..54784a849
--- /dev/null
+++ b/collector/src/main/java/com/navercorp/pinpoint/collector/dao/hbase/HbaseSqlMetaDataPastVersionDao.java
@@ -0,0 +1,75 @@
+/*
+ * Copyright 2014 NAVER Corp.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.navercorp.pinpoint.collector.dao.hbase;
+
+import com.navercorp.pinpoint.collector.dao.SqlMetaDataDao;
+import com.navercorp.pinpoint.common.bo.SqlMetaDataBo;
+import com.navercorp.pinpoint.common.hbase.HBaseTables;
+import com.navercorp.pinpoint.common.hbase.HbaseOperations2;
+import com.navercorp.pinpoint.thrift.dto.TSqlMetaData;
+import com.sematext.hbase.wd.RowKeyDistributorByHashPrefix;
+
+import org.apache.hadoop.hbase.client.Put;
+import org.apache.hadoop.hbase.util.Bytes;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Qualifier;
+import org.springframework.stereotype.Repository;
+
+/**
+ * @author emeroad
+ */
+//@Repository
+public class HbaseSqlMetaDataPastVersionDao implements SqlMetaDataDao {
+
+ private final Logger logger = LoggerFactory.getLogger(this.getClass());
+
+ @Autowired
+ private HbaseOperations2 hbaseTemplate;
+
+ @Autowired
+ @Qualifier("metadataRowKeyDistributor")
+ private RowKeyDistributorByHashPrefix rowKeyDistributorByHashPrefix;
+
+ @Override
+ public void insert(TSqlMetaData sqlMetaData) {
+ if (sqlMetaData == null) {
+ throw new NullPointerException("sqlMetaData must not be null");
+ }
+ if (logger.isDebugEnabled()) {
+ logger.debug("insert:{}", sqlMetaData);
+ }
+
+ SqlMetaDataBo sqlMetaDataBo = new SqlMetaDataBo(sqlMetaData.getAgentId(), sqlMetaData.getAgentStartTime(), sqlMetaData.getSqlId());
+ final byte[] rowKey = getDistributedKey(sqlMetaDataBo.toRowKey());
+
+
+ Put put = new Put(rowKey);
+ String sql = sqlMetaData.getSql();
+ byte[] sqlBytes = Bytes.toBytes(sql);
+
+ // added sqlBytes into qualifier intentionally not to conflict hashcode
+ put.addColumn(HBaseTables.SQL_METADATA_CF_SQL, sqlBytes, null);
+
+ hbaseTemplate.put(HBaseTables.SQL_METADATA, put);
+ }
+
+ private byte[] getDistributedKey(byte[] rowKey) {
+ return rowKeyDistributorByHashPrefix.getDistributedKey(rowKey);
+ }
+}
diff --git a/collector/src/main/java/com/navercorp/pinpoint/collector/handler/SqlMetaDataHandler.java b/collector/src/main/java/com/navercorp/pinpoint/collector/handler/SqlMetaDataHandler.java
index 256dfa50a..a7f1e4b7b 100644
--- a/collector/src/main/java/com/navercorp/pinpoint/collector/handler/SqlMetaDataHandler.java
+++ b/collector/src/main/java/com/navercorp/pinpoint/collector/handler/SqlMetaDataHandler.java
@@ -24,16 +24,17 @@ import org.apache.thrift.TBase;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.stereotype.Service;
/**
* @author emeroad
*/
-@Service
+//@Service
public class SqlMetaDataHandler implements RequestResponseHandler {
private final Logger logger = LoggerFactory.getLogger(getClass());
- @Autowired
+// @Autowired
private SqlMetaDataDao sqlMetaDataDao;
@Override
@@ -60,4 +61,8 @@ public class SqlMetaDataHandler implements RequestResponseHandler {
}
return new TResult(true);
}
+
+ public void setSqlMetaDataDao(SqlMetaDataDao sqlMetaDataDao) {
+ this.sqlMetaDataDao = sqlMetaDataDao;
+ }
}
diff --git a/collector/src/main/resources/applicationContext-collector.xml b/collector/src/main/resources/applicationContext-collector.xml
index e31b43be8..6b6e1bc7b 100644
--- a/collector/src/main/resources/applicationContext-collector.xml
+++ b/collector/src/main/resources/applicationContext-collector.xml
@@ -134,4 +134,15 @@
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/collector/src/main/resources/applicationContext-hbase.xml b/collector/src/main/resources/applicationContext-hbase.xml
index 8adfa0dae..58feb18d9 100644
--- a/collector/src/main/resources/applicationContext-hbase.xml
+++ b/collector/src/main/resources/applicationContext-hbase.xml
@@ -47,6 +47,10 @@
+
+
+
+
@@ -87,6 +91,16 @@
+
+
+
+
+
+
+
+
+
+