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() {