From cad5f74b5b5b6c9ce54f5497826565fc63bc9cb5 Mon Sep 17 00:00:00 2001 From: emeroad Date: Wed, 18 Jan 2023 17:33:03 +0900 Subject: [PATCH] [#9595] Refactor AsyncState --- .../bootstrap/context/AsyncContextUtils.java | 3 +- .../bootstrap/context/AsyncStateSupport.java | 4 ++ .../context/StatefulAsyncContext.java | 5 ++ .../context/StatefulDisableAsyncContext.java | 5 ++ .../recorder/DefaultRecorderFactory.java | 11 +++- .../WrappedAsyncSpanEventRecorder.java | 60 ------------------- .../recorder/WrappedSpanEventRecorder.java | 35 +++++++++-- 7 files changed, 56 insertions(+), 67 deletions(-) delete mode 100644 profiler/src/main/java/com/navercorp/pinpoint/profiler/context/recorder/WrappedAsyncSpanEventRecorder.java diff --git a/bootstraps/bootstrap-core/src/main/java/com/navercorp/pinpoint/bootstrap/context/AsyncContextUtils.java b/bootstraps/bootstrap-core/src/main/java/com/navercorp/pinpoint/bootstrap/context/AsyncContextUtils.java index 22c79dcb68a8..714117106f6b 100644 --- a/bootstraps/bootstrap-core/src/main/java/com/navercorp/pinpoint/bootstrap/context/AsyncContextUtils.java +++ b/bootstraps/bootstrap-core/src/main/java/com/navercorp/pinpoint/bootstrap/context/AsyncContextUtils.java @@ -7,8 +7,7 @@ private AsyncContextUtils() { public static boolean asyncStateFinish(final AsyncContext asyncContext) { if (asyncContext instanceof AsyncStateSupport) { final AsyncStateSupport asyncStateSupport = (AsyncStateSupport) asyncContext; - AsyncState asyncState = asyncStateSupport.getAsyncState(); - asyncState.finish(); + asyncStateSupport.finish(); return true; } return false; diff --git a/bootstraps/bootstrap-core/src/main/java/com/navercorp/pinpoint/bootstrap/context/AsyncStateSupport.java b/bootstraps/bootstrap-core/src/main/java/com/navercorp/pinpoint/bootstrap/context/AsyncStateSupport.java index be1eb18f4511..29ca751de986 100644 --- a/bootstraps/bootstrap-core/src/main/java/com/navercorp/pinpoint/bootstrap/context/AsyncStateSupport.java +++ b/bootstraps/bootstrap-core/src/main/java/com/navercorp/pinpoint/bootstrap/context/AsyncStateSupport.java @@ -23,5 +23,9 @@ */ @InterfaceAudience.LimitedPrivate("vert.x") public interface AsyncStateSupport { + @Deprecated AsyncState getAsyncState(); + + void finish(); + } diff --git a/profiler/src/main/java/com/navercorp/pinpoint/profiler/context/StatefulAsyncContext.java b/profiler/src/main/java/com/navercorp/pinpoint/profiler/context/StatefulAsyncContext.java index d70c206c792a..27889446769e 100644 --- a/profiler/src/main/java/com/navercorp/pinpoint/profiler/context/StatefulAsyncContext.java +++ b/profiler/src/main/java/com/navercorp/pinpoint/profiler/context/StatefulAsyncContext.java @@ -44,6 +44,11 @@ public AsyncState getAsyncState() { return asyncState; } + @Override + public void finish() { + this.asyncState.finish(); + } + @Override public String toString() { return "StatefulAsyncContext{" + diff --git a/profiler/src/main/java/com/navercorp/pinpoint/profiler/context/StatefulDisableAsyncContext.java b/profiler/src/main/java/com/navercorp/pinpoint/profiler/context/StatefulDisableAsyncContext.java index 2fe28dea7e83..c10374a41e06 100644 --- a/profiler/src/main/java/com/navercorp/pinpoint/profiler/context/StatefulDisableAsyncContext.java +++ b/profiler/src/main/java/com/navercorp/pinpoint/profiler/context/StatefulDisableAsyncContext.java @@ -22,6 +22,11 @@ public AsyncState getAsyncState() { return asyncState; } + @Override + public void finish() { + this.asyncState.finish(); + } + @Override public String toString() { return "StatefulDisableAsyncContext{" + 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 de7d79ec591a..a8ce01b5ab1c 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 @@ -51,30 +51,39 @@ public DefaultRecorderFactory(Provider asyncContextFactoryP @Override public SpanRecorder newSpanRecorder(Span span) { + Objects.requireNonNull(span, "span"); + return new DefaultSpanRecorder(span, stringMetaDataService, sqlMetaDataService, errorHandler); } @Override public SpanRecorder newTraceRootSpanRecorder(TraceRoot traceRoot) { + Objects.requireNonNull(traceRoot, "traceRoot"); + return new TraceRootSpanRecorder(traceRoot); } @Override public SpanRecorder newDisableSpanRecorder(LocalTraceRoot traceRoot) { + Objects.requireNonNull(traceRoot, "traceRoot"); + return new DisableSpanRecorder(traceRoot, errorHandler); } @Override public WrappedSpanEventRecorder newWrappedSpanEventRecorder(TraceRoot traceRoot) { + Objects.requireNonNull(traceRoot, "traceRoot"); + final AsyncContextFactory asyncContextFactory = asyncContextFactoryProvider.get(); return new WrappedSpanEventRecorder(traceRoot, asyncContextFactory, stringMetaDataService, sqlMetaDataService, errorHandler); } @Override public WrappedSpanEventRecorder newWrappedSpanEventRecorder(TraceRoot traceRoot, AsyncState asyncState) { + Objects.requireNonNull(traceRoot, "traceRoot"); Objects.requireNonNull(asyncState, "asyncState"); final AsyncContextFactory asyncContextFactory = asyncContextFactoryProvider.get(); - return new WrappedAsyncSpanEventRecorder(traceRoot, asyncContextFactory, stringMetaDataService, sqlMetaDataService, errorHandler, asyncState); + return new WrappedSpanEventRecorder(traceRoot, asyncContextFactory, asyncState, stringMetaDataService, sqlMetaDataService, errorHandler); } } diff --git a/profiler/src/main/java/com/navercorp/pinpoint/profiler/context/recorder/WrappedAsyncSpanEventRecorder.java b/profiler/src/main/java/com/navercorp/pinpoint/profiler/context/recorder/WrappedAsyncSpanEventRecorder.java deleted file mode 100644 index 0fce37b8be51..000000000000 --- a/profiler/src/main/java/com/navercorp/pinpoint/profiler/context/recorder/WrappedAsyncSpanEventRecorder.java +++ /dev/null @@ -1,60 +0,0 @@ -/* - * Copyright 2019 NAVER Corp. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package com.navercorp.pinpoint.profiler.context.recorder; - -import com.navercorp.pinpoint.bootstrap.context.AsyncContext; -import com.navercorp.pinpoint.bootstrap.context.AsyncState; -import java.util.Objects; -import com.navercorp.pinpoint.profiler.context.AsyncContextFactory; -import com.navercorp.pinpoint.profiler.context.AsyncId; -import com.navercorp.pinpoint.profiler.context.errorhandler.IgnoreErrorHandler; -import com.navercorp.pinpoint.profiler.context.id.TraceRoot; -import com.navercorp.pinpoint.profiler.metadata.SqlMetaDataService; -import com.navercorp.pinpoint.profiler.metadata.StringMetaDataService; - -/** - * @author Woonduk Kang(emeroad) - */ -public class WrappedAsyncSpanEventRecorder extends WrappedSpanEventRecorder { - - private final AsyncState asyncState; - - public WrappedAsyncSpanEventRecorder(TraceRoot traceRoot, AsyncContextFactory asyncContextFactory, - StringMetaDataService stringMetaDataService, SqlMetaDataService sqlMetaCacheService, - IgnoreErrorHandler errorHandler, - AsyncState asyncState) { - - super(traceRoot, asyncContextFactory, stringMetaDataService, sqlMetaCacheService, errorHandler); - this.asyncState = Objects.requireNonNull(asyncState, "asyncState"); - } - - @Override - public AsyncContext recordNextAsyncContext(boolean asyncStateSupport) { - - if (asyncStateSupport) { - final TraceRoot traceRoot = this.traceRoot; - final AsyncId asyncIdObject = getNextAsyncId(); - final boolean isDisabled = isOverflowState(); - - final AsyncState asyncState = this.asyncState; - asyncState.setup(); - final AsyncContext asyncContext = asyncContextFactory.newAsyncContext(traceRoot, asyncIdObject, isDisabled, asyncState); - return asyncContext; - } - return recordNextAsyncContext(); - } -} diff --git a/profiler/src/main/java/com/navercorp/pinpoint/profiler/context/recorder/WrappedSpanEventRecorder.java b/profiler/src/main/java/com/navercorp/pinpoint/profiler/context/recorder/WrappedSpanEventRecorder.java index 4603c5808546..7fff765dd943 100644 --- a/profiler/src/main/java/com/navercorp/pinpoint/profiler/context/recorder/WrappedSpanEventRecorder.java +++ b/profiler/src/main/java/com/navercorp/pinpoint/profiler/context/recorder/WrappedSpanEventRecorder.java @@ -17,6 +17,7 @@ import com.navercorp.pinpoint.bootstrap.context.AsyncContext; +import com.navercorp.pinpoint.bootstrap.context.AsyncState; import com.navercorp.pinpoint.bootstrap.context.ParsingResult; import com.navercorp.pinpoint.bootstrap.context.SpanEventRecorder; import com.navercorp.pinpoint.common.trace.AnnotationKey; @@ -38,6 +39,7 @@ import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; +import javax.annotation.Nullable; import java.util.Objects; /** @@ -49,18 +51,34 @@ public class WrappedSpanEventRecorder extends AbstractRecorder implements SpanEv private static final Logger logger = LogManager.getLogger(DefaultTrace.class.getName()); private static final boolean isDebug = logger.isDebugEnabled(); - protected final TraceRoot traceRoot; - protected final AsyncContextFactory asyncContextFactory; + private final TraceRoot traceRoot; + private final AsyncContextFactory asyncContextFactory; + @Nullable + private final AsyncState asyncState; private SpanEvent spanEvent; - public WrappedSpanEventRecorder(TraceRoot traceRoot, AsyncContextFactory asyncContextFactory, - final StringMetaDataService stringMetaDataService, final SqlMetaDataService sqlMetaCacheService, + public WrappedSpanEventRecorder(TraceRoot traceRoot, + AsyncContextFactory asyncContextFactory, + StringMetaDataService stringMetaDataService, + SqlMetaDataService sqlMetaDataService, + IgnoreErrorHandler ignoreErrorHandler) { + + this(traceRoot, asyncContextFactory, null, stringMetaDataService, sqlMetaDataService, ignoreErrorHandler); + } + + public WrappedSpanEventRecorder(TraceRoot traceRoot, + AsyncContextFactory asyncContextFactory, + @Nullable + final AsyncState asyncState, + final StringMetaDataService stringMetaDataService, + final SqlMetaDataService sqlMetaCacheService, final IgnoreErrorHandler errorHandler) { super(stringMetaDataService, sqlMetaCacheService, errorHandler); this.traceRoot = Objects.requireNonNull(traceRoot, "traceRoot"); this.asyncContextFactory = Objects.requireNonNull(asyncContextFactory, "asyncContextFactory"); + this.asyncState = asyncState; } public void setWrapped(final SpanEvent spanEvent) { @@ -137,6 +155,15 @@ protected boolean isOverflowState() { @Override public AsyncContext recordNextAsyncContext(boolean asyncStateSupport) { + if (asyncStateSupport && asyncState != null) { + final TraceRoot traceRoot = this.traceRoot; + final AsyncId asyncIdObject = getNextAsyncId(); + final boolean isDisabled = isOverflowState(); + + final AsyncState asyncState = this.asyncState; + asyncState.setup(); + return asyncContextFactory.newAsyncContext(traceRoot, asyncIdObject, isDisabled, asyncState); + } return recordNextAsyncContext(); }