You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@skywalking.apache.org by wu...@apache.org on 2019/03/14 12:37:48 UTC
[incubator-skywalking] branch async-context updated: Finish the
context based on #stopSpan result, rather than listener.
This is an automated email from the ASF dual-hosted git repository.
wusheng pushed a commit to branch async-context
in repository https://gitbox.apache.org/repos/asf/incubator-skywalking.git
The following commit(s) were added to refs/heads/async-context by this push:
new 930e73f Finish the context based on #stopSpan result, rather than listener.
930e73f is described below
commit 930e73f1a1dcec26eb64fdfe042c2a73b44efeaf
Author: Wu Sheng <wu...@foxmail.com>
AuthorDate: Thu Mar 14 20:37:38 2019 +0800
Finish the context based on #stopSpan result, rather than listener.
---
.../apm/agent/core/context/AbstractTracerContext.java | 3 ++-
.../skywalking/apm/agent/core/context/AsyncSpan.java | 2 +-
.../apm/agent/core/context/ContextManager.java | 18 ++++--------------
.../core/context/ContextManagerExtendService.java | 9 +--------
.../apm/agent/core/context/IgnoredTracerContext.java | 14 ++++++--------
.../apm/agent/core/context/TracingContext.java | 4 +++-
6 files changed, 17 insertions(+), 33 deletions(-)
diff --git a/apm-sniffer/apm-agent-core/src/main/java/org/apache/skywalking/apm/agent/core/context/AbstractTracerContext.java b/apm-sniffer/apm-agent-core/src/main/java/org/apache/skywalking/apm/agent/core/context/AbstractTracerContext.java
index e9e1ed0..4b3cd2d 100644
--- a/apm-sniffer/apm-agent-core/src/main/java/org/apache/skywalking/apm/agent/core/context/AbstractTracerContext.java
+++ b/apm-sniffer/apm-agent-core/src/main/java/org/apache/skywalking/apm/agent/core/context/AbstractTracerContext.java
@@ -98,8 +98,9 @@ public interface AbstractTracerContext {
* Finish the given span, and the given span should be the active span of current tracing context(stack)
*
* @param span to finish
+ * @return true when context should be clear.
*/
- void stopSpan(AbstractSpan span);
+ boolean stopSpan(AbstractSpan span);
/**
* Notify this context, current span is going to be finished async in another thread.
diff --git a/apm-sniffer/apm-agent-core/src/main/java/org/apache/skywalking/apm/agent/core/context/AsyncSpan.java b/apm-sniffer/apm-agent-core/src/main/java/org/apache/skywalking/apm/agent/core/context/AsyncSpan.java
index 8b3e81d..8e2483e 100644
--- a/apm-sniffer/apm-agent-core/src/main/java/org/apache/skywalking/apm/agent/core/context/AsyncSpan.java
+++ b/apm-sniffer/apm-agent-core/src/main/java/org/apache/skywalking/apm/agent/core/context/AsyncSpan.java
@@ -33,7 +33,7 @@ public interface AsyncSpan {
* called.
*
* This method must be called
- *
+ *
* 1. In original thread(tracing context).
* 2. Current span is active span.
*
diff --git a/apm-sniffer/apm-agent-core/src/main/java/org/apache/skywalking/apm/agent/core/context/ContextManager.java b/apm-sniffer/apm-agent-core/src/main/java/org/apache/skywalking/apm/agent/core/context/ContextManager.java
index 378602b..2dbdb35 100644
--- a/apm-sniffer/apm-agent-core/src/main/java/org/apache/skywalking/apm/agent/core/context/ContextManager.java
+++ b/apm-sniffer/apm-agent-core/src/main/java/org/apache/skywalking/apm/agent/core/context/ContextManager.java
@@ -36,7 +36,7 @@ import org.apache.skywalking.apm.util.StringUtil;
*
* @author wusheng
*/
-public class ContextManager implements TracingContextListener, BootService, IgnoreTracerContextListener {
+public class ContextManager implements BootService {
private static final ILog logger = LogManager.getLogger(ContextManager.class);
private static ThreadLocal<AbstractTracerContext> CONTEXT = new ThreadLocal<AbstractTracerContext>();
private static ThreadLocal<RuntimeContext> RUNTIME_CONTEXT = new ThreadLocal<RuntimeContext>();
@@ -166,7 +166,9 @@ public class ContextManager implements TracingContextListener, BootService, Igno
}
public static void stopSpan(AbstractSpan span) {
- get().stopSpan(span);
+ if (get().stopSpan(span)) {
+ CONTEXT.remove();
+ }
}
@Override
@@ -176,8 +178,6 @@ public class ContextManager implements TracingContextListener, BootService, Igno
@Override
public void boot() {
- ContextManagerExtendService service = ServiceManager.INSTANCE.findService(ContextManagerExtendService.class);
- service.registerListeners(this);
}
@Override
@@ -189,16 +189,6 @@ public class ContextManager implements TracingContextListener, BootService, Igno
}
- @Override
- public void afterFinished(TraceSegment traceSegment) {
- CONTEXT.remove();
- }
-
- @Override
- public void afterFinished(IgnoredTracerContext traceSegment) {
- CONTEXT.remove();
- }
-
public static boolean isActive() {
return get() != null;
}
diff --git a/apm-sniffer/apm-agent-core/src/main/java/org/apache/skywalking/apm/agent/core/context/ContextManagerExtendService.java b/apm-sniffer/apm-agent-core/src/main/java/org/apache/skywalking/apm/agent/core/context/ContextManagerExtendService.java
index f97853a..d25e915 100644
--- a/apm-sniffer/apm-agent-core/src/main/java/org/apache/skywalking/apm/agent/core/context/ContextManagerExtendService.java
+++ b/apm-sniffer/apm-agent-core/src/main/java/org/apache/skywalking/apm/agent/core/context/ContextManagerExtendService.java
@@ -18,9 +18,7 @@
package org.apache.skywalking.apm.agent.core.context;
-import org.apache.skywalking.apm.agent.core.boot.BootService;
-import org.apache.skywalking.apm.agent.core.boot.DefaultImplementor;
-import org.apache.skywalking.apm.agent.core.boot.ServiceManager;
+import org.apache.skywalking.apm.agent.core.boot.*;
import org.apache.skywalking.apm.agent.core.conf.Config;
import org.apache.skywalking.apm.agent.core.sampling.SamplingService;
@@ -45,11 +43,6 @@ public class ContextManagerExtendService implements BootService {
}
- public void registerListeners(ContextManager manager) {
- TracingContext.ListenerManager.add(manager);
- IgnoredTracerContext.ListenerManager.add(manager);
- }
-
public AbstractTracerContext createTraceContext(String operationName, boolean forceSampling) {
AbstractTracerContext context;
int suffixIdx = operationName.lastIndexOf(".");
diff --git a/apm-sniffer/apm-agent-core/src/main/java/org/apache/skywalking/apm/agent/core/context/IgnoredTracerContext.java b/apm-sniffer/apm-agent-core/src/main/java/org/apache/skywalking/apm/agent/core/context/IgnoredTracerContext.java
index cef591e..59bc05c 100644
--- a/apm-sniffer/apm-agent-core/src/main/java/org/apache/skywalking/apm/agent/core/context/IgnoredTracerContext.java
+++ b/apm-sniffer/apm-agent-core/src/main/java/org/apache/skywalking/apm/agent/core/context/IgnoredTracerContext.java
@@ -16,17 +16,14 @@
*
*/
-
package org.apache.skywalking.apm.agent.core.context;
-import java.util.LinkedList;
-import java.util.List;
-import org.apache.skywalking.apm.agent.core.context.trace.AbstractSpan;
-import org.apache.skywalking.apm.agent.core.context.trace.NoopSpan;
+import java.util.*;
+import org.apache.skywalking.apm.agent.core.context.trace.*;
/**
- * The <code>IgnoredTracerContext</code> represent a context should be ignored.
- * So it just maintains the stack with an integer depth field.
+ * The <code>IgnoredTracerContext</code> represent a context should be ignored. So it just maintains the stack with an
+ * integer depth field.
*
* All operations through this will be ignored, and keep the memory and gc cost as low as possible.
*
@@ -88,11 +85,12 @@ public class IgnoredTracerContext implements AbstractTracerContext {
}
@Override
- public void stopSpan(AbstractSpan span) {
+ public boolean stopSpan(AbstractSpan span) {
stackDepth--;
if (stackDepth == 0) {
ListenerManager.notifyFinish(this);
}
+ return stackDepth == 0;
}
@Override public AbstractTracerContext awaitFinishAsync() {
diff --git a/apm-sniffer/apm-agent-core/src/main/java/org/apache/skywalking/apm/agent/core/context/TracingContext.java b/apm-sniffer/apm-agent-core/src/main/java/org/apache/skywalking/apm/agent/core/context/TracingContext.java
index 66f90cc..7739073 100644
--- a/apm-sniffer/apm-agent-core/src/main/java/org/apache/skywalking/apm/agent/core/context/TracingContext.java
+++ b/apm-sniffer/apm-agent-core/src/main/java/org/apache/skywalking/apm/agent/core/context/TracingContext.java
@@ -391,7 +391,7 @@ public class TracingContext implements AbstractTracerContext {
* @param span to finish
*/
@Override
- public void stopSpan(AbstractSpan span) {
+ public boolean stopSpan(AbstractSpan span) {
AbstractSpan lastSpan = peek();
if (lastSpan == span) {
if (lastSpan instanceof AbstractTracingSpan) {
@@ -409,6 +409,8 @@ public class TracingContext implements AbstractTracerContext {
if (checkFinishConditions()) {
finish();
}
+
+ return activeSpanStack.isEmpty();
}
@Override public AbstractTracerContext awaitFinishAsync() {