From e024a32931fe4301a1c2dfb098dd0b51c383ec9b Mon Sep 17 00:00:00 2001 From: ascrutae Date: Sun, 6 Mar 2016 21:24:44 +0800 Subject: [PATCH] =?UTF-8?q?1.=E5=AE=8C=E6=88=90=E4=BF=9D=E5=AD=98CallChain?= =?UTF-8?q?Tree=E5=88=B0HBase=E7=9A=84=E6=96=B9=E6=B3=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../analysis/chainbuild/CallChainTree.java | 15 +++++++++++--- .../chainbuild/po/CallChainTreeNode.java | 5 +++++ .../analysis/chainbuild/util/HBaseUtil.java | 20 +++++++++++++++---- .../analysis/config/HBaseTableMetaData.java | 12 ++++++++++- 4 files changed, 44 insertions(+), 8 deletions(-) diff --git a/skywalking-analysis/src/main/java/com/ai/cloud/skywalking/analysis/chainbuild/CallChainTree.java b/skywalking-analysis/src/main/java/com/ai/cloud/skywalking/analysis/chainbuild/CallChainTree.java index faec57924..b37a2de53 100644 --- a/skywalking-analysis/src/main/java/com/ai/cloud/skywalking/analysis/chainbuild/CallChainTree.java +++ b/skywalking-analysis/src/main/java/com/ai/cloud/skywalking/analysis/chainbuild/CallChainTree.java @@ -1,9 +1,10 @@ package com.ai.cloud.skywalking.analysis.chainbuild; +import com.ai.cloud.skywalking.analysis.chainbuild.po.CallChainTreeNode; import com.ai.cloud.skywalking.analysis.chainbuild.po.ChainInfo; import com.ai.cloud.skywalking.analysis.chainbuild.po.ChainNode; -import com.ai.cloud.skywalking.analysis.chainbuild.po.CallChainTreeNode; import com.ai.cloud.skywalking.analysis.chainbuild.util.HBaseUtil; +import com.google.gson.Gson; import org.apache.hadoop.hbase.client.Put; import java.io.IOException; @@ -67,7 +68,7 @@ public class CallChainTree { } } - public void saveToHbase() { + public void saveToHbase() throws IOException { List chainInfoPuts = new ArrayList(); for (Map.Entry entry : combineChains.entrySet()) { Put put = new Put(entry.getKey().getBytes()); @@ -75,7 +76,7 @@ public class CallChainTree { chainInfoPuts.add(put); } - HBaseUtil.saveMergedCallChain(this); + HBaseUtil.saveCallChainTree(this); } public String getCallEntrance() { @@ -85,4 +86,12 @@ public class CallChainTree { public void addMergedChainNode(CallChainTreeNode chainNode) { nodes.put(chainNode.getTraceLevelId(), chainNode); } + + public Map getNodes() { + return nodes; + } + + public String getHasBeenMergedChainIds() { + return new Gson().toJson(hasBeenMergedChainIds); + } } diff --git a/skywalking-analysis/src/main/java/com/ai/cloud/skywalking/analysis/chainbuild/po/CallChainTreeNode.java b/skywalking-analysis/src/main/java/com/ai/cloud/skywalking/analysis/chainbuild/po/CallChainTreeNode.java index 385d1f2e8..dadd34d5d 100644 --- a/skywalking-analysis/src/main/java/com/ai/cloud/skywalking/analysis/chainbuild/po/CallChainTreeNode.java +++ b/skywalking-analysis/src/main/java/com/ai/cloud/skywalking/analysis/chainbuild/po/CallChainTreeNode.java @@ -43,4 +43,9 @@ public class CallChainTreeNode { public String getTraceLevelId() { return traceLevelId; } + + @Override + public String toString() { + return new Gson().toJson(this); + } } diff --git a/skywalking-analysis/src/main/java/com/ai/cloud/skywalking/analysis/chainbuild/util/HBaseUtil.java b/skywalking-analysis/src/main/java/com/ai/cloud/skywalking/analysis/chainbuild/util/HBaseUtil.java index 67d853faa..2aee49d73 100644 --- a/skywalking-analysis/src/main/java/com/ai/cloud/skywalking/analysis/chainbuild/util/HBaseUtil.java +++ b/skywalking-analysis/src/main/java/com/ai/cloud/skywalking/analysis/chainbuild/util/HBaseUtil.java @@ -2,8 +2,8 @@ package com.ai.cloud.skywalking.analysis.chainbuild.util; import com.ai.cloud.skywalking.analysis.chain2summary.entity.*; import com.ai.cloud.skywalking.analysis.chainbuild.CallChainTree; -import com.ai.cloud.skywalking.analysis.chainbuild.po.ChainInfo; import com.ai.cloud.skywalking.analysis.chainbuild.po.CallChainTreeNode; +import com.ai.cloud.skywalking.analysis.chainbuild.po.ChainInfo; import com.ai.cloud.skywalking.analysis.config.Config; import com.ai.cloud.skywalking.analysis.config.HBaseTableMetaData; import com.google.gson.Gson; @@ -291,15 +291,27 @@ public class HBaseUtil { return result; } - public static void saveMergedCallChain(CallChainTree callChainTree) { + public static void saveCallChainTree(CallChainTree callChainTree) throws IOException { // save + Put callChainTreePut = new Put(callChainTree.getCallEntrance().getBytes()); + for (Map.Entry entry : callChainTree.getNodes().entrySet()) { + callChainTreePut.addColumn(HBaseTableMetaData.TABLE_CALL_CHAIN_TREE_DETAIL.COLUMN_FAMILY_NAME.getBytes(), + entry.getKey().getBytes(), entry.getValue().toString().getBytes()); + } + Table table = connection.getTable(TableName.valueOf(HBaseTableMetaData.TABLE_MERGED_CHAIN_DETAIL.TABLE_NAME)); + table.put(callChainTreePut); // save relationship + Put treeIdCidMappingPut = new Put(callChainTree.getCallEntrance().getBytes()); + treeIdCidMappingPut.addColumn(HBaseTableMetaData.TABLE_CALL_CHAIN_TREE_ID_AND_CID_MAPPING.COLUMN_FAMILY_NAME.getBytes() + , "HAS_BEEN_MERGED_CHAIN_ID".getBytes(), callChainTree.getHasBeenMergedChainIds().getBytes()); + Table relationshipTable = connection.getTable(TableName.valueOf(HBaseTableMetaData.TABLE_CALL_CHAIN_TREE_ID_AND_CID_MAPPING.TABLE_NAME)); + relationshipTable.put(treeIdCidMappingPut); } - public static List loadHasBeenMergeChainIds(String topoId) throws IOException { + public static List loadHasBeenMergeChainIds(String treeId) throws IOException { List result = new ArrayList(); Table table = connection.getTable(TableName.valueOf(HBaseTableMetaData.TABLE_CALL_CHAIN_TREE_ID_AND_CID_MAPPING.TABLE_NAME)); - Get g = new Get(Bytes.toBytes(topoId)); + Get g = new Get(Bytes.toBytes(treeId)); Result r = table.get(g); if (r.rawCells().length == 0) { return null; diff --git a/skywalking-analysis/src/main/java/com/ai/cloud/skywalking/analysis/config/HBaseTableMetaData.java b/skywalking-analysis/src/main/java/com/ai/cloud/skywalking/analysis/config/HBaseTableMetaData.java index ca5e88e53..55913cf24 100644 --- a/skywalking-analysis/src/main/java/com/ai/cloud/skywalking/analysis/config/HBaseTableMetaData.java +++ b/skywalking-analysis/src/main/java/com/ai/cloud/skywalking/analysis/config/HBaseTableMetaData.java @@ -111,10 +111,20 @@ public class HBaseTableMetaData { public static final String COLUMN_FAMILY_NAME = "chain_detail"; } - + /** + * 用于存放调用树和CID的映射关系 + * + * @author zhangxin + */ public final static class TABLE_CALL_CHAIN_TREE_ID_AND_CID_MAPPING { public static final String TABLE_NAME = "sw-topologyId-cid-mapping"; public static final String COLUMN_FAMILY_NAME = "sw-topologyId-cid-mapping"; } + + public final static class TABLE_CALL_CHAIN_TREE_DETAIL { + public static final String TABLE_NAME = "sw-call-chain-tree-detail"; + + public static final String COLUMN_FAMILY_NAME = "tree-detail"; + } }