From cb3e4985d76cfec097bcaac50465ab10356ff4d6 Mon Sep 17 00:00:00 2001 From: Chisu Yu Date: Mon, 31 Dec 2012 02:09:43 +0000 Subject: [PATCH] =?UTF-8?q?[=EC=9C=A0=EC=B9=98=EC=88=98]=20[NOBTS]=20chang?= =?UTF-8?q?e=20ApplicationTraceIndex,=20TraceIndex,=20RootTraceIndex=20col?= =?UTF-8?q?umn=20qualifier=20format,=20from=20"ID"=20to=20byte=20arrays=20?= =?UTF-8?q?of=20traceId?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit git-svn-id: http://svn.bds.nhncorp.com/pe/hippo-web/trunk@1071 84d0f5b1-2673-498c-a247-62c4ff18d310 --- .../web/dao/ApplicationTraceIndexDao.java | 4 +-- .../nhn/hippo/web/dao/RootTraceIndexDao.java | 4 +-- .../com/nhn/hippo/web/dao/TraceIndexDao.java | 4 +-- .../hbase/HbaseApplicationTraceIndexDao.java | 9 +++-- .../web/dao/hbase/HbaseRootTraceIndexDao.java | 12 +++---- .../web/dao/hbase/HbaseTraceIndexDao.java | 24 ++++++------- .../com/nhn/hippo/web/mapper/SpanMapper.java | 1 - .../hippo/web/mapper/TraceIndexMapper.java | 28 ++++++++++----- .../web/service/FlowChartServiceImpl.java | 34 +++++++++++-------- 9 files changed, 64 insertions(+), 56 deletions(-) diff --git a/src/main/java/com/nhn/hippo/web/dao/ApplicationTraceIndexDao.java b/src/main/java/com/nhn/hippo/web/dao/ApplicationTraceIndexDao.java index 02a478e8a..c011b71ed 100644 --- a/src/main/java/com/nhn/hippo/web/dao/ApplicationTraceIndexDao.java +++ b/src/main/java/com/nhn/hippo/web/dao/ApplicationTraceIndexDao.java @@ -6,7 +6,7 @@ import java.util.List; * */ public interface ApplicationTraceIndexDao { - List scanTraceIndex(String applicationName, long start, long end); + List> scanTraceIndex(String applicationName, long start, long end); - List> multiScanTraceIndex(String[] applicationNames, long start, long end); + List>> multiScanTraceIndex(String[] applicationNames, long start, long end); } diff --git a/src/main/java/com/nhn/hippo/web/dao/RootTraceIndexDao.java b/src/main/java/com/nhn/hippo/web/dao/RootTraceIndexDao.java index 7fbc305f9..f1d8d2d0d 100644 --- a/src/main/java/com/nhn/hippo/web/dao/RootTraceIndexDao.java +++ b/src/main/java/com/nhn/hippo/web/dao/RootTraceIndexDao.java @@ -6,9 +6,9 @@ import java.util.List; * */ public interface RootTraceIndexDao { - List scanTraceIndex(String agent, long start, long end); + List> scanTraceIndex(String agent, long start, long end); - List> multiScanTraceIndex(String[] agents, long start, long end); + List>> multiScanTraceIndex(String[] agents, long start, long end); List parallelScanTraceIndex(String[] agents, long start, long end); diff --git a/src/main/java/com/nhn/hippo/web/dao/TraceIndexDao.java b/src/main/java/com/nhn/hippo/web/dao/TraceIndexDao.java index f7f36e548..e6cc4f9b6 100644 --- a/src/main/java/com/nhn/hippo/web/dao/TraceIndexDao.java +++ b/src/main/java/com/nhn/hippo/web/dao/TraceIndexDao.java @@ -6,7 +6,7 @@ import java.util.List; * */ public interface TraceIndexDao { - List scanTraceIndex(String agent, long start, long end); + List> scanTraceIndex(String agent, long start, long end); - List> multiScanTraceIndex(String[] agents, long start, long end); + List>> multiScanTraceIndex(String[] agents, long start, long end); } diff --git a/src/main/java/com/nhn/hippo/web/dao/hbase/HbaseApplicationTraceIndexDao.java b/src/main/java/com/nhn/hippo/web/dao/hbase/HbaseApplicationTraceIndexDao.java index 9eaa5a3e1..b8556b3f7 100644 --- a/src/main/java/com/nhn/hippo/web/dao/hbase/HbaseApplicationTraceIndexDao.java +++ b/src/main/java/com/nhn/hippo/web/dao/hbase/HbaseApplicationTraceIndexDao.java @@ -26,14 +26,13 @@ public class HbaseApplicationTraceIndexDao implements ApplicationTraceIndexDao { private final Logger logger = LoggerFactory.getLogger(this.getClass()); private final byte[] COLFAM_TRACE = HBaseTables.APPLICATION_TRACE_INDEX_CF_TRACE; - private final byte[] COLNAME_ID = HBaseTables.APPLICATION_TRACE_INDEX_CN_ID; @Autowired private HbaseOperations2 hbaseOperations2; @Autowired @Qualifier("traceIndexMapper") - private RowMapper traceIndexMapper; + private RowMapper> traceIndexMapper; private int scanCacheSize = 40; @@ -42,13 +41,13 @@ public class HbaseApplicationTraceIndexDao implements ApplicationTraceIndexDao { } @Override - public List scanTraceIndex(String applicationName, long start, long end) { + public List> scanTraceIndex(String applicationName, long start, long end) { Scan scan = createScan(applicationName, start, end); return hbaseOperations2.find(HBaseTables.APPLICATION_TRACE_INDEX, scan, traceIndexMapper); } @Override - public List> multiScanTraceIndex(String[] applicationNames, long start, long end) { + public List>> multiScanTraceIndex(String[] applicationNames, long start, long end) { final List multiScan = new ArrayList(applicationNames.length); for (String agent : applicationNames) { Scan scan = createScan(agent, start, end); @@ -71,7 +70,7 @@ public class HbaseApplicationTraceIndexDao implements ApplicationTraceIndexDao { byte[] traceIndexEndKey = SpanUtils.getTraceIndexRowKey(bAgent, end); scan.setStopRow(traceIndexEndKey); - scan.addColumn(COLFAM_TRACE, COLNAME_ID); + scan.addFamily(COLFAM_TRACE); scan.setId("traceIndexScan"); // json으로 변화해서 로그를 찍어서. 최초 변환 속도가 느림. diff --git a/src/main/java/com/nhn/hippo/web/dao/hbase/HbaseRootTraceIndexDao.java b/src/main/java/com/nhn/hippo/web/dao/hbase/HbaseRootTraceIndexDao.java index 4350d2b55..68e9a34dd 100644 --- a/src/main/java/com/nhn/hippo/web/dao/hbase/HbaseRootTraceIndexDao.java +++ b/src/main/java/com/nhn/hippo/web/dao/hbase/HbaseRootTraceIndexDao.java @@ -25,15 +25,12 @@ public class HbaseRootTraceIndexDao implements RootTraceIndexDao { private Logger logger = LoggerFactory.getLogger(this.getClass()); - private final byte[] COLFAM_TRACE = Bytes.toBytes("Trace"); - private final byte[] COLNAME_ID = Bytes.toBytes("ID"); - @Autowired private HbaseOperations2 hbaseOperations2; @Autowired @Qualifier("traceIndexMapper") - private RowMapper traceIndexMapper; + private RowMapper> traceIndexMapper; private int scanCacheSize = 40; @@ -42,13 +39,13 @@ public class HbaseRootTraceIndexDao implements RootTraceIndexDao { } @Override - public List scanTraceIndex(String agent, long start, long end) { + public List> scanTraceIndex(String agent, long start, long end) { Scan scan = createScan(agent, start, end); return hbaseOperations2.find(HBaseTables.ROOT_TRACE_INDEX, scan, traceIndexMapper); } @Override - public List> multiScanTraceIndex(String[] agents, long start, long end) { + public List>> multiScanTraceIndex(String[] agents, long start, long end) { final List multiScan = new ArrayList(agents.length); for (String agent : agents) { Scan scan = createScan(agent, start, end); @@ -68,8 +65,7 @@ public class HbaseRootTraceIndexDao implements RootTraceIndexDao { byte[] traceIndexEndKey = SpanUtils.getTraceIndexRowKey(bAgent, end); scan.setStopRow(traceIndexEndKey); - - scan.addColumn(COLFAM_TRACE, COLNAME_ID); + scan.addFamily(HBaseTables.ROOT_TRACE_INDEX_CF_TRACE); scan.setId("rootTraceIndexScan"); // json으로 변화해서 로그를 찍어서. 최초 변환 속도가 느림. diff --git a/src/main/java/com/nhn/hippo/web/dao/hbase/HbaseTraceIndexDao.java b/src/main/java/com/nhn/hippo/web/dao/hbase/HbaseTraceIndexDao.java index 17f77e3db..37bae47f8 100644 --- a/src/main/java/com/nhn/hippo/web/dao/hbase/HbaseTraceIndexDao.java +++ b/src/main/java/com/nhn/hippo/web/dao/hbase/HbaseTraceIndexDao.java @@ -1,9 +1,8 @@ package com.nhn.hippo.web.dao.hbase; -import com.nhn.hippo.web.dao.TraceIndexDao; -import com.profiler.common.hbase.HBaseTables; -import com.profiler.common.hbase.HbaseOperations2; -import com.profiler.common.util.SpanUtils; +import java.util.ArrayList; +import java.util.List; + import org.apache.hadoop.hbase.client.Scan; import org.apache.hadoop.hbase.util.Bytes; import org.slf4j.Logger; @@ -13,8 +12,10 @@ import org.springframework.beans.factory.annotation.Qualifier; import org.springframework.data.hadoop.hbase.RowMapper; import org.springframework.stereotype.Repository; -import java.util.ArrayList; -import java.util.List; +import com.nhn.hippo.web.dao.TraceIndexDao; +import com.profiler.common.hbase.HBaseTables; +import com.profiler.common.hbase.HbaseOperations2; +import com.profiler.common.util.SpanUtils; /** * @@ -24,15 +25,12 @@ public class HbaseTraceIndexDao implements TraceIndexDao { private final Logger logger = LoggerFactory.getLogger(this.getClass()); - private final byte[] COLFAM_TRACE = Bytes.toBytes("Trace"); - private final byte[] COLNAME_ID = Bytes.toBytes("ID"); - @Autowired private HbaseOperations2 hbaseOperations2; @Autowired @Qualifier("traceIndexMapper") - private RowMapper traceIndexMapper; + private RowMapper> traceIndexMapper; private int scanCacheSize = 40; @@ -41,13 +39,13 @@ public class HbaseTraceIndexDao implements TraceIndexDao { } @Override - public List scanTraceIndex(String agent, long start, long end) { + public List> scanTraceIndex(String agent, long start, long end) { Scan scan = createScan(agent, start, end); return hbaseOperations2.find(HBaseTables.TRACE_INDEX, scan, traceIndexMapper); } @Override - public List> multiScanTraceIndex(String[] agents, long start, long end) { + public List>> multiScanTraceIndex(String[] agents, long start, long end) { final List multiScan = new ArrayList(agents.length); for (String agent : agents) { Scan scan = createScan(agent, start, end); @@ -71,7 +69,7 @@ public class HbaseTraceIndexDao implements TraceIndexDao { byte[] traceIndexEndKey = SpanUtils.getTraceIndexRowKey(bAgent, end); scan.setStopRow(traceIndexEndKey); - scan.addColumn(COLFAM_TRACE, COLNAME_ID); + scan.addFamily(HBaseTables.TRACE_INDEX_CF_TRACE); scan.setId("traceIndexScan"); // json으로 변화해서 로그를 찍어서. 최초 변환 속도가 느림. diff --git a/src/main/java/com/nhn/hippo/web/mapper/SpanMapper.java b/src/main/java/com/nhn/hippo/web/mapper/SpanMapper.java index c37c0d9a0..644207a3c 100644 --- a/src/main/java/com/nhn/hippo/web/mapper/SpanMapper.java +++ b/src/main/java/com/nhn/hippo/web/mapper/SpanMapper.java @@ -21,7 +21,6 @@ import java.util.*; @Component public class SpanMapper implements RowMapper> { - private final byte[] COLFAM_SPAN = Bytes.toBytes("Span"); private final Logger logger = LoggerFactory.getLogger(this.getClass()); private AnnotationMapper annotationMapper; diff --git a/src/main/java/com/nhn/hippo/web/mapper/TraceIndexMapper.java b/src/main/java/com/nhn/hippo/web/mapper/TraceIndexMapper.java index 62a0f7a83..dd4a738b8 100644 --- a/src/main/java/com/nhn/hippo/web/mapper/TraceIndexMapper.java +++ b/src/main/java/com/nhn/hippo/web/mapper/TraceIndexMapper.java @@ -1,7 +1,11 @@ package com.nhn.hippo.web.mapper; +import java.util.ArrayList; +import java.util.Collections; +import java.util.List; + +import org.apache.hadoop.hbase.KeyValue; import org.apache.hadoop.hbase.client.Result; -import org.apache.hadoop.hbase.util.Bytes; import org.springframework.data.hadoop.hbase.RowMapper; import org.springframework.stereotype.Component; @@ -9,15 +13,21 @@ import org.springframework.stereotype.Component; * */ @Component -public class TraceIndexMapper implements RowMapper { +public class TraceIndexMapper implements RowMapper> { + @Override + public List mapRow(Result result, int rowNum) throws Exception { + if (result == null) { + return Collections.emptyList(); + } - private final byte[] COLFAM_TRACE = Bytes.toBytes("Trace"); - private final byte[] COLNAME_ID = Bytes.toBytes("ID"); + KeyValue[] raw = result.raw(); - @Override - public byte[] mapRow(Result result, int rowNum) throws Exception { + List list = new ArrayList(raw.length); - // TODO null처리 해야 될듯. - return result.getValue(COLFAM_TRACE, COLNAME_ID); - } + for (KeyValue kv : raw) { + list.add(kv.getQualifier()); + } + + return list; + } } diff --git a/src/main/java/com/nhn/hippo/web/service/FlowChartServiceImpl.java b/src/main/java/com/nhn/hippo/web/service/FlowChartServiceImpl.java index b17c34c82..314c0089f 100755 --- a/src/main/java/com/nhn/hippo/web/service/FlowChartServiceImpl.java +++ b/src/main/java/com/nhn/hippo/web/service/FlowChartServiceImpl.java @@ -85,21 +85,25 @@ public class FlowChartServiceImpl implements FlowChartService { if (logger.isTraceEnabled()) { logger.trace("scan {}, {}, {}", new Object[] { agentIds[0], from, to }); } - List bytes = this.traceIndexDao.scanTraceIndex(agentIds[0], from, to); + List> bytes = this.traceIndexDao.scanTraceIndex(agentIds[0], from, to); Set result = new HashSet(); - for (byte[] traceId : bytes) { - TraceId tid = new TraceId(traceId); - result.add(tid); - logger.trace("traceid:{}", tid); + for (List list : bytes) { + for (byte[] traceId : list) { + TraceId tid = new TraceId(traceId); + result.add(tid); + logger.trace("traceid:{}", tid); + } } return result; } else { // multi scan 가능한 동일 open htable 에서 액세스함. - List> multiScan = this.traceIndexDao.multiScanTraceIndex(agentIds, from, to); + List>> multiScan = this.traceIndexDao.multiScanTraceIndex(agentIds, from, to); Set result = new HashSet(); - for (List scan : multiScan) { - for (byte[] traceId : scan) { - result.add(new TraceId(traceId)); + for (List> list : multiScan) { + for (List scan : list) { + for (byte[] traceId : scan) { + result.add(new TraceId(traceId)); + } } } return result; @@ -299,12 +303,14 @@ public class FlowChartServiceImpl implements FlowChartService { logger.trace("scan {}, {}, {}", new Object[] { applicationName, from, to }); } - List bytes = this.applicationTraceIndexDao.scanTraceIndex(applicationName, from, to); + List> bytes = this.applicationTraceIndexDao.scanTraceIndex(applicationName, from, to); Set result = new HashSet(); - for (byte[] traceId : bytes) { - TraceId tid = new TraceId(traceId); - result.add(tid); - logger.trace("traceid:{}", tid); + for (List list : bytes) { + for (byte[] traceId : list) { + TraceId tid = new TraceId(traceId); + result.add(tid); + logger.trace("traceid:{}", tid); + } } return result; }