From 0d2548660b5a5f93314996311c8ed7fadf2038fa Mon Sep 17 00:00:00 2001 From: emeroad Date: Wed, 4 Jan 2023 19:21:20 +0900 Subject: [PATCH] [#9595] ... --- .../profiler/context/AsyncContextFactory.java | 2 ++ .../profiler/context/BaseTraceFactory.java | 5 ++- .../context/DefaultAsyncContextFactory.java | 5 +++ .../context/DefaultAsyncTraceContext.java | 21 +++++++++-- .../context/DefaultBaseTraceFactory.java | 35 ++++++++++-------- .../context/DisableAsyncChildTrace.java | 22 +++++------- .../profiler/context/DisableAsyncContext.java | 36 +++++++++++++++++++ .../profiler/context/DisableAsyncState.java | 23 ++++++++++++ .../profiler/context/DisableTrace.java | 19 ++++------ .../context/LoggingBaseTraceFactory.java | 22 +++++++++--- .../recorder/DefaultRecorderFactory.java | 8 +++++ .../recorder/DisableSpanEventRecorder.java | 17 ++++++--- .../context/recorder/RecorderFactory.java | 2 ++ .../profiler/context/AsyncContextTest.java | 5 ++- .../context/DefaultAsyncTraceContextTest.java | 5 ++- .../profiler/context/LocalTraceTest.java | 10 ++++-- 16 files changed, 174 insertions(+), 63 deletions(-) create mode 100644 profiler/src/main/java/com/navercorp/pinpoint/profiler/context/DisableAsyncContext.java create mode 100644 profiler/src/main/java/com/navercorp/pinpoint/profiler/context/DisableAsyncState.java diff --git a/profiler/src/main/java/com/navercorp/pinpoint/profiler/context/AsyncContextFactory.java b/profiler/src/main/java/com/navercorp/pinpoint/profiler/context/AsyncContextFactory.java index 29debce17586..0db55898f1e6 100644 --- a/profiler/src/main/java/com/navercorp/pinpoint/profiler/context/AsyncContextFactory.java +++ b/profiler/src/main/java/com/navercorp/pinpoint/profiler/context/AsyncContextFactory.java @@ -18,6 +18,7 @@ import com.navercorp.pinpoint.bootstrap.context.AsyncContext; import com.navercorp.pinpoint.bootstrap.context.AsyncState; +import com.navercorp.pinpoint.profiler.context.id.LocalTraceRoot; import com.navercorp.pinpoint.profiler.context.id.TraceRoot; /** @@ -31,4 +32,5 @@ public interface AsyncContextFactory { AsyncContext newAsyncContext(TraceRoot traceRoot, AsyncId asyncId, boolean canSampled, AsyncState asyncState); + AsyncContext newDisableAsyncContext(LocalTraceRoot traceRoot); } diff --git a/profiler/src/main/java/com/navercorp/pinpoint/profiler/context/BaseTraceFactory.java b/profiler/src/main/java/com/navercorp/pinpoint/profiler/context/BaseTraceFactory.java index 8ffd60fe84c5..d64edc4cce8a 100644 --- a/profiler/src/main/java/com/navercorp/pinpoint/profiler/context/BaseTraceFactory.java +++ b/profiler/src/main/java/com/navercorp/pinpoint/profiler/context/BaseTraceFactory.java @@ -19,6 +19,7 @@ import com.navercorp.pinpoint.bootstrap.context.Trace; import com.navercorp.pinpoint.bootstrap.context.TraceId; import com.navercorp.pinpoint.common.annotations.InterfaceAudience; +import com.navercorp.pinpoint.profiler.context.id.LocalTraceRoot; import com.navercorp.pinpoint.profiler.context.id.TraceRoot; /** @@ -34,7 +35,9 @@ public interface BaseTraceFactory { @InterfaceAudience.LimitedPrivate("vert.x") Trace continueAsyncTraceObject(TraceId traceId); - Trace continueAsyncContextTraceObject(TraceRoot traceRoot, LocalAsyncId localAsyncId, boolean canSampled); + Trace continueAsyncContextTraceObject(TraceRoot traceRoot, LocalAsyncId localAsyncId); + + Trace continueDisableAsyncContextTraceObject(LocalTraceRoot traceRoot); Trace newTraceObject(); diff --git a/profiler/src/main/java/com/navercorp/pinpoint/profiler/context/DefaultAsyncContextFactory.java b/profiler/src/main/java/com/navercorp/pinpoint/profiler/context/DefaultAsyncContextFactory.java index 22fdcbb11375..b9893d497866 100644 --- a/profiler/src/main/java/com/navercorp/pinpoint/profiler/context/DefaultAsyncContextFactory.java +++ b/profiler/src/main/java/com/navercorp/pinpoint/profiler/context/DefaultAsyncContextFactory.java @@ -20,6 +20,7 @@ import com.navercorp.pinpoint.bootstrap.context.AsyncState; import com.navercorp.pinpoint.bootstrap.context.MethodDescriptor; import com.navercorp.pinpoint.profiler.context.id.AsyncIdGenerator; +import com.navercorp.pinpoint.profiler.context.id.LocalTraceRoot; import com.navercorp.pinpoint.profiler.context.id.TraceRoot; import com.navercorp.pinpoint.profiler.context.method.PredefinedMethodDescriptorRegistry; @@ -71,5 +72,9 @@ public AsyncContext newAsyncContext(TraceRoot traceRoot, AsyncId asyncId, boolea return new StatefulAsyncContext(asyncTraceContext, traceRoot, asyncId, asyncMethodApiId, asyncState, canSampled); } + @Override + public AsyncContext newDisableAsyncContext(LocalTraceRoot traceRoot) { + return new DisableAsyncContext(traceRoot, asyncTraceContext); + } } diff --git a/profiler/src/main/java/com/navercorp/pinpoint/profiler/context/DefaultAsyncTraceContext.java b/profiler/src/main/java/com/navercorp/pinpoint/profiler/context/DefaultAsyncTraceContext.java index a1a6c44c4d76..b0266b87885c 100644 --- a/profiler/src/main/java/com/navercorp/pinpoint/profiler/context/DefaultAsyncTraceContext.java +++ b/profiler/src/main/java/com/navercorp/pinpoint/profiler/context/DefaultAsyncTraceContext.java @@ -18,11 +18,13 @@ import com.google.inject.Provider; import com.navercorp.pinpoint.bootstrap.context.Trace; -import java.util.Objects; import com.navercorp.pinpoint.exception.PinpointException; +import com.navercorp.pinpoint.profiler.context.id.LocalTraceRoot; import com.navercorp.pinpoint.profiler.context.id.TraceRoot; -import org.apache.logging.log4j.Logger; import org.apache.logging.log4j.LogManager; +import org.apache.logging.log4j.Logger; + +import java.util.Objects; /** @@ -54,8 +56,21 @@ public Reference continueAsyncContextTraceObject(TraceRoot traceRoot, Loc @Override public Trace newAsyncContextTraceObject(TraceRoot traceRoot, LocalAsyncId localAsyncId, boolean canSampled) { + if (canSampled) { + return continueAsyncContextTraceObject(traceRoot, localAsyncId); + } else { + return continueDisableAsyncContextTraceObject(traceRoot); + } + } + + public Trace continueAsyncContextTraceObject(TraceRoot traceRoot, LocalAsyncId localAsyncId) { + final BaseTraceFactory baseTraceFactory = baseTraceFactoryProvider.get(); + return baseTraceFactory.continueAsyncContextTraceObject(traceRoot, localAsyncId); + } + + public Trace continueDisableAsyncContextTraceObject(LocalTraceRoot traceRoot) { final BaseTraceFactory baseTraceFactory = baseTraceFactoryProvider.get(); - return baseTraceFactory.continueAsyncContextTraceObject(traceRoot, localAsyncId, canSampled); + return baseTraceFactory.continueDisableAsyncContextTraceObject(traceRoot); } diff --git a/profiler/src/main/java/com/navercorp/pinpoint/profiler/context/DefaultBaseTraceFactory.java b/profiler/src/main/java/com/navercorp/pinpoint/profiler/context/DefaultBaseTraceFactory.java index f3d5ff0ac618..14e125b7a6c9 100644 --- a/profiler/src/main/java/com/navercorp/pinpoint/profiler/context/DefaultBaseTraceFactory.java +++ b/profiler/src/main/java/com/navercorp/pinpoint/profiler/context/DefaultBaseTraceFactory.java @@ -17,6 +17,7 @@ package com.navercorp.pinpoint.profiler.context; import com.navercorp.pinpoint.bootstrap.context.AsyncState; +import com.navercorp.pinpoint.bootstrap.context.SpanEventRecorder; import com.navercorp.pinpoint.bootstrap.context.SpanRecorder; import com.navercorp.pinpoint.bootstrap.context.Trace; import com.navercorp.pinpoint.bootstrap.context.TraceId; @@ -148,21 +149,26 @@ Trace newTraceObject(TraceSampler.State state) { // internal async trace. @Override - public Trace continueAsyncContextTraceObject(TraceRoot traceRoot, LocalAsyncId localAsyncId, boolean sampling) { - if (sampling) { - final SpanChunkFactory spanChunkFactory = new AsyncSpanChunkFactory(traceRoot, localAsyncId); - final Storage storage = storageFactory.createStorage(spanChunkFactory); + public Trace continueAsyncContextTraceObject(TraceRoot traceRoot, LocalAsyncId localAsyncId) { + final boolean sampling = true; + final SpanChunkFactory spanChunkFactory = new AsyncSpanChunkFactory(traceRoot, localAsyncId); + final Storage storage = storageFactory.createStorage(spanChunkFactory); - final CallStack callStack = callStackFactory.newCallStack(); + final CallStack callStack = callStackFactory.newCallStack(); - final SpanRecorder spanRecorder = recorderFactory.newTraceRootSpanRecorder(traceRoot, sampling); + final SpanRecorder spanRecorder = recorderFactory.newTraceRootSpanRecorder(traceRoot, sampling); - final WrappedSpanEventRecorder wrappedSpanEventRecorder = recorderFactory.newWrappedSpanEventRecorder(traceRoot); + final WrappedSpanEventRecorder wrappedSpanEventRecorder = recorderFactory.newWrappedSpanEventRecorder(traceRoot); - return new AsyncChildTrace(traceRoot, callStack, storage, sampling, spanRecorder, wrappedSpanEventRecorder, localAsyncId); - } else { - return new DisableAsyncChildTrace(traceRoot, localAsyncId); - } + return new AsyncChildTrace(traceRoot, callStack, storage, sampling, spanRecorder, wrappedSpanEventRecorder, localAsyncId); + } + + @Override + public Trace continueDisableAsyncContextTraceObject(LocalTraceRoot traceRoot) { + final AsyncState asyncState = new DisableAsyncState(); + SpanRecorder spanRecorder = recorderFactory.newDisableSpanRecorder(traceRoot); + SpanEventRecorder spanEventRecorder = recorderFactory.newDisableSpanEventRecorder(traceRoot, asyncState); + return new DisableAsyncChildTrace(traceRoot, spanRecorder, spanEventRecorder); } @@ -181,7 +187,7 @@ public Trace continueAsyncTraceObject(final TraceId traceId) { final CallStack callStack = callStackFactory.newCallStack(); final ActiveTraceHandle handle = registerActiveTrace(traceRoot); - final SpanAsyncStateListener asyncStateListener = new SpanAsyncStateListener(span, storageFactory); + final ListenableAsyncState.AsyncStateListener asyncStateListener = new SpanAsyncStateListener(span, storageFactory); final AsyncState asyncState = new ListenableAsyncState(traceRoot, asyncStateListener, handle, uriStatStorage); final SpanRecorder spanRecorder = recorderFactory.newSpanRecorder(span, traceId.isRoot(), sampling); @@ -220,7 +226,7 @@ Trace newAsyncTraceObject(TraceSampler.State state) { final CallStack callStack = callStackFactory.newCallStack(); final ActiveTraceHandle handle = registerActiveTrace(traceRoot); - final SpanAsyncStateListener asyncStateListener = new SpanAsyncStateListener(span, storageFactory); + final ListenableAsyncState.AsyncStateListener asyncStateListener = new SpanAsyncStateListener(span, storageFactory); final AsyncState asyncState = new ListenableAsyncState(traceRoot, asyncStateListener, handle, uriStatStorage); @@ -247,9 +253,10 @@ public Trace disableSampling() { private Trace newLocalTrace(long nextDisabledId) { final LocalTraceRoot traceRoot = traceRootFactory.newDisableTraceRoot(nextDisabledId); final SpanRecorder spanRecorder = recorderFactory.newDisableSpanRecorder(traceRoot); + final SpanEventRecorder spanEventRecorder = recorderFactory.newDisableSpanEventRecorder(traceRoot, new DisableAsyncState()); final long traceStartTime = traceRoot.getTraceStartTime(); final long threadId = Thread.currentThread().getId(); final ActiveTraceHandle activeTraceHandle = registerActiveTrace(nextDisabledId, traceStartTime, threadId); - return new DisableTrace(traceRoot, spanRecorder, activeTraceHandle, uriStatStorage); + return new DisableTrace(traceRoot, spanRecorder, spanEventRecorder, activeTraceHandle, uriStatStorage); } } \ No newline at end of file diff --git a/profiler/src/main/java/com/navercorp/pinpoint/profiler/context/DisableAsyncChildTrace.java b/profiler/src/main/java/com/navercorp/pinpoint/profiler/context/DisableAsyncChildTrace.java index 07e92895221c..4e045a18b9e8 100644 --- a/profiler/src/main/java/com/navercorp/pinpoint/profiler/context/DisableAsyncChildTrace.java +++ b/profiler/src/main/java/com/navercorp/pinpoint/profiler/context/DisableAsyncChildTrace.java @@ -22,7 +22,6 @@ import com.navercorp.pinpoint.bootstrap.context.TraceId; import com.navercorp.pinpoint.bootstrap.context.scope.TraceScope; import com.navercorp.pinpoint.profiler.context.id.LocalTraceRoot; -import com.navercorp.pinpoint.profiler.context.recorder.DisableSpanEventRecorder; import com.navercorp.pinpoint.profiler.context.scope.DefaultTraceScopePool; import java.util.Objects; @@ -35,14 +34,15 @@ public class DisableAsyncChildTrace implements Trace { private DefaultTraceScopePool scopePool; private final LocalTraceRoot traceRoot; - private final LocalAsyncId localAsyncId; private int depth; - private DisableSpanEventRecorder spanEventRecorder; + private final SpanRecorder spanRecorder; + private final SpanEventRecorder spanEventRecorder; - public DisableAsyncChildTrace(final LocalTraceRoot traceRoot, final LocalAsyncId localAsyncId) { + public DisableAsyncChildTrace(final LocalTraceRoot traceRoot, SpanRecorder spanRecorder, SpanEventRecorder spanEventRecorder) { this.traceRoot = Objects.requireNonNull(traceRoot, "traceRoot"); - this.localAsyncId = Objects.requireNonNull(localAsyncId, "localAsyncId"); + this.spanRecorder = Objects.requireNonNull(spanRecorder, "spanRecorder"); + this.spanEventRecorder = Objects.requireNonNull(spanEventRecorder, "spanEventRecorder"); } @Override @@ -68,9 +68,6 @@ public void traceBlockEnd(int stackId) { } private SpanEventRecorder getSpanEventRecorder() { - if (spanEventRecorder == null) { - spanEventRecorder = new DisableSpanEventRecorder(traceRoot); - } return spanEventRecorder; } @@ -84,7 +81,7 @@ private void pop() { @Override public boolean isRootStack() { - throw new UnsupportedOperationException(UNSUPPORTED_OPERATION); + return depth == 0; } @Override @@ -118,7 +115,7 @@ public boolean canSampled() { @Override public boolean isRoot() { - return this.getTraceId().isRoot(); + return false; } @Override @@ -128,12 +125,12 @@ public boolean isAsync() { @Override public SpanRecorder getSpanRecorder() { - return null; + return spanRecorder; } @Override public SpanEventRecorder currentSpanEventRecorder() { - return null; + return spanEventRecorder; } @Override @@ -170,7 +167,6 @@ public TraceScope addScope(String name) { public String toString() { return "DisableAsyncChildTrace{" + "traceRoot=" + traceRoot + - ", localAsyncId=" + localAsyncId + '}'; } } diff --git a/profiler/src/main/java/com/navercorp/pinpoint/profiler/context/DisableAsyncContext.java b/profiler/src/main/java/com/navercorp/pinpoint/profiler/context/DisableAsyncContext.java new file mode 100644 index 000000000000..6c65b20dae0f --- /dev/null +++ b/profiler/src/main/java/com/navercorp/pinpoint/profiler/context/DisableAsyncContext.java @@ -0,0 +1,36 @@ +package com.navercorp.pinpoint.profiler.context; + +import com.navercorp.pinpoint.bootstrap.context.AsyncContext; +import com.navercorp.pinpoint.bootstrap.context.Trace; +import com.navercorp.pinpoint.profiler.context.id.LocalTraceRoot; + +import java.util.Objects; + +/** + * @author Woonduk Kang(emeroad) + */ +public class DisableAsyncContext implements AsyncContext { + private final LocalTraceRoot traceRoot; + private final AsyncTraceContext asyncTraceContext; + + public DisableAsyncContext(LocalTraceRoot traceRoot, AsyncTraceContext asyncTraceContext) { + this.traceRoot = Objects.requireNonNull(traceRoot, "traceRoot"); + this.asyncTraceContext = Objects.requireNonNull(asyncTraceContext, "asyncTraceContext"); + } + + @Override + public Trace continueAsyncTraceObject() { + + return null; + } + + @Override + public Trace currentAsyncTraceObject() { + return null; + } + + @Override + public void close() { + asyncTraceContext.removeTraceObject(); + } +} diff --git a/profiler/src/main/java/com/navercorp/pinpoint/profiler/context/DisableAsyncState.java b/profiler/src/main/java/com/navercorp/pinpoint/profiler/context/DisableAsyncState.java new file mode 100644 index 000000000000..a35f28814388 --- /dev/null +++ b/profiler/src/main/java/com/navercorp/pinpoint/profiler/context/DisableAsyncState.java @@ -0,0 +1,23 @@ +package com.navercorp.pinpoint.profiler.context; + +import com.navercorp.pinpoint.bootstrap.context.AsyncState; + +/** + * @author Woonduk Kang(emeroad) + */ +public class DisableAsyncState implements AsyncState { + @Override + public void setup() { + + } + + @Override + public boolean await() { + return false; + } + + @Override + public void finish() { + + } +} diff --git a/profiler/src/main/java/com/navercorp/pinpoint/profiler/context/DisableTrace.java b/profiler/src/main/java/com/navercorp/pinpoint/profiler/context/DisableTrace.java index 97530263d430..2b219ea7ae84 100644 --- a/profiler/src/main/java/com/navercorp/pinpoint/profiler/context/DisableTrace.java +++ b/profiler/src/main/java/com/navercorp/pinpoint/profiler/context/DisableTrace.java @@ -24,7 +24,6 @@ import com.navercorp.pinpoint.profiler.context.active.ActiveTraceHandle; import com.navercorp.pinpoint.profiler.context.id.LocalTraceRoot; import com.navercorp.pinpoint.profiler.context.id.Shared; -import com.navercorp.pinpoint.profiler.context.recorder.DisableSpanEventRecorder; import com.navercorp.pinpoint.profiler.context.scope.DefaultTraceScopePool; import com.navercorp.pinpoint.profiler.context.storage.UriStatStorage; @@ -48,13 +47,14 @@ public class DisableTrace implements Trace { private int depth; - private DisableSpanEventRecorder spanEventRecorder; + private SpanEventRecorder spanEventRecorder; private boolean closed = false; - public DisableTrace(LocalTraceRoot traceRoot, SpanRecorder spanRecorder, ActiveTraceHandle handle, UriStatStorage uriStatStorage) { + public DisableTrace(LocalTraceRoot traceRoot, SpanRecorder spanRecorder, SpanEventRecorder spanEventRecorder, ActiveTraceHandle handle, UriStatStorage uriStatStorage) { this.traceRoot = Objects.requireNonNull(traceRoot, "traceRoot"); this.spanRecorder = Objects.requireNonNull(spanRecorder, "spanRecorder"); + this.spanEventRecorder = Objects.requireNonNull(spanEventRecorder, "spanEventRecorder"); this.handle = Objects.requireNonNull(handle, "handle"); this.uriStatStorage = Objects.requireNonNull(uriStatStorage, "uriStatStorage"); @@ -79,7 +79,7 @@ public SpanEventRecorder traceBlockBegin() { @Override public SpanEventRecorder traceBlockBegin(int stackId) { push(); - return getSpanEventRecorder(); + return this.spanEventRecorder; } @Override @@ -92,13 +92,6 @@ public void traceBlockEnd(int stackId) { pop(); } - private SpanEventRecorder getSpanEventRecorder() { - if (spanEventRecorder == null) { - spanEventRecorder = new DisableSpanEventRecorder(traceRoot); - } - return spanEventRecorder; - } - private int push() { return this.depth++; } @@ -131,7 +124,7 @@ public boolean isAsync() { @Override public boolean isRootStack() { - throw new UnsupportedOperationException(UNSUPPORTED_OPERATION); + return depth == 0; } @@ -176,7 +169,7 @@ public SpanRecorder getSpanRecorder() { @Override public SpanEventRecorder currentSpanEventRecorder() { - return getSpanEventRecorder(); + return spanEventRecorder; } diff --git a/profiler/src/main/java/com/navercorp/pinpoint/profiler/context/LoggingBaseTraceFactory.java b/profiler/src/main/java/com/navercorp/pinpoint/profiler/context/LoggingBaseTraceFactory.java index 8abb3d1d2418..5e927770e0c3 100644 --- a/profiler/src/main/java/com/navercorp/pinpoint/profiler/context/LoggingBaseTraceFactory.java +++ b/profiler/src/main/java/com/navercorp/pinpoint/profiler/context/LoggingBaseTraceFactory.java @@ -19,10 +19,12 @@ import com.navercorp.pinpoint.bootstrap.context.Trace; import com.navercorp.pinpoint.bootstrap.context.TraceId; import com.navercorp.pinpoint.common.annotations.InterfaceAudience; -import java.util.Objects; +import com.navercorp.pinpoint.profiler.context.id.LocalTraceRoot; import com.navercorp.pinpoint.profiler.context.id.TraceRoot; -import org.apache.logging.log4j.Logger; import org.apache.logging.log4j.LogManager; +import org.apache.logging.log4j.Logger; + +import java.util.Objects; /** * @author Woonduk Kang(emeroad) @@ -71,13 +73,23 @@ public Trace continueAsyncTraceObject(TraceId traceId) { return baseTraceFactory.continueAsyncTraceObject(traceId); } + + @Override + public Trace continueAsyncContextTraceObject(TraceRoot traceRoot, LocalAsyncId localAsyncId) { + if (logger.isDebugEnabled()) { + logger.debug("continueAsyncTraceObject(traceRoot:{}, localAsyncId:{})", traceRoot, localAsyncId); + } + + return baseTraceFactory.continueAsyncContextTraceObject(traceRoot, localAsyncId); + } + @Override - public Trace continueAsyncContextTraceObject(TraceRoot traceRoot, LocalAsyncId localAsyncId, boolean canSampled) { + public Trace continueDisableAsyncContextTraceObject(LocalTraceRoot traceRoot) { if (logger.isDebugEnabled()) { - logger.debug("continueAsyncTraceObject(traceRoot:{}, localAsyncId:{}, canSampled:{})", traceRoot, localAsyncId, canSampled); + logger.debug("continueDisableAsyncContextTraceObject(traceRoot:{})", traceRoot); } - return baseTraceFactory.continueAsyncContextTraceObject(traceRoot, localAsyncId, canSampled); + return baseTraceFactory.continueDisableAsyncContextTraceObject(traceRoot); } @Override diff --git a/profiler/src/main/java/com/navercorp/pinpoint/profiler/context/recorder/DefaultRecorderFactory.java b/profiler/src/main/java/com/navercorp/pinpoint/profiler/context/recorder/DefaultRecorderFactory.java index c346dcbcb9d9..8f53a581c21a 100644 --- a/profiler/src/main/java/com/navercorp/pinpoint/profiler/context/recorder/DefaultRecorderFactory.java +++ b/profiler/src/main/java/com/navercorp/pinpoint/profiler/context/recorder/DefaultRecorderFactory.java @@ -77,4 +77,12 @@ public WrappedSpanEventRecorder newWrappedSpanEventRecorder(TraceRoot traceRoot, final AsyncContextFactory asyncContextFactory = asyncContextFactoryProvider.get(); return new WrappedAsyncSpanEventRecorder(traceRoot, asyncContextFactory, stringMetaDataService, sqlMetaDataService, errorHandler, asyncState); } + + @Override + public DisableSpanEventRecorder newDisableSpanEventRecorder(LocalTraceRoot traceRoot, AsyncState asyncState) { + Objects.requireNonNull(asyncState, "asyncState"); + + final AsyncContextFactory asyncContextFactory = asyncContextFactoryProvider.get(); + return new DisableSpanEventRecorder(traceRoot, asyncContextFactory, asyncState); + } } diff --git a/profiler/src/main/java/com/navercorp/pinpoint/profiler/context/recorder/DisableSpanEventRecorder.java b/profiler/src/main/java/com/navercorp/pinpoint/profiler/context/recorder/DisableSpanEventRecorder.java index 43ce4750517f..7565f8cef931 100644 --- a/profiler/src/main/java/com/navercorp/pinpoint/profiler/context/recorder/DisableSpanEventRecorder.java +++ b/profiler/src/main/java/com/navercorp/pinpoint/profiler/context/recorder/DisableSpanEventRecorder.java @@ -1,12 +1,14 @@ package com.navercorp.pinpoint.profiler.context.recorder; import com.navercorp.pinpoint.bootstrap.context.AsyncContext; +import com.navercorp.pinpoint.bootstrap.context.AsyncState; import com.navercorp.pinpoint.bootstrap.context.MethodDescriptor; import com.navercorp.pinpoint.bootstrap.context.ParsingResult; import com.navercorp.pinpoint.bootstrap.context.SpanEventRecorder; import com.navercorp.pinpoint.common.trace.AnnotationKey; import com.navercorp.pinpoint.common.trace.ServiceType; import com.navercorp.pinpoint.common.util.DataType; +import com.navercorp.pinpoint.profiler.context.AsyncContextFactory; import com.navercorp.pinpoint.profiler.context.id.LocalTraceRoot; import java.util.Objects; @@ -17,10 +19,15 @@ public class DisableSpanEventRecorder implements SpanEventRecorder { public static final String UNSUPPORTED_OPERATION = "DisableSpanEventRecorder"; - private final LocalTraceRoot root; + private final LocalTraceRoot traceRoot; + private final AsyncContextFactory asyncContextFactory; + private final AsyncState asyncState; - public DisableSpanEventRecorder(LocalTraceRoot root) { - this.root = Objects.requireNonNull(root, "root"); + public DisableSpanEventRecorder(LocalTraceRoot traceRoot, + AsyncContextFactory asyncContextFactory, AsyncState asyncState) { + this.traceRoot = Objects.requireNonNull(traceRoot, "traceRoot"); + this.asyncContextFactory = Objects.requireNonNull(asyncContextFactory, "asyncContextFactory"); + this.asyncState = Objects.requireNonNull(asyncState, "asyncState"); } @Override @@ -105,12 +112,12 @@ public void recordNextSpanId(long spanId) { @Override public AsyncContext recordNextAsyncContext() { - return null; + return asyncContextFactory.newDisableAsyncContext(this.traceRoot); } @Override public AsyncContext recordNextAsyncContext(boolean stateful) { - return null; + return recordNextAsyncContext(); } @Override diff --git a/profiler/src/main/java/com/navercorp/pinpoint/profiler/context/recorder/RecorderFactory.java b/profiler/src/main/java/com/navercorp/pinpoint/profiler/context/recorder/RecorderFactory.java index 1b1f8b45d6b7..4d7b3b1c5fa9 100644 --- a/profiler/src/main/java/com/navercorp/pinpoint/profiler/context/recorder/RecorderFactory.java +++ b/profiler/src/main/java/com/navercorp/pinpoint/profiler/context/recorder/RecorderFactory.java @@ -36,4 +36,6 @@ public interface RecorderFactory { WrappedSpanEventRecorder newWrappedSpanEventRecorder(TraceRoot traceRoot); WrappedSpanEventRecorder newWrappedSpanEventRecorder(TraceRoot traceRoot, AsyncState asyncState); + + DisableSpanEventRecorder newDisableSpanEventRecorder(LocalTraceRoot traceRoot, AsyncState asyncState); } diff --git a/profiler/src/test/java/com/navercorp/pinpoint/profiler/context/AsyncContextTest.java b/profiler/src/test/java/com/navercorp/pinpoint/profiler/context/AsyncContextTest.java index f5e84060cf10..ab6240ee7ed7 100644 --- a/profiler/src/test/java/com/navercorp/pinpoint/profiler/context/AsyncContextTest.java +++ b/profiler/src/test/java/com/navercorp/pinpoint/profiler/context/AsyncContextTest.java @@ -19,7 +19,6 @@ import static org.junit.jupiter.api.Assertions.assertNull; import static org.junit.jupiter.api.Assertions.assertTrue; import static org.mockito.ArgumentMatchers.any; -import static org.mockito.ArgumentMatchers.eq; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.when; @@ -36,7 +35,7 @@ protected AsyncTraceContext newAsyncTraceContext() { BaseTraceFactory baseTraceFactory = mock(DefaultBaseTraceFactory.class); BaseTraceFactoryProvider baseTraceFactoryProvider = mock(BaseTraceFactoryProvider.class); - when(baseTraceFactory.continueAsyncContextTraceObject(any(TraceRoot.class), any(LocalAsyncId.class), eq(true))) + when(baseTraceFactory.continueAsyncContextTraceObject(any(TraceRoot.class), any(LocalAsyncId.class))) .thenAnswer(new Answer() { @Override public Trace answer(InvocationOnMock invocationOnMock) { @@ -45,7 +44,7 @@ public Trace answer(InvocationOnMock invocationOnMock) { return trace; } }); - when(baseTraceFactory.continueAsyncContextTraceObject(any(TraceRoot.class), any(LocalAsyncId.class), eq(false))) + when(baseTraceFactory.continueDisableAsyncContextTraceObject(any(TraceRoot.class))) .thenAnswer(new Answer() { @Override public Trace answer(InvocationOnMock invocationOnMock) { diff --git a/profiler/src/test/java/com/navercorp/pinpoint/profiler/context/DefaultAsyncTraceContextTest.java b/profiler/src/test/java/com/navercorp/pinpoint/profiler/context/DefaultAsyncTraceContextTest.java index 89f6360da8d7..0e696130f3b3 100644 --- a/profiler/src/test/java/com/navercorp/pinpoint/profiler/context/DefaultAsyncTraceContextTest.java +++ b/profiler/src/test/java/com/navercorp/pinpoint/profiler/context/DefaultAsyncTraceContextTest.java @@ -18,7 +18,6 @@ import static org.junit.jupiter.api.Assertions.assertNull; import static org.junit.jupiter.api.Assertions.assertTrue; import static org.mockito.ArgumentMatchers.any; -import static org.mockito.ArgumentMatchers.eq; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.when; @@ -35,7 +34,7 @@ protected AsyncTraceContext newAsyncTraceContext() { BaseTraceFactory baseTraceFactory = mock(DefaultBaseTraceFactory.class); BaseTraceFactoryProvider baseTraceFactoryProvider = mock(BaseTraceFactoryProvider.class); - when(baseTraceFactory.continueAsyncContextTraceObject(any(TraceRoot.class), any(LocalAsyncId.class), eq(true))) + when(baseTraceFactory.continueAsyncContextTraceObject(any(TraceRoot.class), any(LocalAsyncId.class))) .thenAnswer(new Answer() { @Override public Trace answer(InvocationOnMock invocationOnMock) { @@ -44,7 +43,7 @@ public Trace answer(InvocationOnMock invocationOnMock) { return trace; } }); - when(baseTraceFactory.continueAsyncContextTraceObject(any(TraceRoot.class), any(LocalAsyncId.class), eq(false))) + when(baseTraceFactory.continueDisableAsyncContextTraceObject(any(TraceRoot.class))) .thenAnswer(new Answer() { @Override public Trace answer(InvocationOnMock invocationOnMock) { diff --git a/profiler/src/test/java/com/navercorp/pinpoint/profiler/context/LocalTraceTest.java b/profiler/src/test/java/com/navercorp/pinpoint/profiler/context/LocalTraceTest.java index dd09ac4ce136..ede3319c56d0 100644 --- a/profiler/src/test/java/com/navercorp/pinpoint/profiler/context/LocalTraceTest.java +++ b/profiler/src/test/java/com/navercorp/pinpoint/profiler/context/LocalTraceTest.java @@ -6,6 +6,8 @@ import com.navercorp.pinpoint.profiler.context.active.ActiveTraceHandle; import com.navercorp.pinpoint.profiler.context.id.LocalTraceRoot; import com.navercorp.pinpoint.profiler.context.id.TraceRoot; +import com.navercorp.pinpoint.profiler.context.recorder.DisableSpanEventRecorder; +import com.navercorp.pinpoint.profiler.context.recorder.DisableSpanRecorder; import com.navercorp.pinpoint.profiler.context.storage.UriStatStorage; import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.Test; @@ -72,11 +74,13 @@ private Trace newTrace(LocalTraceRoot traceRoot) { ActiveTraceHandle activeTraceHandle = mock(ActiveTraceHandle.class); UriStatStorage uriStatStorage = mock(UriStatStorage.class); SpanRecorder spanRecorder = mock(SpanRecorder.class); - return new DisableTrace(traceRoot, spanRecorder, activeTraceHandle, uriStatStorage); + SpanEventRecorder spanEventRecorder = mock(DisableSpanEventRecorder.class); + return new DisableTrace(traceRoot, spanRecorder, spanEventRecorder, activeTraceHandle, uriStatStorage); } private Trace newChildTrace(LocalTraceRoot traceRoot) { - LocalAsyncId localAsyncId = mock(LocalAsyncId.class); - return new DisableAsyncChildTrace(traceRoot, localAsyncId); + SpanRecorder spanRecorder = mock(DisableSpanRecorder.class); + SpanEventRecorder spanEventRecorder = mock(DisableSpanEventRecorder.class); + return new DisableAsyncChildTrace(traceRoot, spanRecorder, spanEventRecorder); } } \ No newline at end of file