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 @@ + + + + + + + + + +