From 7c4e429dd4707437969889f6e3f85b5027866b09 Mon Sep 17 00:00:00 2001 From: emeroad Date: Mon, 2 Jan 2023 18:26:36 +0900 Subject: [PATCH] [#9584] Add LocalTraceRoot for DisableTrace --- .../context/DefaultBaseTraceFactory.java | 3 +- .../context/DisableAsyncChildTrace.java | 10 ++-- .../profiler/context/DisableTrace.java | 6 +-- .../context/id/DefaultTraceRootFactory.java | 2 +- .../profiler/context/id/LocalTraceRoot.java | 51 ++---------------- .../context/id/LocalTraceRootImpl.java | 52 +++++++++++++++++++ ...raceRoot.java => RemoteTraceRootImpl.java} | 39 ++------------ .../profiler/context/id/TraceRoot.java | 11 ++-- .../profiler/context/id/TraceRootFactory.java | 2 +- .../recorder/DefaultRecorderFactory.java | 3 +- .../context/recorder/DisableSpanRecorder.java | 6 +-- .../context/recorder/RecorderFactory.java | 3 +- .../profiler/context/LocalTraceTest.java | 15 +++--- 13 files changed, 95 insertions(+), 108 deletions(-) create mode 100644 profiler/src/main/java/com/navercorp/pinpoint/profiler/context/id/LocalTraceRootImpl.java rename profiler/src/main/java/com/navercorp/pinpoint/profiler/context/id/{RemoteTraceRoot.java => RemoteTraceRootImpl.java} (59%) 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 873245873a0a..f3d5ff0ac618 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 @@ -25,6 +25,7 @@ import com.navercorp.pinpoint.profiler.context.active.ActiveTraceHandle; import com.navercorp.pinpoint.profiler.context.active.ActiveTraceRepository; import com.navercorp.pinpoint.profiler.context.id.ListenableAsyncState; +import com.navercorp.pinpoint.profiler.context.id.LocalTraceRoot; import com.navercorp.pinpoint.profiler.context.id.TraceRoot; import com.navercorp.pinpoint.profiler.context.id.TraceRootFactory; import com.navercorp.pinpoint.profiler.context.recorder.RecorderFactory; @@ -244,7 +245,7 @@ public Trace disableSampling() { } private Trace newLocalTrace(long nextDisabledId) { - final TraceRoot traceRoot = traceRootFactory.newDisableTraceRoot(nextDisabledId); + final LocalTraceRoot traceRoot = traceRootFactory.newDisableTraceRoot(nextDisabledId); final SpanRecorder spanRecorder = recorderFactory.newDisableSpanRecorder(traceRoot); final long traceStartTime = traceRoot.getTraceStartTime(); final long threadId = Thread.currentThread().getId(); 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 800325cc7ddc..c814c0de7205 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 @@ -21,7 +21,7 @@ import com.navercorp.pinpoint.bootstrap.context.Trace; import com.navercorp.pinpoint.bootstrap.context.TraceId; import com.navercorp.pinpoint.bootstrap.context.scope.TraceScope; -import com.navercorp.pinpoint.profiler.context.id.TraceRoot; +import com.navercorp.pinpoint.profiler.context.id.LocalTraceRoot; import com.navercorp.pinpoint.profiler.context.scope.DefaultTraceScopePool; import java.util.Objects; @@ -33,10 +33,10 @@ public class DisableAsyncChildTrace implements Trace { private DefaultTraceScopePool scopePool; - private final TraceRoot traceRoot; + private final LocalTraceRoot traceRoot; private final LocalAsyncId localAsyncId; - public DisableAsyncChildTrace(final TraceRoot traceRoot, final LocalAsyncId localAsyncId) { + public DisableAsyncChildTrace(final LocalTraceRoot traceRoot, final LocalAsyncId localAsyncId) { this.traceRoot = Objects.requireNonNull(traceRoot, "traceRoot"); this.localAsyncId = Objects.requireNonNull(localAsyncId, "localAsyncId"); } @@ -71,7 +71,7 @@ public int getCallStackFrameId() { return 0; } - private TraceRoot getTraceRoot() { + private LocalTraceRoot getTraceRoot() { return this.traceRoot; } @@ -87,7 +87,7 @@ public long getStartTime() { @Override public TraceId getTraceId() { - return getTraceRoot().getTraceId(); + throw new UnsupportedOperationException(UNSUPPORTED_OPERATION); } @Override 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 7434079b2048..7261b81afdd2 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 @@ -22,8 +22,8 @@ import com.navercorp.pinpoint.bootstrap.context.TraceId; import com.navercorp.pinpoint.bootstrap.context.scope.TraceScope; 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.id.TraceRoot; import com.navercorp.pinpoint.profiler.context.scope.DefaultTraceScopePool; import com.navercorp.pinpoint.profiler.context.storage.UriStatStorage; @@ -39,7 +39,7 @@ public class DisableTrace implements Trace { public static final String UNSUPPORTED_OPERATION = "disable trace"; public static final long DISABLE_TRACE_OBJECT_ID = -1; - private final TraceRoot traceRoot; + private final LocalTraceRoot traceRoot; private final SpanRecorder spanRecorder; private DefaultTraceScopePool scopePool; private final ActiveTraceHandle handle; @@ -47,7 +47,7 @@ public class DisableTrace implements Trace { private boolean closed = false; - public DisableTrace(TraceRoot traceRoot, SpanRecorder spanRecorder, ActiveTraceHandle handle, UriStatStorage uriStatStorage) { + public DisableTrace(LocalTraceRoot traceRoot, SpanRecorder spanRecorder, ActiveTraceHandle handle, UriStatStorage uriStatStorage) { this.traceRoot = Objects.requireNonNull(traceRoot, "traceRoot"); this.spanRecorder = Objects.requireNonNull(spanRecorder, "spanRecorder"); diff --git a/profiler/src/main/java/com/navercorp/pinpoint/profiler/context/id/DefaultTraceRootFactory.java b/profiler/src/main/java/com/navercorp/pinpoint/profiler/context/id/DefaultTraceRootFactory.java index 2c9317cc5f10..b55875f4cddf 100644 --- a/profiler/src/main/java/com/navercorp/pinpoint/profiler/context/id/DefaultTraceRootFactory.java +++ b/profiler/src/main/java/com/navercorp/pinpoint/profiler/context/id/DefaultTraceRootFactory.java @@ -45,7 +45,7 @@ public TraceRoot newTraceRoot(long transactionId) { @Override - public TraceRoot newDisableTraceRoot(long transactionId) { + public LocalTraceRoot newDisableTraceRoot(long transactionId) { final long startTime = traceStartTime(); return TraceRoot.local(agentId, startTime, transactionId); } diff --git a/profiler/src/main/java/com/navercorp/pinpoint/profiler/context/id/LocalTraceRoot.java b/profiler/src/main/java/com/navercorp/pinpoint/profiler/context/id/LocalTraceRoot.java index 25b26a16209f..8c5d9e58e7d8 100644 --- a/profiler/src/main/java/com/navercorp/pinpoint/profiler/context/id/LocalTraceRoot.java +++ b/profiler/src/main/java/com/navercorp/pinpoint/profiler/context/id/LocalTraceRoot.java @@ -1,56 +1,13 @@ package com.navercorp.pinpoint.profiler.context.id; -import com.navercorp.pinpoint.bootstrap.context.TraceId; - -import java.util.Objects; - /** * @author Woonduk Kang(emeroad) */ -public class LocalTraceRoot implements TraceRoot { - - private final String agentId; - private final long localTransactionId; - - private final long traceStartTime; - - private final Shared shared = new DefaultShared(); - - - public LocalTraceRoot(String agentId, long traceStartTime, long localTransactionId) { - this.agentId = Objects.requireNonNull(agentId, "agentId"); - this.traceStartTime = traceStartTime; - this.localTransactionId = localTransactionId; - } - - @Override - public TraceId getTraceId() { - return null; - } - - @Override - public long getLocalTransactionId() { - return localTransactionId; - } - - - @Override - public long getTraceStartTime() { - return traceStartTime; - } - +public interface LocalTraceRoot { - @Override - public Shared getShared() { - return shared; - } + long getLocalTransactionId(); + long getTraceStartTime(); - @Override - public String toString() { - return "DisableTraceRoot{" + - ", agentId='" + agentId + '\'' + - ", traceStartTime=" + traceStartTime + - '}'; - } + Shared getShared(); } diff --git a/profiler/src/main/java/com/navercorp/pinpoint/profiler/context/id/LocalTraceRootImpl.java b/profiler/src/main/java/com/navercorp/pinpoint/profiler/context/id/LocalTraceRootImpl.java new file mode 100644 index 000000000000..d7dd0c390d89 --- /dev/null +++ b/profiler/src/main/java/com/navercorp/pinpoint/profiler/context/id/LocalTraceRootImpl.java @@ -0,0 +1,52 @@ +package com.navercorp.pinpoint.profiler.context.id; + +import java.util.Objects; + +/** + * @author Woonduk Kang(emeroad) + */ +public class LocalTraceRootImpl implements LocalTraceRoot { + + protected final String agentId; + protected final long localTransactionId; + + protected final long traceStartTime; + + protected final Shared shared = new DefaultShared(); + + + LocalTraceRootImpl(String agentId, long traceStartTime, long localTransactionId) { + this.agentId = Objects.requireNonNull(agentId, "agentId"); + this.traceStartTime = traceStartTime; + this.localTransactionId = localTransactionId; + } + + public String getAgentId() { + return agentId; + } + + @Override + public long getLocalTransactionId() { + return localTransactionId; + } + + @Override + public long getTraceStartTime() { + return traceStartTime; + } + + + @Override + public Shared getShared() { + return shared; + } + + + @Override + public String toString() { + return "DefaultLocalTraceRoot{" + + ", agentId='" + agentId + '\'' + + ", traceStartTime=" + traceStartTime + + '}'; + } +} diff --git a/profiler/src/main/java/com/navercorp/pinpoint/profiler/context/id/RemoteTraceRoot.java b/profiler/src/main/java/com/navercorp/pinpoint/profiler/context/id/RemoteTraceRootImpl.java similarity index 59% rename from profiler/src/main/java/com/navercorp/pinpoint/profiler/context/id/RemoteTraceRoot.java rename to profiler/src/main/java/com/navercorp/pinpoint/profiler/context/id/RemoteTraceRootImpl.java index 3605f82cfaeb..04487fe5685c 100644 --- a/profiler/src/main/java/com/navercorp/pinpoint/profiler/context/id/RemoteTraceRoot.java +++ b/profiler/src/main/java/com/navercorp/pinpoint/profiler/context/id/RemoteTraceRootImpl.java @@ -23,21 +23,13 @@ /** * @author Woonduk Kang(emeroad) */ -public class RemoteTraceRoot implements TraceRoot { +public class RemoteTraceRootImpl extends LocalTraceRootImpl implements TraceRoot { private final TraceId traceId; - private final String agentId; - private final long localTransactionId; - private final long traceStartTime; - - private final Shared shared = new DefaultShared(); - - RemoteTraceRoot(TraceId traceId, String agentId, long traceStartTime, long localTransactionId) { + RemoteTraceRootImpl(TraceId traceId, String agentId, long traceStartTime, long localTransactionId) { + super(agentId, traceStartTime, localTransactionId); this.traceId = Objects.requireNonNull(traceId, "traceId"); - this.agentId = Objects.requireNonNull(agentId, "agentId"); - this.traceStartTime = traceStartTime; - this.localTransactionId = localTransactionId; } @Override @@ -45,34 +37,13 @@ public TraceId getTraceId() { return traceId; } - @Override - public long getLocalTransactionId() { - return localTransactionId; - } - - - @Override - public long getTraceStartTime() { - return traceStartTime; - } - - - - - @Override - public Shared getShared() { - return shared; - } - - - - @Override public String toString() { - return "DefaultTraceRoot{" + + return "DefaultRemoteTraceRoot{" + "traceId=" + traceId + ", agentId='" + agentId + '\'' + ", traceStartTime=" + traceStartTime + '}'; } + } diff --git a/profiler/src/main/java/com/navercorp/pinpoint/profiler/context/id/TraceRoot.java b/profiler/src/main/java/com/navercorp/pinpoint/profiler/context/id/TraceRoot.java index f8377867994b..0e39754f0164 100644 --- a/profiler/src/main/java/com/navercorp/pinpoint/profiler/context/id/TraceRoot.java +++ b/profiler/src/main/java/com/navercorp/pinpoint/profiler/context/id/TraceRoot.java @@ -23,22 +23,25 @@ /** * @author Woonduk Kang(emeroad) */ -public interface TraceRoot { +public interface TraceRoot extends LocalTraceRoot { TraceId getTraceId(); + @Override long getLocalTransactionId(); + @Override long getTraceStartTime(); + @Override Shared getShared(); static TraceRoot remote(TraceId traceId, String agentId, long traceStartTime, long localTransactionId) { - return new RemoteTraceRoot(traceId, agentId, traceStartTime, localTransactionId); + return new RemoteTraceRootImpl(traceId, agentId, traceStartTime, localTransactionId); } - static TraceRoot local(String agentId, long traceStartTime, long localTransactionId) { + static LocalTraceRoot local(String agentId, long traceStartTime, long localTransactionId) { Objects.requireNonNull(agentId, "agentId"); - return new LocalTraceRoot(agentId, traceStartTime, localTransactionId); + return new LocalTraceRootImpl(agentId, traceStartTime, localTransactionId); } } diff --git a/profiler/src/main/java/com/navercorp/pinpoint/profiler/context/id/TraceRootFactory.java b/profiler/src/main/java/com/navercorp/pinpoint/profiler/context/id/TraceRootFactory.java index 68fb7e644b8b..98c3f02ed1ae 100644 --- a/profiler/src/main/java/com/navercorp/pinpoint/profiler/context/id/TraceRootFactory.java +++ b/profiler/src/main/java/com/navercorp/pinpoint/profiler/context/id/TraceRootFactory.java @@ -25,7 +25,7 @@ public interface TraceRootFactory { TraceRoot newTraceRoot(long transactionId); - TraceRoot newDisableTraceRoot(long transactionId); + LocalTraceRoot newDisableTraceRoot(long transactionId); TraceRoot continueTraceRoot(TraceId traceId, long transactionId); } 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 0eb464225627..c346dcbcb9d9 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 @@ -23,6 +23,7 @@ import com.navercorp.pinpoint.profiler.context.AsyncContextFactory; import com.navercorp.pinpoint.profiler.context.Span; import com.navercorp.pinpoint.profiler.context.errorhandler.IgnoreErrorHandler; +import com.navercorp.pinpoint.profiler.context.id.LocalTraceRoot; import com.navercorp.pinpoint.profiler.context.id.TraceRoot; import com.navercorp.pinpoint.profiler.metadata.SqlMetaDataService; import com.navercorp.pinpoint.profiler.metadata.StringMetaDataService; @@ -59,7 +60,7 @@ public SpanRecorder newTraceRootSpanRecorder(TraceRoot traceRoot, boolean sampli } @Override - public SpanRecorder newDisableSpanRecorder(TraceRoot traceRoot) { + public SpanRecorder newDisableSpanRecorder(LocalTraceRoot traceRoot) { return new DisableSpanRecorder(traceRoot, errorHandler); } diff --git a/profiler/src/main/java/com/navercorp/pinpoint/profiler/context/recorder/DisableSpanRecorder.java b/profiler/src/main/java/com/navercorp/pinpoint/profiler/context/recorder/DisableSpanRecorder.java index f510f5156f9f..f8c34ac5d60d 100644 --- a/profiler/src/main/java/com/navercorp/pinpoint/profiler/context/recorder/DisableSpanRecorder.java +++ b/profiler/src/main/java/com/navercorp/pinpoint/profiler/context/recorder/DisableSpanRecorder.java @@ -23,8 +23,8 @@ import com.navercorp.pinpoint.common.trace.ServiceType; import com.navercorp.pinpoint.common.util.DataType; import com.navercorp.pinpoint.profiler.context.errorhandler.IgnoreErrorHandler; +import com.navercorp.pinpoint.profiler.context.id.LocalTraceRoot; import com.navercorp.pinpoint.profiler.context.id.Shared; -import com.navercorp.pinpoint.profiler.context.id.TraceRoot; import java.util.Objects; @@ -32,10 +32,10 @@ * @author Woonduk Kang(emeroad) */ public class DisableSpanRecorder implements SpanRecorder { - private final TraceRoot traceRoot; + private final LocalTraceRoot traceRoot; private final IgnoreErrorHandler ignoreErrorHandler; - public DisableSpanRecorder(TraceRoot traceRoot, IgnoreErrorHandler ignoreErrorHandler) { + public DisableSpanRecorder(LocalTraceRoot traceRoot, IgnoreErrorHandler ignoreErrorHandler) { this.traceRoot = Objects.requireNonNull(traceRoot, "traceRoot"); this.ignoreErrorHandler = Objects.requireNonNull(ignoreErrorHandler, "ignoreErrorHandler"); } 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 b92eae11bcdb..1b1f8b45d6b7 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 @@ -19,6 +19,7 @@ import com.navercorp.pinpoint.bootstrap.context.AsyncState; import com.navercorp.pinpoint.bootstrap.context.SpanRecorder; import com.navercorp.pinpoint.profiler.context.Span; +import com.navercorp.pinpoint.profiler.context.id.LocalTraceRoot; import com.navercorp.pinpoint.profiler.context.id.TraceRoot; /** @@ -30,7 +31,7 @@ public interface RecorderFactory { SpanRecorder newTraceRootSpanRecorder(TraceRoot traceRoot, boolean sampling); - SpanRecorder newDisableSpanRecorder(TraceRoot traceRoot); + SpanRecorder newDisableSpanRecorder(LocalTraceRoot traceRoot); WrappedSpanEventRecorder newWrappedSpanEventRecorder(TraceRoot traceRoot); 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 c5a73c3ace2b..dd09ac4ce136 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 @@ -4,6 +4,7 @@ import com.navercorp.pinpoint.bootstrap.context.SpanRecorder; import com.navercorp.pinpoint.bootstrap.context.Trace; 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.storage.UriStatStorage; import org.junit.jupiter.api.Assertions; @@ -14,7 +15,7 @@ public class LocalTraceTest { @Test public void testGetScope() { - TraceRoot traceRoot = TraceRoot.local("testAgent", 2, 1); + LocalTraceRoot traceRoot = TraceRoot.local("testAgent", 2, 1); Trace trace = newTrace(traceRoot); Trace childTrace = newChildTrace(traceRoot); Assertions.assertNull(trace.addScope("empty")); @@ -23,7 +24,7 @@ public void testGetScope() { @Test public void testAddScope() { - TraceRoot traceRoot = TraceRoot.local("testAgent", 2, 1); + LocalTraceRoot traceRoot = TraceRoot.local("testAgent", 2, 1); Trace trace = newTrace(traceRoot); Trace childTrace = newChildTrace(traceRoot); @@ -35,7 +36,7 @@ public void testAddScope() { @Test public void testSampled() { - TraceRoot traceRoot = TraceRoot.local("testAgent", 2, 1); + LocalTraceRoot traceRoot = TraceRoot.local("testAgent", 2, 1); Trace trace = newTrace(traceRoot); Trace childTrace = newChildTrace(traceRoot); @@ -45,7 +46,7 @@ public void testSampled() { @Test public void testSpanRecorder() { - TraceRoot traceRoot = TraceRoot.local("testAgent", 2, 1); + LocalTraceRoot traceRoot = TraceRoot.local("testAgent", 2, 1); Trace trace = newTrace(traceRoot); Trace childTrace = newChildTrace(traceRoot); SpanRecorder spanRecorder = trace.getSpanRecorder(); @@ -57,7 +58,7 @@ public void testSpanRecorder() { @Test public void testCurrentSpanEventRecorder() { - TraceRoot traceRoot = TraceRoot.local("testAgent", 2, 1); + LocalTraceRoot traceRoot = TraceRoot.local("testAgent", 2, 1); Trace trace = newTrace(traceRoot); Trace childTrace = newChildTrace(traceRoot); SpanEventRecorder spanEventRecorder = trace.currentSpanEventRecorder(); @@ -67,14 +68,14 @@ public void testCurrentSpanEventRecorder() { Assertions.assertNull(childSpanEventRecorder); } - private Trace newTrace(TraceRoot traceRoot) { + 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); } - private Trace newChildTrace(TraceRoot traceRoot) { + private Trace newChildTrace(LocalTraceRoot traceRoot) { LocalAsyncId localAsyncId = mock(LocalAsyncId.class); return new DisableAsyncChildTrace(traceRoot, localAsyncId); }