diff --git a/src/main/java/com/nhn/hippo/web/dao/HbaseRootTraceIndexDao.java b/src/main/java/com/nhn/hippo/web/dao/HbaseRootTraceIndexDao.java index d2cbd9ea9..662b228b1 100644 --- a/src/main/java/com/nhn/hippo/web/dao/HbaseRootTraceIndexDao.java +++ b/src/main/java/com/nhn/hippo/web/dao/HbaseRootTraceIndexDao.java @@ -2,7 +2,7 @@ package com.nhn.hippo.web.dao; import com.profiler.common.hbase.HBaseTables; import com.profiler.common.hbase.HbaseOperations2; -import com.profiler.common.util.BytesUtils; +import com.profiler.common.util.SpanUtils; import org.apache.hadoop.hbase.client.Scan; import org.apache.hadoop.hbase.util.Bytes; import org.slf4j.Logger; @@ -63,13 +63,11 @@ public class HbaseRootTraceIndexDao implements RootTraceIndexDao { scan.setCaching(this.scanCacheSize); byte[] bAgent = Bytes.toBytes(agent); - byte[] bStart = BytesUtils.add(bAgent, start); - scan.setStartRow(bStart); -// TODO 추가 filter를 구현하여 scan시 중복된 값을 제가 할수 있음. 단 server에도 Filter 클래스가 배포되어야 한다. -// scan.setFilter(new ValueFilter()); + byte[] traceIndexStartKey = SpanUtils.getTraceIndexRowKey(bAgent, start); + scan.setStartRow(traceIndexStartKey); - byte[] bEnd = BytesUtils.add(bAgent, end); - scan.setStopRow(bEnd); + byte[] traceIndexEndKey = SpanUtils.getTraceIndexRowKey(bAgent, end); + scan.setStopRow(traceIndexEndKey); scan.addColumn(COLFAM_TRACE, COLNAME_ID); scan.setId("rootTraceIndexScan"); diff --git a/src/main/java/com/nhn/hippo/web/dao/HbaseTraceIndexDao.java b/src/main/java/com/nhn/hippo/web/dao/HbaseTraceIndexDao.java index a5ca0fbae..1a76ea8fe 100644 --- a/src/main/java/com/nhn/hippo/web/dao/HbaseTraceIndexDao.java +++ b/src/main/java/com/nhn/hippo/web/dao/HbaseTraceIndexDao.java @@ -2,7 +2,7 @@ package com.nhn.hippo.web.dao; import com.profiler.common.hbase.HBaseTables; import com.profiler.common.hbase.HbaseOperations2; -import com.profiler.common.util.BytesUtils; +import com.profiler.common.util.SpanUtils; import org.apache.hadoop.hbase.client.Scan; import org.apache.hadoop.hbase.util.Bytes; import org.slf4j.Logger; @@ -65,13 +65,13 @@ public class HbaseTraceIndexDao implements TraceIndexDao { scan.setCaching(this.scanCacheSize); byte[] bAgent = Bytes.toBytes(agent); - byte[] bStart = BytesUtils.add(bAgent, start); - scan.setStartRow(bStart); + byte[] traceIndexStartKey = SpanUtils.getTraceIndexRowKey(bAgent, start); + scan.setStartRow(traceIndexStartKey); // TODO 추가 filter를 구현하여 scan시 중복된 값을 제가 할수 있음. 단 server에도 Filter 클래스가 배포되어야 한다. // scan.setFilter(new ValueFilter()); - byte[] bEnd = BytesUtils.add(bAgent, end); - scan.setStopRow(bEnd); + byte[] traceIndexEndKey = SpanUtils.getTraceIndexRowKey(bAgent, end); + scan.setStopRow(traceIndexEndKey); scan.addColumn(COLFAM_TRACE, COLNAME_ID); scan.setId("traceIndexScan"); @@ -80,10 +80,4 @@ public class HbaseTraceIndexDao implements TraceIndexDao { return scan; } - // private ExecutorService executor = Executors.newFixedThreadPool(100); - @Override - public List parallelScanTraceIndex(String[] agents, long start, long end) { -// executor.invokeAll(); - throw new UnsupportedOperationException(); - } } 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 77dd48fc3..f7f36e548 100644 --- a/src/main/java/com/nhn/hippo/web/dao/TraceIndexDao.java +++ b/src/main/java/com/nhn/hippo/web/dao/TraceIndexDao.java @@ -9,6 +9,4 @@ public interface TraceIndexDao { List scanTraceIndex(String agent, 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/service/FlowChartService.java b/src/main/java/com/nhn/hippo/web/service/FlowChartService.java index 87dbfe7ac..c26592a19 100755 --- a/src/main/java/com/nhn/hippo/web/service/FlowChartService.java +++ b/src/main/java/com/nhn/hippo/web/service/FlowChartService.java @@ -32,14 +32,6 @@ public interface FlowChartService { */ public Set selectTraceIdsFromTraceIndex(String[] agentIds, long from, long to); - /** - * select Traces from Trace table - * - * @param traceIds - * @return - */ - public Map> selectTraces(List traceIds); - /** * select call tree * 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 5d9de582d..f81a69d91 100755 --- a/src/main/java/com/nhn/hippo/web/service/FlowChartServiceImpl.java +++ b/src/main/java/com/nhn/hippo/web/service/FlowChartServiceImpl.java @@ -5,22 +5,17 @@ import com.nhn.hippo.web.calltree.server.ServerCallTree; import com.nhn.hippo.web.dao.RootTraceIndexDao; import com.nhn.hippo.web.dao.TraceDao; import com.nhn.hippo.web.dao.TraceIndexDao; -import com.nhn.hippo.web.service.TracesProcessor.SpanHandler; import com.nhn.hippo.web.vo.TraceId; import com.profiler.common.bo.SpanBo; -import com.profiler.common.dto.thrift.Span; import com.profiler.common.hbase.HBaseClient; import com.profiler.common.hbase.HBaseQuery; import com.profiler.common.hbase.HBaseQuery.HbaseColumn; import com.profiler.common.hbase.HBaseTables; -import org.apache.hadoop.hbase.client.Get; -import org.apache.hadoop.hbase.client.Result; 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; -import org.springframework.util.StopWatch; import java.util.*; @@ -76,9 +71,7 @@ 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.rootTraceIndexDao.scanTraceIndex(agentIds[0], from, to); - // 이런 필터로직을 scan filter에서 할수 없나? + List bytes = this.traceIndexDao.scanTraceIndex(agentIds[0], from, to); Set result = new HashSet(); for (byte[] traceId : bytes) { TraceId tid = new TraceId(traceId); @@ -87,9 +80,8 @@ public class FlowChartServiceImpl implements FlowChartService { } return result; } else { - // multi scan 가능한 동일 htable 에서 액세스함. -// List> multiScan = this.traceIndexDao.multiScanTraceIndex(agentIds, from, to); - List> multiScan = this.rootTraceIndexDao.multiScanTraceIndex(agentIds, from, to); + // multi scan 가능한 동일 open htable 에서 액세스함. + List> multiScan = this.traceIndexDao.multiScanTraceIndex(agentIds, from, to); Set result = new HashSet(); for (List scan : multiScan) { for (byte[] traceId : scan) { @@ -100,33 +92,6 @@ public class FlowChartServiceImpl implements FlowChartService { } } - @Override - public Map> selectTraces(List traceIds) { - List gets = new ArrayList(traceIds.size()); - for (byte[] traceId : traceIds) { - gets.add(new Get(traceId)); - } - - Result[] results = client.get(HBaseTables.TRACES, gets); - - // traceId, SpanList - final Map> result = new HashMap>(); - - TracesProcessor.process(results, new SpanHandler() { - @Override - public void handleSpan(byte[] row, byte[] family, byte[] column, Span span) { - if (result.containsKey(row)) { - result.get(row).add(span); - } else { - List list = new ArrayList(); - list.add(span); - result.put(row, list); - } - } - }); - - return result; - } @Override public RPCCallTree selectRPCCallTree(Set traceIds) { diff --git a/src/main/java/com/nhn/hippo/web/service/TracesProcessor.java b/src/main/java/com/nhn/hippo/web/service/TracesProcessor.java deleted file mode 100644 index 5e90e25c8..000000000 --- a/src/main/java/com/nhn/hippo/web/service/TracesProcessor.java +++ /dev/null @@ -1,61 +0,0 @@ -package com.nhn.hippo.web.service; - -import java.util.Map.Entry; -import java.util.NavigableMap; - -import org.apache.hadoop.hbase.client.Result; -import org.apache.hadoop.hbase.util.Bytes; -import org.apache.thrift.TDeserializer; -import org.apache.thrift.TException; - -import com.profiler.common.dto.thrift.Span; - -/** - * - * @author netspider - * - */ -public class TracesProcessor { - - public static interface SpanHandler { - void handleSpan(byte[] row, byte[] family, byte[] column, Span span); - } - - public static void process(Result[] results, SpanHandler handler) { - TDeserializer deserializer = new TDeserializer(); - - for (Result res : results) { - /** - * res.getMap() represent - * "Map>>" - */ - NavigableMap>> map = res.getMap(); - - for (Entry>> entry : map.entrySet()) { - byte[] family = entry.getKey(); - NavigableMap> values = entry.getValue(); - - /** - * For each column (SpanID) - */ - for (Entry> value : values.entrySet()) { - byte[] colname = value.getKey(); - NavigableMap valueSeries = value.getValue(); - - /** - * Decode span object - */ - for (Entry v : valueSeries.entrySet()) { - Span span = new Span(); - try { - deserializer.deserialize(span, v.getValue()); - handler.handleSpan(res.getRow(), family, colname, span); - } catch (TException e) { - e.printStackTrace(); - } - } - } - } - } - } -} diff --git a/src/main/java/com/nhn/hippo/web/timeline/Timeline.java b/src/main/java/com/nhn/hippo/web/timeline/Timeline.java deleted file mode 100644 index 611f3b691..000000000 --- a/src/main/java/com/nhn/hippo/web/timeline/Timeline.java +++ /dev/null @@ -1,11 +0,0 @@ -package com.nhn.hippo.web.timeline; - -/** - * Trace Timeline - * - * @author netspider - * - */ -public class Timeline { - -} diff --git a/src/main/resources/hbase-applicationContext.xml b/src/main/resources/hbase-applicationContext.xml index 8f850a7b6..974d4650a 100644 --- a/src/main/resources/hbase-applicationContext.xml +++ b/src/main/resources/hbase-applicationContext.xml @@ -19,6 +19,7 @@ ${hbase.client.host} ${hbase.client.port} + ${hbase.htable.threads.max} diff --git a/src/main/resources/hbase.properties b/src/main/resources/hbase.properties index 2bbb9d2c0..80ba52846 100644 --- a/src/main/resources/hbase.properties +++ b/src/main/resources/hbase.properties @@ -1,3 +1,4 @@ #hbase.client.host=localhost hbase.client.host=10.25.131.38 -hbase.client.port=2181 \ No newline at end of file +hbase.client.port=2181 +hbase.htable.threads.max=64 \ No newline at end of file