From ace4256baa9dabc3fd00915ac4ac93dee004e159 Mon Sep 17 00:00:00 2001 From: Woonduk Kang Date: Wed, 16 Oct 2013 10:46:48 +0000 Subject: [PATCH] =?UTF-8?q?[=EA=B0=95=EC=9A=B4=EB=8D=95]=20[LUCYSUS-1744]?= =?UTF-8?q?=20exception=EB=B0=9C=EC=83=9D=EC=8B=9C=EC=9D=98=20=EB=8D=B0?= =?UTF-8?q?=EC=9D=B4=ED=84=B0=EC=9D=B8=20exceptionId,=20exceptionMessage?= =?UTF-8?q?=EB=A5=BC=20=ED=95=9C=EB=B2=88=EC=97=90=20=EB=AC=B6=EC=96=B4?= =?UTF-8?q?=EC=84=9C=20span,=20spanEvent=EC=97=90=20=EC=A0=80=EC=9E=A5?= =?UTF-8?q?=ED=95=98=EB=8F=84=EB=A1=9D=20=EA=B0=9C=EC=84=A0.?= 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@2535 84d0f5b1-2673-498c-a247-62c4ff18d310 --- .../profiler/context/DefaultAsyncTrace.java | 1 + .../pinpoint/profiler/context/DefaultTrace.java | 7 +++---- .../pinpoint/profiler/context/RootStackFrame.java | 4 ++-- .../com/nhn/pinpoint/profiler/context/Span.java | 15 +++++++-------- .../nhn/pinpoint/profiler/context/SpanEvent.java | 9 +++++++++ .../profiler/context/SpanEventStackFrame.java | 4 ++-- .../nhn/pinpoint/profiler/context/StackFrame.java | 2 +- .../BaseOperationTransitionStateInterceptor.java | 1 + .../arcus/interceptor/FutureGetInterceptor.java | 11 +++++++---- 9 files changed, 33 insertions(+), 21 deletions(-) diff --git a/src/main/java/com/nhn/pinpoint/profiler/context/DefaultAsyncTrace.java b/src/main/java/com/nhn/pinpoint/profiler/context/DefaultAsyncTrace.java index 4d88325ff..616684d5e 100644 --- a/src/main/java/com/nhn/pinpoint/profiler/context/DefaultAsyncTrace.java +++ b/src/main/java/com/nhn/pinpoint/profiler/context/DefaultAsyncTrace.java @@ -114,6 +114,7 @@ public class DefaultAsyncTrace implements AsyncTrace { if (result instanceof Throwable) { Throwable th = (Throwable) result; String drop = StringUtils.drop(th.getMessage()); + recordAttribute(AnnotationKey.EXCEPTION, drop); // TODO 비동기 api일 경우, span에 exception을 마크하기가 까다로움 diff --git a/src/main/java/com/nhn/pinpoint/profiler/context/DefaultTrace.java b/src/main/java/com/nhn/pinpoint/profiler/context/DefaultTrace.java index 1dd59e7a0..adad88fff 100644 --- a/src/main/java/com/nhn/pinpoint/profiler/context/DefaultTrace.java +++ b/src/main/java/com/nhn/pinpoint/profiler/context/DefaultTrace.java @@ -225,10 +225,9 @@ public final class DefaultTrace implements Trace { if (result instanceof Throwable) { final Throwable th = (Throwable) result; final String drop = StringUtils.drop(th.getMessage(), 256); - -// this.currentStackFrame.setExceptionId(); - recordAttribute(AnnotationKey.EXCEPTION, drop); - recordAttribute(AnnotationKey.EXCEPTION_CLASS, th.getClass().getName()); + // exception class가 proxy라서 class Name이 불규칙하면 문제가 발생할수 있다. + final int exceptionId = traceContext.cacheString(th.getClass().getName()); + this.currentStackFrame.setExceptionInfo(exceptionId, drop); final Span span = getCallStack().getSpan(); if (!span.isSetErrCode()) { diff --git a/src/main/java/com/nhn/pinpoint/profiler/context/RootStackFrame.java b/src/main/java/com/nhn/pinpoint/profiler/context/RootStackFrame.java index f9e6946b0..20e2b8781 100644 --- a/src/main/java/com/nhn/pinpoint/profiler/context/RootStackFrame.java +++ b/src/main/java/com/nhn/pinpoint/profiler/context/RootStackFrame.java @@ -68,8 +68,8 @@ public class RootStackFrame implements StackFrame { } @Override - public void setExceptionId(int id) { - this.span.setExceptionId(id); + public void setExceptionInfo(int exceptionId, String exceptionMessage) { + this.span.setExceptionInfo(exceptionId, exceptionMessage); } @Override diff --git a/src/main/java/com/nhn/pinpoint/profiler/context/Span.java b/src/main/java/com/nhn/pinpoint/profiler/context/Span.java index ce9b93f7a..7f9709331 100644 --- a/src/main/java/com/nhn/pinpoint/profiler/context/Span.java +++ b/src/main/java/com/nhn/pinpoint/profiler/context/Span.java @@ -2,6 +2,7 @@ package com.nhn.pinpoint.profiler.context; import com.nhn.pinpoint.profiler.AgentInformation; import com.nhn.pinpoint.profiler.DefaultAgent; +import com.nhn.pinpoint.thrift.dto.TIntStringValue; import com.nhn.pinpoint.thrift.dto.TSpan; /** @@ -60,14 +61,12 @@ public class Span extends TSpan implements Thriftable { this.addToAnnotations(annotation); } - @Override - public void setExceptionId(int exceptionId) { - super.setExceptionId(exceptionId); - } - - @Override - public int getExceptionId() { - return super.getExceptionId(); + public void setExceptionInfo(int exceptionClassId, String exceptionMessage) { + final TIntStringValue exceptionInfo = new TIntStringValue(exceptionClassId); + if (exceptionMessage != null && !exceptionMessage.isEmpty()) { + exceptionInfo.setStringValue(exceptionMessage); + } + super.setExceptionInfo(exceptionInfo); } public boolean isSetErrCode() { diff --git a/src/main/java/com/nhn/pinpoint/profiler/context/SpanEvent.java b/src/main/java/com/nhn/pinpoint/profiler/context/SpanEvent.java index e60ecd678..88b6796ae 100644 --- a/src/main/java/com/nhn/pinpoint/profiler/context/SpanEvent.java +++ b/src/main/java/com/nhn/pinpoint/profiler/context/SpanEvent.java @@ -2,6 +2,7 @@ package com.nhn.pinpoint.profiler.context; import com.nhn.pinpoint.profiler.DefaultAgent; import com.nhn.pinpoint.thrift.dto.TAgentKey; +import com.nhn.pinpoint.thrift.dto.TIntStringValue; import com.nhn.pinpoint.thrift.dto.TSpanEvent; /** @@ -28,6 +29,14 @@ public class SpanEvent extends TSpanEvent implements Thriftable { this.addToAnnotations(annotation); } + public void setExceptionInfo(int exceptionClassId, String exceptionMessage) { + final TIntStringValue exceptionInfo = new TIntStringValue(exceptionClassId); + if (exceptionMessage != null && !exceptionMessage.isEmpty()) { + exceptionInfo.setStringValue(exceptionMessage); + } + super.setExceptionInfo(exceptionInfo); + } + public void markStartTime() { // spanEvent.setStartElapsed((int) (startTime - parentSpanStartTime)); diff --git a/src/main/java/com/nhn/pinpoint/profiler/context/SpanEventStackFrame.java b/src/main/java/com/nhn/pinpoint/profiler/context/SpanEventStackFrame.java index dfa7b031a..d46d03662 100644 --- a/src/main/java/com/nhn/pinpoint/profiler/context/SpanEventStackFrame.java +++ b/src/main/java/com/nhn/pinpoint/profiler/context/SpanEventStackFrame.java @@ -68,8 +68,8 @@ public class SpanEventStackFrame implements StackFrame { } @Override - public void setExceptionId(int id) { -// this.spanEvent.setExceptionId(id); + public void setExceptionInfo(int exceptionId, String exceptionMessage) { + this.spanEvent.setExceptionInfo(exceptionId, exceptionMessage); } @Override diff --git a/src/main/java/com/nhn/pinpoint/profiler/context/StackFrame.java b/src/main/java/com/nhn/pinpoint/profiler/context/StackFrame.java index 674d388bc..33f757f54 100644 --- a/src/main/java/com/nhn/pinpoint/profiler/context/StackFrame.java +++ b/src/main/java/com/nhn/pinpoint/profiler/context/StackFrame.java @@ -23,7 +23,7 @@ public interface StackFrame { void setApiId(int apiId); - void setExceptionId(int id); + void setExceptionInfo(int exceptionId, String exceptionMessage); void setServiceType(short serviceType); diff --git a/src/main/java/com/nhn/pinpoint/profiler/modifier/arcus/interceptor/BaseOperationTransitionStateInterceptor.java b/src/main/java/com/nhn/pinpoint/profiler/modifier/arcus/interceptor/BaseOperationTransitionStateInterceptor.java index 47e9450a1..8aa8108c8 100644 --- a/src/main/java/com/nhn/pinpoint/profiler/modifier/arcus/interceptor/BaseOperationTransitionStateInterceptor.java +++ b/src/main/java/com/nhn/pinpoint/profiler/modifier/arcus/interceptor/BaseOperationTransitionStateInterceptor.java @@ -26,6 +26,7 @@ import com.nhn.pinpoint.profiler.util.MetaObject; /** * */ +@Deprecated public class BaseOperationTransitionStateInterceptor implements SimpleAroundInterceptor, ByteCodeMethodDescriptorSupport, TraceContextSupport { private final PLogger logger = PLoggerFactory.getLogger(this.getClass()); diff --git a/src/main/java/com/nhn/pinpoint/profiler/modifier/arcus/interceptor/FutureGetInterceptor.java b/src/main/java/com/nhn/pinpoint/profiler/modifier/arcus/interceptor/FutureGetInterceptor.java index b0d04bae9..81065e8f0 100644 --- a/src/main/java/com/nhn/pinpoint/profiler/modifier/arcus/interceptor/FutureGetInterceptor.java +++ b/src/main/java/com/nhn/pinpoint/profiler/modifier/arcus/interceptor/FutureGetInterceptor.java @@ -70,7 +70,7 @@ public class FutureGetInterceptor implements SimpleAroundInterceptor, ByteCodeMe // trace.recordAttribute(AnnotationKey.ARCUS_COMMAND, annotation); // find the target node - Operation op = (Operation) getOperation.invoke(target); + final Operation op = (Operation) getOperation.invoke(target); if (op != null) { MemcachedNode handlingNode = op.getHandlingNode(); SocketAddress socketAddress = handlingNode.getSocketAddress(); @@ -92,10 +92,13 @@ public class FutureGetInterceptor implements SimpleAroundInterceptor, ByteCodeMe trace.recordServiceType(ServiceType.MEMCACHED_FUTURE_GET); } - trace.recordException(op.getException()); - if (op.isCancelled()) { - trace.recordAttribute(AnnotationKey.EXCEPTION, "cancelled by user"); + if (op != null) { + trace.recordException(op.getException()); } +// cancel일때 exception은 안던지는 것인가? +// if (op.isCancelled()) { +// trace.recordAttribute(AnnotationKey.EXCEPTION, "cancelled by user"); +// } trace.markAfterTime(); } finally {