From e7e39aeede4910236b713bebc11b5d5af2c1950b Mon Sep 17 00:00:00 2001 From: Woonduk Kang Date: Mon, 4 Feb 2013 10:20:02 +0000 Subject: [PATCH] =?UTF-8?q?[=EA=B0=95=EC=9A=B4=EB=8D=95]=20[LUCYSUS-1744]?= =?UTF-8?q?=20spanid,=20parentSpanid=EB=A5=BC=20long=EC=97=90=EC=84=9C=20i?= =?UTF-8?q?nt=EB=A1=9C=20=EB=B3=80=EA=B2=BD=ED=95=A8.?= 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-tomcat-profiler/trunk@1146 84d0f5b1-2673-498c-a247-62c4ff18d310 --- .../java/com/profiler/context/SpanID.java | 18 ++++---- .../java/com/profiler/context/SubSpan.java | 6 +-- src/main/java/com/profiler/context/Trace.java | 42 ++++++------------- .../java/com/profiler/context/TraceID.java | 14 +++---- ...seOperationTransitionStateInterceptor.java | 2 - .../ExecuteMethodInterceptor.java | 4 +- .../interceptors/DoXXXInterceptor.java | 4 +- .../StandardHostValveInvokeInterceptor.java | 4 +- .../profiler/sender/LoggingDataSender.java | 4 +- .../java/com/profiler/context/SpanTest.java | 4 -- 10 files changed, 40 insertions(+), 62 deletions(-) diff --git a/src/main/java/com/profiler/context/SpanID.java b/src/main/java/com/profiler/context/SpanID.java index 694bd0e19..3149af886 100644 --- a/src/main/java/com/profiler/context/SpanID.java +++ b/src/main/java/com/profiler/context/SpanID.java @@ -4,22 +4,22 @@ import java.util.Random; public class SpanID { - public static final long NULL = -1; + public static final int NULL = -1; private static Random seed = new Random(); - public static long newSpanID() { - long id = seed.nextLong(); - if (id == NULL) { - return newSpanID(); + public static int newSpanID() { + int id = seed.nextInt(); + while (id == NULL) { + id = seed.nextInt(); } return id; } - public static long nextSpanID(long parentId) { - long newId = newSpanID(); - if (newId == parentId) { - return nextSpanID(parentId); + public static int nextSpanID(long parentId) { + int newId = newSpanID(); + while (newId == parentId) { + newId = newSpanID(); } return newId; } diff --git a/src/main/java/com/profiler/context/SubSpan.java b/src/main/java/com/profiler/context/SubSpan.java index 709b9f13a..36229a019 100644 --- a/src/main/java/com/profiler/context/SubSpan.java +++ b/src/main/java/com/profiler/context/SubSpan.java @@ -27,7 +27,7 @@ public class SubSpan implements Thriftable { private final List annotations = new ArrayList(5); - private long nextSpanId = -1; + private int nextSpanId = -1; private int depth = -1; public SubSpan(Span parentSpan) { @@ -122,11 +122,11 @@ public class SubSpan implements Thriftable { this.depth = depth; } - public long getNextSpanId() { + public int getNextSpanId() { return nextSpanId; } - public void setNextSpanId(long nextSpanId) { + public void setNextSpanId(int nextSpanId) { this.nextSpanId = nextSpanId; } diff --git a/src/main/java/com/profiler/context/Trace.java b/src/main/java/com/profiler/context/Trace.java index 6e79c34e8..20ea0590a 100644 --- a/src/main/java/com/profiler/context/Trace.java +++ b/src/main/java/com/profiler/context/Trace.java @@ -1,15 +1,13 @@ package com.profiler.context; -import java.util.logging.Level; -import java.util.logging.Logger; - import com.profiler.common.AnnotationNames; import com.profiler.common.ServiceType; import com.profiler.common.util.ParsingResult; import com.profiler.interceptor.MethodDescriptor; import com.profiler.logging.LoggingUtils; -import com.profiler.sender.DataSender; -import com.profiler.sender.LoggingDataSender; + +import java.util.logging.Level; +import java.util.logging.Logger; /** * @author netspider @@ -19,8 +17,6 @@ public final class Trace { private static final Logger logger = Logger.getLogger(Trace.class.getName()); private static final boolean isDebug = LoggingUtils.isDebug(logger); - private static final DataSender DEFULT_DATA_SENDER = new LoggingDataSender(); - public static final int NOCHECK_STACKID = -1; public static final int ROOT_STACKID = 0; @@ -34,9 +30,8 @@ public final class Trace { private TraceContext traceContext; - // use for calculating depth of each Span. - private Integer latestStackIndex = null; + private int latestStackIndex = -1; public Trace() { // traceObject에서 spanid의 유효성을 히스토리를 관리한다면 같은 thread에서는 span랜덤생성아이디의 충돌을 방지할수 있기는 함. @@ -156,9 +151,12 @@ public final class Trace { public void traceBlockEnd(int stackId) { StackFrame currentStackFrame = callStack.getCurrentStackFrame(); - if (currentStackFrame.getStackFrameId() != stackId) { - // 자체 stack dump를 하면 오류발견이 쉬울것으로 생각됨. - logger.warning("Corrupted CallStack found. StackId not matched"); + int stackFrameId = currentStackFrame.getStackFrameId(); + if (stackFrameId != stackId) { + // 자체 stack dump를 하면 오류발견이 쉬울것으로 생각됨 + if (logger.isLoggable(Level.WARNING)) { + logger.warning("Corrupted CallStack found. StackId not matched. expected:" + stackId + " current:" + stackFrameId); + } } if (currentStackFrame instanceof RootStackFrame) { logSpan(((RootStackFrame) currentStackFrame).getSpan()); @@ -194,12 +192,7 @@ public final class Trace { if (isDebug) { logger.fine("[WRITE SubSPAN]" + subSpan + " CurrentThreadID=" + Thread.currentThread().getId() + ",\n\t CurrentThreadName=" + Thread.currentThread().getName() + "\n\n"); } -// if (flushType == 0) { -// storage.store(subSpan); -// } else if(flushType == 1) { -// dataSender.send(subSpan); this.storage.store(subSpan); -// } } catch (Exception e) { logger.log(Level.SEVERE, e.getMessage(), e); } @@ -210,23 +203,12 @@ public final class Trace { if (isDebug) { logger.info("[WRITE SPAN]" + span + " CurrentThreadID=" + Thread.currentThread().getId() + ",\n\t CurrentThreadName=" + Thread.currentThread().getName() + "\n\n"); } - - // dataSender.send(span); this.storage.store(span); - // subSpan.cancelTimer(); } catch (Exception e) { logger.log(Level.SEVERE, e.getMessage(), e); } } - @Deprecated - public void record(Annotation annotation) { - if (!tracingEnabled) - return; - - annotate(annotation.getCode()); - } - public void recordException(Object result) { if (result instanceof Throwable) { Throwable th = (Throwable) result; @@ -249,7 +231,7 @@ public final class Trace { if (methodDescriptor == null) { return; } - if(methodDescriptor.getApiId() == -1) { + if (methodDescriptor.getApiId() == -1) { recordAttribute(AnnotationNames.API, methodDescriptor.getFullName()); } else { recordAttribute(AnnotationNames.API_DID, methodDescriptor.getApiId()); @@ -367,7 +349,7 @@ public final class Trace { } } - public void recordNextSpanId(long spanId) { + public void recordNextSpanId(int spanId) { if (!tracingEnabled) return; diff --git a/src/main/java/com/profiler/context/TraceID.java b/src/main/java/com/profiler/context/TraceID.java index 470fee7c1..fd57f990b 100644 --- a/src/main/java/com/profiler/context/TraceID.java +++ b/src/main/java/com/profiler/context/TraceID.java @@ -4,8 +4,8 @@ import java.util.UUID; public class TraceID { private UUID id; - private long parentSpanId; - private long spanId; + private int parentSpanId; + private int spanId; private boolean sampled; private short flags; @@ -18,7 +18,7 @@ public class TraceID { return new TraceID(id, spanId, SpanID.nextSpanID(spanId), sampled, flags); } - public TraceID(UUID id, long parentSpanId, long spanId, boolean sampled, short flags) { + public TraceID(UUID id, int parentSpanId, int spanId, boolean sampled, short flags) { this.id = id; this.parentSpanId = parentSpanId; this.spanId = spanId; @@ -70,11 +70,11 @@ public class TraceID { } } - public long getParentSpanId() { + public int getParentSpanId() { return parentSpanId; } - public long getSpanId() { + public int getSpanId() { return spanId; } @@ -90,11 +90,11 @@ public class TraceID { this.id = traceId; } - public void setParentSpanId(long parentSpanId) { + public void setParentSpanId(int parentSpanId) { this.parentSpanId = parentSpanId; } - public void setSpanId(long spanId) { + public void setSpanId(int spanId) { this.spanId = spanId; } diff --git a/src/main/java/com/profiler/modifier/arcus/interceptors/BaseOperationTransitionStateInterceptor.java b/src/main/java/com/profiler/modifier/arcus/interceptors/BaseOperationTransitionStateInterceptor.java index 0013db7ba..2ec2aeb65 100644 --- a/src/main/java/com/profiler/modifier/arcus/interceptors/BaseOperationTransitionStateInterceptor.java +++ b/src/main/java/com/profiler/modifier/arcus/interceptors/BaseOperationTransitionStateInterceptor.java @@ -4,7 +4,6 @@ import java.net.InetSocketAddress; import java.net.SocketAddress; import java.nio.ByteBuffer; import java.nio.charset.Charset; -import java.util.Arrays; import java.util.logging.Level; import java.util.logging.Logger; @@ -18,7 +17,6 @@ import com.profiler.context.AsyncTrace; import com.profiler.interceptor.StaticBeforeInterceptor; import com.profiler.util.InterceptorUtils; import com.profiler.util.MetaObject; -import com.profiler.util.StringUtils; /** * diff --git a/src/main/java/com/profiler/modifier/bloc/handler/interceptors/ExecuteMethodInterceptor.java b/src/main/java/com/profiler/modifier/bloc/handler/interceptors/ExecuteMethodInterceptor.java index 224c2ccbe..c2ac0856d 100644 --- a/src/main/java/com/profiler/modifier/bloc/handler/interceptors/ExecuteMethodInterceptor.java +++ b/src/main/java/com/profiler/modifier/bloc/handler/interceptors/ExecuteMethodInterceptor.java @@ -118,8 +118,8 @@ public class ExecuteMethodInterceptor implements StaticAroundInterceptor, ByteCo String strUUID = request.getHeader(Header.HTTP_TRACE_ID.toString()); if (strUUID != null) { UUID uuid = UUID.fromString(strUUID); - long parentSpanID = NumberUtils.parseLong(request.getHeader(Header.HTTP_PARENT_SPAN_ID.toString()), SpanID.NULL); - long spanID = NumberUtils.parseLong(request.getHeader(Header.HTTP_SPAN_ID.toString()), SpanID.NULL); + int parentSpanID = NumberUtils.parseInteger(request.getHeader(Header.HTTP_PARENT_SPAN_ID.toString()), SpanID.NULL); + int spanID = NumberUtils.parseInteger(request.getHeader(Header.HTTP_SPAN_ID.toString()), SpanID.NULL); boolean sampled = Boolean.parseBoolean(request.getHeader(Header.HTTP_SAMPLED.toString())); short flags = NumberUtils.parseShort(request.getHeader(Header.HTTP_FLAGS.toString()), (short) 0); diff --git a/src/main/java/com/profiler/modifier/servlet/interceptors/DoXXXInterceptor.java b/src/main/java/com/profiler/modifier/servlet/interceptors/DoXXXInterceptor.java index 9c73b1e9d..86013d433 100644 --- a/src/main/java/com/profiler/modifier/servlet/interceptors/DoXXXInterceptor.java +++ b/src/main/java/com/profiler/modifier/servlet/interceptors/DoXXXInterceptor.java @@ -146,8 +146,8 @@ public class DoXXXInterceptor implements StaticAroundInterceptor, ByteCodeMethod String strUUID = request.getHeader(Header.HTTP_TRACE_ID.toString()); if (strUUID != null) { UUID uuid = UUID.fromString(strUUID); - long parentSpanID = NumberUtils.parseLong(request.getHeader(Header.HTTP_PARENT_SPAN_ID.toString()), SpanID.NULL); - long spanID = NumberUtils.parseLong(request.getHeader(Header.HTTP_SPAN_ID.toString()), SpanID.NULL); + int parentSpanID = NumberUtils.parseInteger(request.getHeader(Header.HTTP_PARENT_SPAN_ID.toString()), SpanID.NULL); + int spanID = NumberUtils.parseInteger(request.getHeader(Header.HTTP_SPAN_ID.toString()), SpanID.NULL); boolean sampled = Boolean.parseBoolean(request.getHeader(Header.HTTP_SAMPLED.toString())); short flags = NumberUtils.parseShort(request.getHeader(Header.HTTP_FLAGS.toString()), (short) 0); diff --git a/src/main/java/com/profiler/modifier/tomcat/interceptors/StandardHostValveInvokeInterceptor.java b/src/main/java/com/profiler/modifier/tomcat/interceptors/StandardHostValveInvokeInterceptor.java index beef1c6d0..b2c60a616 100644 --- a/src/main/java/com/profiler/modifier/tomcat/interceptors/StandardHostValveInvokeInterceptor.java +++ b/src/main/java/com/profiler/modifier/tomcat/interceptors/StandardHostValveInvokeInterceptor.java @@ -123,8 +123,8 @@ public class StandardHostValveInvokeInterceptor implements StaticAroundIntercept String strUUID = request.getHeader(Header.HTTP_TRACE_ID.toString()); if (strUUID != null) { UUID uuid = UUID.fromString(strUUID); - long parentSpanID = NumberUtils.parseLong(request.getHeader(Header.HTTP_PARENT_SPAN_ID.toString()), SpanID.NULL); - long spanID = NumberUtils.parseLong(request.getHeader(Header.HTTP_SPAN_ID.toString()), SpanID.NULL); + int parentSpanID = NumberUtils.parseInteger(request.getHeader(Header.HTTP_PARENT_SPAN_ID.toString()), SpanID.NULL); + int spanID = NumberUtils.parseInteger(request.getHeader(Header.HTTP_SPAN_ID.toString()), SpanID.NULL); boolean sampled = Boolean.parseBoolean(request.getHeader(Header.HTTP_SAMPLED.toString())); short flags = NumberUtils.parseShort(request.getHeader(Header.HTTP_FLAGS.toString()), (short) 0); diff --git a/src/main/java/com/profiler/sender/LoggingDataSender.java b/src/main/java/com/profiler/sender/LoggingDataSender.java index b3a451b0c..e9da1bee1 100644 --- a/src/main/java/com/profiler/sender/LoggingDataSender.java +++ b/src/main/java/com/profiler/sender/LoggingDataSender.java @@ -9,7 +9,9 @@ import java.util.logging.Logger; * */ public class LoggingDataSender implements DataSender { - private Logger logger = Logger.getLogger(this.getClass().getName()); + + private static Logger logger = Logger.getLogger(LoggingDataSender.class.getName()); + public static DataSender DEFAULT_LOGGING_DATA_SENDER = new LoggingDataSender(); @Override public boolean send(TBase data) { diff --git a/src/test/java/com/profiler/context/SpanTest.java b/src/test/java/com/profiler/context/SpanTest.java index ae445dbdc..153b422f0 100644 --- a/src/test/java/com/profiler/context/SpanTest.java +++ b/src/test/java/com/profiler/context/SpanTest.java @@ -52,16 +52,12 @@ public class SpanTest { // trace.setTraceId(Trace.getNextTraceId()); trace.recordMessage("msg:client send"); - trace.record(Annotation.ClientSend); trace.recordMessage("msg:server recv"); - trace.record(Annotation.ServerRecv); trace.recordMessage("msg:server send"); - trace.record(Annotation.ServerSend); trace.recordMessage("msg:client recv"); - trace.record(Annotation.ClientRecv); endLatch.countDown(); }