From b85ada779cc9c745bfcc539660f01070b9fe3750 Mon Sep 17 00:00:00 2001 From: ascrutae Date: Thu, 14 Dec 2017 10:02:45 +0800 Subject: [PATCH 1/7] fix the local span cannot ref other trace segment --- .../apm/agent/core/context/TracingContext.java | 8 +++++--- .../agent/core/context/trace/AbstractSpan.java | 8 +++++++- .../core/context/trace/AbstractTracingSpan.java | 16 ++++++++++++++++ .../apm/agent/core/context/trace/EntrySpan.java | 15 --------------- .../apm/agent/core/context/trace/NoopSpan.java | 3 +++ 5 files changed, 31 insertions(+), 19 deletions(-) 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 9f9f6c1aa..63e257f42 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 @@ -16,7 +16,6 @@ * */ - package org.apache.skywalking.apm.agent.core.context; import java.util.LinkedList; @@ -50,6 +49,7 @@ import org.apache.skywalking.apm.agent.core.sampling.SamplingService; * ContextCarrier} or {@link ContextSnapshot}. * * @author wusheng + * @author zhang xin */ public class TracingContext implements AbstractTracerContext { /** @@ -159,7 +159,7 @@ public class TracingContext implements AbstractTracerContext { this.segment.relatedGlobalTraces(carrier.getDistributedTraceId()); AbstractSpan span = this.activeSpan(); if (span instanceof EntrySpan) { - ((EntrySpan)span).ref(ref); + span.ref(ref); } } @@ -213,7 +213,9 @@ public class TracingContext implements AbstractTracerContext { */ @Override public void continued(ContextSnapshot snapshot) { - this.segment.ref(new TraceSegmentRef(snapshot)); + TraceSegmentRef segmentRef = new TraceSegmentRef(snapshot); + this.segment.ref(segmentRef); + this.activeSpan().ref(segmentRef); this.segment.relatedGlobalTraces(snapshot.getDistributedTraceId()); } diff --git a/apm-sniffer/apm-agent-core/src/main/java/org/apache/skywalking/apm/agent/core/context/trace/AbstractSpan.java b/apm-sniffer/apm-agent-core/src/main/java/org/apache/skywalking/apm/agent/core/context/trace/AbstractSpan.java index 7e0b75712..ada06d3d0 100644 --- a/apm-sniffer/apm-agent-core/src/main/java/org/apache/skywalking/apm/agent/core/context/trace/AbstractSpan.java +++ b/apm-sniffer/apm-agent-core/src/main/java/org/apache/skywalking/apm/agent/core/context/trace/AbstractSpan.java @@ -16,7 +16,6 @@ * */ - package org.apache.skywalking.apm.agent.core.context.trace; import java.util.Map; @@ -110,4 +109,11 @@ public interface AbstractSpan { String getOperationName(); AbstractSpan setOperationId(int operationId); + + /** + * Reference other trace segment. + * + * @param ref segment ref + */ + void ref(TraceSegmentRef ref); } diff --git a/apm-sniffer/apm-agent-core/src/main/java/org/apache/skywalking/apm/agent/core/context/trace/AbstractTracingSpan.java b/apm-sniffer/apm-agent-core/src/main/java/org/apache/skywalking/apm/agent/core/context/trace/AbstractTracingSpan.java index 6277aea11..7e39cff4e 100644 --- a/apm-sniffer/apm-agent-core/src/main/java/org/apache/skywalking/apm/agent/core/context/trace/AbstractTracingSpan.java +++ b/apm-sniffer/apm-agent-core/src/main/java/org/apache/skywalking/apm/agent/core/context/trace/AbstractTracingSpan.java @@ -64,6 +64,13 @@ public abstract class AbstractTracingSpan implements AbstractSpan { */ protected List logs; + /** + * The refs of parent trace segments, except the primary one. For most RPC call, {@link #refs} contains only one + * element, but if this segment is a start span of batch process, the segment faces multi parents, at this moment, + * we use this {@link #refs} to link them. + */ + protected List refs; + protected AbstractTracingSpan(int spanId, int parentSpanId, String operationName) { this.operationName = operationName; this.operationId = DictionaryUtil.nullValue(); @@ -276,4 +283,13 @@ public abstract class AbstractTracingSpan implements AbstractSpan { return spanBuilder; } + + @Override public void ref(TraceSegmentRef ref) { + if (refs == null) { + refs = new LinkedList(); + } + if (!refs.contains(ref)) { + refs.add(ref); + } + } } diff --git a/apm-sniffer/apm-agent-core/src/main/java/org/apache/skywalking/apm/agent/core/context/trace/EntrySpan.java b/apm-sniffer/apm-agent-core/src/main/java/org/apache/skywalking/apm/agent/core/context/trace/EntrySpan.java index 1e47cba55..cae1c6e3e 100644 --- a/apm-sniffer/apm-agent-core/src/main/java/org/apache/skywalking/apm/agent/core/context/trace/EntrySpan.java +++ b/apm-sniffer/apm-agent-core/src/main/java/org/apache/skywalking/apm/agent/core/context/trace/EntrySpan.java @@ -38,12 +38,6 @@ import org.apache.skywalking.apm.network.trace.component.Component; * @author wusheng */ public class EntrySpan extends StackBasedTracingSpan { - /** - * The refs of parent trace segments, except the primary one. For most RPC call, {@link #refs} contains only one - * element, but if this segment is a start span of batch process, the segment faces multi parents, at this moment, - * we use this {@link #refs} to link them. - */ - private List refs; private int currentMaxDepth; @@ -146,15 +140,6 @@ public class EntrySpan extends StackBasedTracingSpan { return builder; } - public void ref(TraceSegmentRef ref) { - if (refs == null) { - refs = new LinkedList(); - } - if (!refs.contains(ref)) { - refs.add(ref); - } - } - private void clearWhenRestart() { this.componentId = DictionaryUtil.nullValue(); this.componentName = null; diff --git a/apm-sniffer/apm-agent-core/src/main/java/org/apache/skywalking/apm/agent/core/context/trace/NoopSpan.java b/apm-sniffer/apm-agent-core/src/main/java/org/apache/skywalking/apm/agent/core/context/trace/NoopSpan.java index 4a6d0b092..4be30d1b7 100644 --- a/apm-sniffer/apm-agent-core/src/main/java/org/apache/skywalking/apm/agent/core/context/trace/NoopSpan.java +++ b/apm-sniffer/apm-agent-core/src/main/java/org/apache/skywalking/apm/agent/core/context/trace/NoopSpan.java @@ -99,4 +99,7 @@ public class NoopSpan implements AbstractSpan { @Override public AbstractSpan setOperationId(int operationId) { return this; } + + @Override public void ref(TraceSegmentRef ref) { + } } From ad5fd07343bb9b45036c97573a5edb31234d0626 Mon Sep 17 00:00:00 2001 From: ascrutae Date: Thu, 14 Dec 2017 10:10:51 +0800 Subject: [PATCH 2/7] remove unimport class --- .../skywalking/apm/agent/core/context/trace/EntrySpan.java | 3 --- 1 file changed, 3 deletions(-) diff --git a/apm-sniffer/apm-agent-core/src/main/java/org/apache/skywalking/apm/agent/core/context/trace/EntrySpan.java b/apm-sniffer/apm-agent-core/src/main/java/org/apache/skywalking/apm/agent/core/context/trace/EntrySpan.java index cae1c6e3e..2870a4b40 100644 --- a/apm-sniffer/apm-agent-core/src/main/java/org/apache/skywalking/apm/agent/core/context/trace/EntrySpan.java +++ b/apm-sniffer/apm-agent-core/src/main/java/org/apache/skywalking/apm/agent/core/context/trace/EntrySpan.java @@ -16,11 +16,8 @@ * */ - package org.apache.skywalking.apm.agent.core.context.trace; -import java.util.LinkedList; -import java.util.List; import org.apache.skywalking.apm.agent.core.dictionary.DictionaryUtil; import org.apache.skywalking.apm.network.proto.SpanObject; import org.apache.skywalking.apm.network.trace.component.Component; From 9f4532c03b57eb7c505a3691d1f599f893caabc6 Mon Sep 17 00:00:00 2001 From: ascrutae Date: Thu, 14 Dec 2017 10:43:00 +0800 Subject: [PATCH 3/7] fix miss transform ref data for each span issue --- .../agent/core/context/trace/AbstractTracingSpan.java | 6 +++++- .../apm/agent/core/context/trace/EntrySpan.java | 11 ----------- 2 files changed, 5 insertions(+), 12 deletions(-) diff --git a/apm-sniffer/apm-agent-core/src/main/java/org/apache/skywalking/apm/agent/core/context/trace/AbstractTracingSpan.java b/apm-sniffer/apm-agent-core/src/main/java/org/apache/skywalking/apm/agent/core/context/trace/AbstractTracingSpan.java index 7e39cff4e..90d174d02 100644 --- a/apm-sniffer/apm-agent-core/src/main/java/org/apache/skywalking/apm/agent/core/context/trace/AbstractTracingSpan.java +++ b/apm-sniffer/apm-agent-core/src/main/java/org/apache/skywalking/apm/agent/core/context/trace/AbstractTracingSpan.java @@ -16,7 +16,6 @@ * */ - package org.apache.skywalking.apm.agent.core.context.trace; import java.util.LinkedList; @@ -280,6 +279,11 @@ public abstract class AbstractTracingSpan implements AbstractSpan { spanBuilder.addLogs(log.transform()); } } + if (this.refs != null) { + for (TraceSegmentRef ref : this.refs) { + spanBuilder.addRefs(ref.transform()); + } + } return spanBuilder; } diff --git a/apm-sniffer/apm-agent-core/src/main/java/org/apache/skywalking/apm/agent/core/context/trace/EntrySpan.java b/apm-sniffer/apm-agent-core/src/main/java/org/apache/skywalking/apm/agent/core/context/trace/EntrySpan.java index 2870a4b40..b8b3b00fc 100644 --- a/apm-sniffer/apm-agent-core/src/main/java/org/apache/skywalking/apm/agent/core/context/trace/EntrySpan.java +++ b/apm-sniffer/apm-agent-core/src/main/java/org/apache/skywalking/apm/agent/core/context/trace/EntrySpan.java @@ -19,7 +19,6 @@ package org.apache.skywalking.apm.agent.core.context.trace; import org.apache.skywalking.apm.agent.core.dictionary.DictionaryUtil; -import org.apache.skywalking.apm.network.proto.SpanObject; import org.apache.skywalking.apm.network.trace.component.Component; /** @@ -127,16 +126,6 @@ public class EntrySpan extends StackBasedTracingSpan { return false; } - @Override public SpanObject.Builder transform() { - SpanObject.Builder builder = super.transform(); - if (refs != null) { - for (TraceSegmentRef ref : refs) { - builder.addRefs(ref.transform()); - } - } - return builder; - } - private void clearWhenRestart() { this.componentId = DictionaryUtil.nullValue(); this.componentName = null; From 6b14bc861d7dd54258004511b4e9963cf9fd355a Mon Sep 17 00:00:00 2001 From: ascrutae Date: Thu, 14 Dec 2017 11:24:15 +0800 Subject: [PATCH 4/7] [Agent] Fix the enhance class is incorrect --- .../continuation/SkywalkingContinuationActivation.java | 2 +- .../activation/opentracing/span/SkywalkingSpanActivation.java | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/apm-sniffer/apm-toolkit-activation/apm-toolkit-opentracing-activation/src/main/java/org/apache/skywalking/apm/toolkit/activation/opentracing/continuation/SkywalkingContinuationActivation.java b/apm-sniffer/apm-toolkit-activation/apm-toolkit-opentracing-activation/src/main/java/org/apache/skywalking/apm/toolkit/activation/opentracing/continuation/SkywalkingContinuationActivation.java index a1e93bb24..f92d26b88 100644 --- a/apm-sniffer/apm-toolkit-activation/apm-toolkit-opentracing-activation/src/main/java/org/apache/skywalking/apm/toolkit/activation/opentracing/continuation/SkywalkingContinuationActivation.java +++ b/apm-sniffer/apm-toolkit-activation/apm-toolkit-opentracing-activation/src/main/java/org/apache/skywalking/apm/toolkit/activation/opentracing/continuation/SkywalkingContinuationActivation.java @@ -42,7 +42,7 @@ import static org.apache.skywalking.apm.agent.core.plugin.match.NameMatch.byName */ public class SkywalkingContinuationActivation extends ClassInstanceMethodsEnhancePluginDefine { - private static final String ENHANCE_CLASS = "org.skywalking.apm.toolkit.opentracing.SkywalkingContinuation"; + private static final String ENHANCE_CLASS = "org.apache.skywalking.apm.toolkit.opentracing.SkywalkingContinuation"; private static final String CONSTRUCTOR_INTERCEPTOR = "org.apache.skywalking.apm.toolkit.activation.opentracing.continuation.ConstructorInterceptor"; private static final String ACTIVATE_METHOD_INTERCEPTOR = "org.apache.skywalking.apm.toolkit.activation.opentracing.continuation.ActivateInterceptor"; diff --git a/apm-sniffer/apm-toolkit-activation/apm-toolkit-opentracing-activation/src/main/java/org/apache/skywalking/apm/toolkit/activation/opentracing/span/SkywalkingSpanActivation.java b/apm-sniffer/apm-toolkit-activation/apm-toolkit-opentracing-activation/src/main/java/org/apache/skywalking/apm/toolkit/activation/opentracing/span/SkywalkingSpanActivation.java index 399ea78bc..7a9303e47 100644 --- a/apm-sniffer/apm-toolkit-activation/apm-toolkit-opentracing-activation/src/main/java/org/apache/skywalking/apm/toolkit/activation/opentracing/span/SkywalkingSpanActivation.java +++ b/apm-sniffer/apm-toolkit-activation/apm-toolkit-opentracing-activation/src/main/java/org/apache/skywalking/apm/toolkit/activation/opentracing/span/SkywalkingSpanActivation.java @@ -58,10 +58,10 @@ public class SkywalkingSpanActivation extends ClassInstanceMethodsEnhancePluginD private static final String ENHANCE_CLASS = "org.apache.skywalking.apm.toolkit.opentracing.SkywalkingSpan"; - private static final String SPAN_BUILDER_CLASS_NAME = "org.skywalking.apm.toolkit.opentracing.SkywalkingSpanBuilder"; + private static final String SPAN_BUILDER_CLASS_NAME = "org.apache.skywalking.apm.toolkit.opentracing.SkywalkingSpanBuilder"; private static final String CONSTRUCTOR_WITH_SPAN_BUILDER_INTERCEPTOR = "org.apache.skywalking.apm.toolkit.activation.opentracing.span.ConstructorWithSpanBuilderInterceptor"; - private static final String SKYWALKING_TRACER_CLASS_NAME = "SkywalkingTracer"; + private static final String SKYWALKING_TRACER_CLASS_NAME = "org.apache.skywalking.apm.toolkit.opentracing.SkywalkingTracer"; private static final String CONSTRUCTOR_WITH_TRACER_INTERCEPTOR = "org.apache.skywalking.apm.toolkit.activation.opentracing.span.ConstructorWithTracerInterceptor"; private static final String FINISH_METHOD_INTERCEPTOR = "org.apache.skywalking.apm.toolkit.activation.opentracing.span.SpanFinishInterceptor"; From 25dda07a84a0067f6939e27a157fe931abf98f8b Mon Sep 17 00:00:00 2001 From: ascrutae Date: Thu, 14 Dec 2017 16:38:10 +0800 Subject: [PATCH 5/7] [Agent] fix jedis testcase failed --- ...sterConstructorWithListHostAndPortArgInterceptorTest.java | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/apm-sniffer/apm-sdk-plugin/jedis-2.x-plugin/src/test/java/org/apache/skywalking/apm/plugin/jedis/v2/JedisClusterConstructorWithListHostAndPortArgInterceptorTest.java b/apm-sniffer/apm-sdk-plugin/jedis-2.x-plugin/src/test/java/org/apache/skywalking/apm/plugin/jedis/v2/JedisClusterConstructorWithListHostAndPortArgInterceptorTest.java index 116e4ce41..f1520744f 100644 --- a/apm-sniffer/apm-sdk-plugin/jedis-2.x-plugin/src/test/java/org/apache/skywalking/apm/plugin/jedis/v2/JedisClusterConstructorWithListHostAndPortArgInterceptorTest.java +++ b/apm-sniffer/apm-sdk-plugin/jedis-2.x-plugin/src/test/java/org/apache/skywalking/apm/plugin/jedis/v2/JedisClusterConstructorWithListHostAndPortArgInterceptorTest.java @@ -16,10 +16,9 @@ * */ - package org.apache.skywalking.apm.plugin.jedis.v2; -import java.util.HashSet; +import java.util.LinkedHashSet; import java.util.Set; import org.apache.skywalking.apm.agent.core.plugin.interceptor.enhance.EnhancedInstance; import org.junit.After; @@ -45,7 +44,7 @@ public class JedisClusterConstructorWithListHostAndPortArgInterceptorTest { @Before public void setUp() throws Exception { - hostAndPortSet = new HashSet(); + hostAndPortSet = new LinkedHashSet(); interceptor = new JedisClusterConstructorWithListHostAndPortArgInterceptor(); hostAndPortSet.add(new HostAndPort("127.0.0.1", 6379)); hostAndPortSet.add(new HostAndPort("127.0.0.1", 16379)); From 60eb0d58145f209d6984cb2fe00ad68a16607740 Mon Sep 17 00:00:00 2001 From: ascrutae Date: Thu, 14 Dec 2017 21:45:06 +0800 Subject: [PATCH 6/7] [Agent] Fix issue that OkHttpClient plugin doesn't work --- .../okhttp/v3/define/RealCallInstrumentation.java | 11 ++++------- 1 file changed, 4 insertions(+), 7 deletions(-) diff --git a/apm-sniffer/apm-sdk-plugin/okhttp-3.x-plugin/src/main/java/org/apache/skywalking/apm/plugin/okhttp/v3/define/RealCallInstrumentation.java b/apm-sniffer/apm-sdk-plugin/okhttp-3.x-plugin/src/main/java/org/apache/skywalking/apm/plugin/okhttp/v3/define/RealCallInstrumentation.java index b08997217..8d0bbd6c3 100644 --- a/apm-sniffer/apm-sdk-plugin/okhttp-3.x-plugin/src/main/java/org/apache/skywalking/apm/plugin/okhttp/v3/define/RealCallInstrumentation.java +++ b/apm-sniffer/apm-sdk-plugin/okhttp-3.x-plugin/src/main/java/org/apache/skywalking/apm/plugin/okhttp/v3/define/RealCallInstrumentation.java @@ -16,22 +16,19 @@ * */ - package org.apache.skywalking.apm.plugin.okhttp.v3.define; import net.bytebuddy.description.method.MethodDescription; import net.bytebuddy.matcher.ElementMatcher; -import okhttp3.OkHttpClient; -import okhttp3.Request; +import org.apache.skywalking.apm.agent.core.plugin.interceptor.ConstructorInterceptPoint; import org.apache.skywalking.apm.agent.core.plugin.interceptor.InstanceMethodsInterceptPoint; import org.apache.skywalking.apm.agent.core.plugin.interceptor.enhance.ClassInstanceMethodsEnhancePluginDefine; +import org.apache.skywalking.apm.agent.core.plugin.match.ClassMatch; import org.apache.skywalking.apm.agent.core.plugin.match.NameMatch; import org.apache.skywalking.apm.plugin.okhttp.v3.RealCallInterceptor; -import org.apache.skywalking.apm.agent.core.plugin.interceptor.ConstructorInterceptPoint; -import org.apache.skywalking.apm.agent.core.plugin.match.ClassMatch; +import static net.bytebuddy.matcher.ElementMatchers.any; import static net.bytebuddy.matcher.ElementMatchers.named; -import static net.bytebuddy.matcher.ElementMatchers.takesArguments; /** * {@link RealCallInstrumentation} presents that skywalking intercepts {@link okhttp3.RealCall#RealCall(OkHttpClient, @@ -59,7 +56,7 @@ public class RealCallInstrumentation extends ClassInstanceMethodsEnhancePluginDe return new ConstructorInterceptPoint[] { new ConstructorInterceptPoint() { @Override public ElementMatcher getConstructorMatcher() { - return takesArguments(OkHttpClient.class, Request.class, boolean.class); + return any(); } @Override public String getConstructorInterceptor() { From db75a4a6c03ae191ee17c472836c58bddbecf731 Mon Sep 17 00:00:00 2001 From: ascrutae Date: Fri, 15 Dec 2017 06:46:58 +0800 Subject: [PATCH 7/7] [Collector] Fix issue that collector start failed in the Windows environment --- apm-collector/apm-collector-boot/bin/collectorService.bat | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apm-collector/apm-collector-boot/bin/collectorService.bat b/apm-collector/apm-collector-boot/bin/collectorService.bat index d651d965b..f9d2826d0 100644 --- a/apm-collector/apm-collector-boot/bin/collectorService.bat +++ b/apm-collector/apm-collector-boot/bin/collectorService.bat @@ -17,5 +17,5 @@ if not defined JAVA_HOME ( set _EXECJAVA=java ) -start "%COLLECTOR_PROCESS_TITLE%" %_EXECJAVA% "%COLLECTOR_OPTS%" -cp "%CLASSPATH%" CollectorBootStartUp +start "%COLLECTOR_PROCESS_TITLE%" %_EXECJAVA% "%COLLECTOR_OPTS%" -cp "%CLASSPATH%" org.apache.skywalking.apm.collector.boot.CollectorBootStartUp endlocal