diff --git a/apm-sniffer/apm-agent-core/src/main/java/org/skywalking/apm/agent/core/context/ContextCarrier.java b/apm-sniffer/apm-agent-core/src/main/java/org/skywalking/apm/agent/core/context/ContextCarrier.java index 1b94a3e25..7e3a1904a 100644 --- a/apm-sniffer/apm-agent-core/src/main/java/org/skywalking/apm/agent/core/context/ContextCarrier.java +++ b/apm-sniffer/apm-agent-core/src/main/java/org/skywalking/apm/agent/core/context/ContextCarrier.java @@ -23,7 +23,9 @@ public class ContextCarrier implements Serializable { private int spanId = -1; - private int applicationInstanceId = DictionaryUtil.nullValue(); + private int parentApplicationInstanceId = DictionaryUtil.nullValue(); + + private int entryApplicationInstanceId = DictionaryUtil.nullValue(); private String peerHost; @@ -47,11 +49,12 @@ public class ContextCarrier implements Serializable { return StringUtil.join('|', this.getTraceSegmentId().toBase64(), this.getSpanId() + "", - this.getApplicationInstanceId() + "", + this.getParentApplicationInstanceId() + "", + this.getEntryApplicationInstanceId() + "", this.getPeerHost(), this.getEntryOperationName(), this.getParentOperationName(), - this.getPrimaryDistributedTraceId()); + this.getPrimaryDistributedTraceId().toBase64()); } else { return ""; } @@ -64,16 +67,17 @@ public class ContextCarrier implements Serializable { */ public ContextCarrier deserialize(String text) { if (text != null) { - String[] parts = text.split("\\|", 7); - if (parts.length == 7) { + String[] parts = text.split("\\|", 8); + if (parts.length == 8) { try { this.traceSegmentId = new ID(parts[0]); this.spanId = Integer.parseInt(parts[1]); - this.applicationInstanceId = Integer.parseInt(parts[2]); - this.peerHost = parts[3]; - this.entryOperationName = parts[4]; - this.parentOperationName = parts[5]; - this.primaryDistributedTraceId = new PropagatedTraceId(parts[6]); + this.parentApplicationInstanceId = Integer.parseInt(parts[2]); + this.entryApplicationInstanceId = Integer.parseInt(parts[3]); + this.peerHost = parts[4]; + this.entryOperationName = parts[5]; + this.parentOperationName = parts[6]; + this.primaryDistributedTraceId = new PropagatedTraceId(parts[7]); } catch (NumberFormatException e) { } @@ -90,7 +94,8 @@ public class ContextCarrier implements Serializable { public boolean isValid() { return traceSegmentId != null && getSpanId() > -1 - && applicationInstanceId != DictionaryUtil.nullValue() + && parentApplicationInstanceId != DictionaryUtil.nullValue() + && entryApplicationInstanceId != DictionaryUtil.nullValue() && !StringUtil.isEmpty(peerHost) && !StringUtil.isEmpty(entryOperationName) && !StringUtil.isEmpty(parentOperationName) @@ -133,12 +138,12 @@ public class ContextCarrier implements Serializable { this.spanId = spanId; } - public int getApplicationInstanceId() { - return applicationInstanceId; + public int getParentApplicationInstanceId() { + return parentApplicationInstanceId; } - void setApplicationInstanceId(int applicationInstanceId) { - this.applicationInstanceId = applicationInstanceId; + void setParentApplicationInstanceId(int parentApplicationInstanceId) { + this.parentApplicationInstanceId = parentApplicationInstanceId; } public String getPeerHost() { @@ -161,11 +166,20 @@ public class ContextCarrier implements Serializable { this.primaryDistributedTraceId = distributedTraceIds.get(0); } - private String getPrimaryDistributedTraceId() { - return primaryDistributedTraceId.toBase64(); + private DistributedTraceId getPrimaryDistributedTraceId() { + return primaryDistributedTraceId; } public String getParentOperationName() { return parentOperationName; } + + public int getEntryApplicationInstanceId() { + return entryApplicationInstanceId; + } + + public void setEntryApplicationInstanceId(int entryApplicationInstanceId) { + this.entryApplicationInstanceId = entryApplicationInstanceId; + } + } diff --git a/apm-sniffer/apm-agent-core/src/main/java/org/skywalking/apm/agent/core/context/ContextSnapshot.java b/apm-sniffer/apm-agent-core/src/main/java/org/skywalking/apm/agent/core/context/ContextSnapshot.java index 7543fab3a..f5ba93276 100644 --- a/apm-sniffer/apm-agent-core/src/main/java/org/skywalking/apm/agent/core/context/ContextSnapshot.java +++ b/apm-sniffer/apm-agent-core/src/main/java/org/skywalking/apm/agent/core/context/ContextSnapshot.java @@ -3,6 +3,7 @@ package org.skywalking.apm.agent.core.context; import java.util.List; import org.skywalking.apm.agent.core.context.ids.DistributedTraceId; import org.skywalking.apm.agent.core.context.ids.ID; +import org.skywalking.apm.agent.core.dictionary.DictionaryUtil; import org.skywalking.apm.util.StringUtil; /** @@ -31,6 +32,8 @@ public class ContextSnapshot { */ private DistributedTraceId primaryDistributedTraceId; + private int entryApplicationInstanceId = DictionaryUtil.nullValue(); + ContextSnapshot(ID traceSegmentId, int spanId, List distributedTraceIds) { this.traceSegmentId = traceSegmentId; @@ -75,6 +78,7 @@ public class ContextSnapshot { public boolean isValid() { return traceSegmentId != null && spanId > -1 + && entryApplicationInstanceId != DictionaryUtil.nullValue() && primaryDistributedTraceId != null && !StringUtil.isEmpty(entryOperationName) && !StringUtil.isEmpty(parentOperationName); @@ -83,4 +87,12 @@ public class ContextSnapshot { public String getEntryOperationName() { return entryOperationName; } + + public void setEntryApplicationInstanceId(int entryApplicationInstanceId) { + this.entryApplicationInstanceId = entryApplicationInstanceId; + } + + public int getEntryApplicationInstanceId() { + return entryApplicationInstanceId; + } } diff --git a/apm-sniffer/apm-agent-core/src/main/java/org/skywalking/apm/agent/core/context/TracingContext.java b/apm-sniffer/apm-agent-core/src/main/java/org/skywalking/apm/agent/core/context/TracingContext.java index b0fab5fe3..10efeb9b4 100644 --- a/apm-sniffer/apm-agent-core/src/main/java/org/skywalking/apm/agent/core/context/TracingContext.java +++ b/apm-sniffer/apm-agent-core/src/main/java/org/skywalking/apm/agent/core/context/TracingContext.java @@ -84,7 +84,7 @@ public class TracingContext implements AbstractTracerContext { carrier.setTraceSegmentId(this.segment.getTraceSegmentId()); carrier.setSpanId(span.getSpanId()); - carrier.setApplicationInstanceId(segment.getApplicationId()); + carrier.setParentApplicationInstanceId(segment.getApplicationInstanceId()); if (DictionaryUtil.isNull(exitSpan.getPeerId())) { carrier.setPeerHost(exitSpan.getPeer()); @@ -94,15 +94,20 @@ public class TracingContext implements AbstractTracerContext { List refs = this.segment.getRefs(); int operationId; String operationName; + int entryApplicationInstanceId; if (refs != null && refs.size() > 0) { TraceSegmentRef ref = refs.get(0); operationId = ref.getEntryOperationId(); operationName = ref.getEntryOperationName(); + entryApplicationInstanceId = ref.getEntryApplicationInstanceId(); } else { AbstractTracingSpan firstSpan = first(); operationId = firstSpan.getOperationId(); operationName = firstSpan.getOperationName(); + entryApplicationInstanceId = this.segment.getApplicationInstanceId(); } + carrier.setEntryApplicationInstanceId(entryApplicationInstanceId); + if (operationId == DictionaryUtil.nullValue()) { carrier.setEntryOperationName(operationName); } else { @@ -145,15 +150,20 @@ public class TracingContext implements AbstractTracerContext { segment.getRelatedGlobalTraces()); int entryOperationId; String entryOperationName; + int entryApplicationInstanceId; AbstractTracingSpan firstSpan = first(); if (refs != null && refs.size() > 0) { TraceSegmentRef ref = refs.get(0); entryOperationId = ref.getEntryOperationId(); entryOperationName = ref.getEntryOperationName(); + entryApplicationInstanceId = ref.getEntryApplicationInstanceId(); } else { entryOperationId = firstSpan.getOperationId(); entryOperationName = firstSpan.getOperationName(); + entryApplicationInstanceId = this.segment.getApplicationInstanceId(); } + snapshot.setEntryApplicationInstanceId(entryApplicationInstanceId); + if (entryOperationId == DictionaryUtil.nullValue()) { snapshot.setEntryOperationName(entryOperationName); } else { diff --git a/apm-sniffer/apm-agent-core/src/main/java/org/skywalking/apm/agent/core/context/trace/TraceSegment.java b/apm-sniffer/apm-agent-core/src/main/java/org/skywalking/apm/agent/core/context/trace/TraceSegment.java index 6857c8b8f..564c297ba 100644 --- a/apm-sniffer/apm-agent-core/src/main/java/org/skywalking/apm/agent/core/context/trace/TraceSegment.java +++ b/apm-sniffer/apm-agent-core/src/main/java/org/skywalking/apm/agent/core/context/trace/TraceSegment.java @@ -191,4 +191,8 @@ public class TraceSegment { ", relatedGlobalTraces=" + relatedGlobalTraces + '}'; } + + public int getApplicationInstanceId() { + return RemoteDownstreamConfig.Agent.APPLICATION_INSTANCE_ID; + } } diff --git a/apm-sniffer/apm-agent-core/src/main/java/org/skywalking/apm/agent/core/context/trace/TraceSegmentRef.java b/apm-sniffer/apm-agent-core/src/main/java/org/skywalking/apm/agent/core/context/trace/TraceSegmentRef.java index 74dc4bff9..acdab7025 100644 --- a/apm-sniffer/apm-agent-core/src/main/java/org/skywalking/apm/agent/core/context/trace/TraceSegmentRef.java +++ b/apm-sniffer/apm-agent-core/src/main/java/org/skywalking/apm/agent/core/context/trace/TraceSegmentRef.java @@ -1,5 +1,6 @@ package org.skywalking.apm.agent.core.context.trace; +import org.skywalking.apm.agent.core.conf.RemoteDownstreamConfig; import org.skywalking.apm.agent.core.context.ContextCarrier; import org.skywalking.apm.agent.core.context.ContextSnapshot; import org.skywalking.apm.agent.core.context.ids.ID; @@ -20,11 +21,13 @@ public class TraceSegmentRef { private int spanId = -1; - private int applicationInstanceId; + private int peerId = DictionaryUtil.nullValue(); private String peerHost; - private int peerId = DictionaryUtil.nullValue(); + private int entryApplicationInstanceId = DictionaryUtil.nullValue(); + + private int parentApplicationInstanceId = DictionaryUtil.nullValue(); private String entryOperationName; @@ -43,7 +46,8 @@ public class TraceSegmentRef { this.type = SegmentRefType.CROSS_PROCESS; this.traceSegmentId = carrier.getTraceSegmentId(); this.spanId = carrier.getSpanId(); - this.applicationInstanceId = carrier.getApplicationInstanceId(); + this.parentApplicationInstanceId = carrier.getParentApplicationInstanceId(); + this.entryApplicationInstanceId = carrier.getEntryApplicationInstanceId(); String host = carrier.getPeerHost(); if (host.charAt(0) == '#') { this.peerHost = host.substring(1); @@ -68,6 +72,8 @@ public class TraceSegmentRef { this.type = SegmentRefType.CROSS_THREAD; this.traceSegmentId = snapshot.getTraceSegmentId(); this.spanId = snapshot.getSpanId(); + this.parentApplicationInstanceId = RemoteDownstreamConfig.Agent.APPLICATION_INSTANCE_ID; + this.entryApplicationInstanceId = snapshot.getEntryApplicationInstanceId(); String entryOperationName = snapshot.getEntryOperationName(); if (entryOperationName.charAt(0) == '#') { this.entryOperationName = entryOperationName.substring(1); @@ -90,11 +96,15 @@ public class TraceSegmentRef { return entryOperationId; } + public int getEntryApplicationInstanceId() { + return entryApplicationInstanceId; + } + public TraceSegmentReference transform() { TraceSegmentReference.Builder refBuilder = TraceSegmentReference.newBuilder(); if (SegmentRefType.CROSS_PROCESS.equals(type)) { refBuilder.setRefType(RefType.CrossProcess); - refBuilder.setParentApplicationInstanceId(applicationInstanceId); + refBuilder.setParentApplicationInstanceId(parentApplicationInstanceId); if (peerId == DictionaryUtil.nullValue()) { refBuilder.setNetworkAddress(peerHost); } else { @@ -104,6 +114,7 @@ public class TraceSegmentRef { refBuilder.setRefType(RefType.CrossThread); } + refBuilder.setEntryApplicationInstanceId(entryApplicationInstanceId); refBuilder.setParentTraceSegmentId(traceSegmentId.transform()); refBuilder.setParentSpanId(spanId); if (entryOperationId == DictionaryUtil.nullValue()) { @@ -139,7 +150,6 @@ public class TraceSegmentRef { result = 31 * result + spanId; return result; } - public enum SegmentRefType { CROSS_PROCESS, CROSS_THREAD diff --git a/apm-sniffer/apm-agent-core/src/test/java/org/skywalking/apm/agent/core/context/ContextManagerTest.java b/apm-sniffer/apm-agent-core/src/test/java/org/skywalking/apm/agent/core/context/ContextManagerTest.java index e0b6af691..d8f8cb4cb 100644 --- a/apm-sniffer/apm-agent-core/src/test/java/org/skywalking/apm/agent/core/context/ContextManagerTest.java +++ b/apm-sniffer/apm-agent-core/src/test/java/org/skywalking/apm/agent/core/context/ContextManagerTest.java @@ -79,7 +79,7 @@ public class ContextManagerTest { @Test public void createMultipleEntrySpan() { - ContextCarrier contextCarrier = new ContextCarrier().deserialize("#AQA*#AQA*4WcWe0tQNQA*|1|1|#127.0.0.1:8080|#/portal/|#/testEntrySpan|#AQA*#AQA*Et0We0tQNQA*"); + ContextCarrier contextCarrier = new ContextCarrier().deserialize("#AQA*#AQA*4WcWe0tQNQA*|1|1|1|#127.0.0.1:8080|#/portal/|#/testEntrySpan|#AQA*#AQA*Et0We0tQNQA*"); assertTrue(contextCarrier.isValid()); AbstractSpan firstEntrySpan = ContextManager.createEntrySpan("/testFirstEntry", contextCarrier); @@ -202,7 +202,7 @@ public class ContextManagerTest { @Test public void testTransform() throws InvalidProtocolBufferException { - ContextCarrier contextCarrier = new ContextCarrier().deserialize("#AQA*#AQA*4WcWe0tQNQA*|3|1|#127.0.0.1:8080|#/portal/|#/testEntrySpan|#AQA*#AQA*Et0We0tQNQA*"); + ContextCarrier contextCarrier = new ContextCarrier().deserialize("#AQA*#AQA*4WcWe0tQNQA*|3|1|1|#127.0.0.1:8080|#/portal/|#/testEntrySpan|#AQA*#AQA*Et0We0tQNQA*"); assertTrue(contextCarrier.isValid()); AbstractSpan firstEntrySpan = ContextManager.createEntrySpan("/testFirstEntry", contextCarrier); diff --git a/apm-sniffer/apm-sdk-plugin/dubbo-plugin/src/test/java/org/skywalking/apm/plugin/dubbo/DubboInterceptorTest.java b/apm-sniffer/apm-sdk-plugin/dubbo-plugin/src/test/java/org/skywalking/apm/plugin/dubbo/DubboInterceptorTest.java index 380cc56f2..3db3f120e 100644 --- a/apm-sniffer/apm-sdk-plugin/dubbo-plugin/src/test/java/org/skywalking/apm/plugin/dubbo/DubboInterceptorTest.java +++ b/apm-sniffer/apm-sdk-plugin/dubbo-plugin/src/test/java/org/skywalking/apm/plugin/dubbo/DubboInterceptorTest.java @@ -148,7 +148,7 @@ public class DubboInterceptorTest { @Test public void testProviderWithAttachment() throws Throwable { when(rpcContext.isConsumerSide()).thenReturn(false); - when(rpcContext.getAttachment(Config.Plugin.Propagation.HEADER_NAME)).thenReturn("#AQA*#AQA*4WcWe0tQNQA*|3|1|#192.168.1.8 :18002|#/portal/|#/testEntrySpan|#AQA*#AQA*Et0We0tQNQA*"); + when(rpcContext.getAttachment(Config.Plugin.Propagation.HEADER_NAME)).thenReturn("#AQA*#AQA*4WcWe0tQNQA*|3|1|1|#192.168.1.8 :18002|#/portal/|#/testEntrySpan|#AQA*#AQA*Et0We0tQNQA*"); dubboInterceptor.beforeMethod(enhancedInstance, "invoke", allArguments, argumentTypes, methodInterceptResult); dubboInterceptor.afterMethod(enhancedInstance, "invoke", allArguments, argumentTypes, result); @@ -160,7 +160,7 @@ public class DubboInterceptorTest { when(rpcContext.isConsumerSide()).thenReturn(false); FieldSetter.setStaticValue(BugFixActive.class, "ACTIVE", true); - testParam.setTraceContext("#AQA*#AQA*4WcWe0tQNQA*|3|1|#192.168.1.8 :18002|#/portal/|#/testEntrySpan|#AQA*#AQA*Et0We0tQNQA*"); + testParam.setTraceContext("#AQA*#AQA*4WcWe0tQNQA*|3|1|1|#192.168.1.8 :18002|#/portal/|#/testEntrySpan|#AQA*#AQA*Et0We0tQNQA*"); dubboInterceptor.beforeMethod(enhancedInstance, "invoke", allArguments, argumentTypes, methodInterceptResult); dubboInterceptor.afterMethod(enhancedInstance, "invoke", allArguments, argumentTypes, result); @@ -194,6 +194,7 @@ public class DubboInterceptorTest { private void assertTraceSegmentRef(TraceSegmentRef actual) { assertThat(SegmentRefHelper.getSpanId(actual), is(3)); + assertThat(SegmentRefHelper.getEntryApplicationInstanceId(actual), is(1)); assertThat(SegmentRefHelper.getTraceSegmentId(actual).toString(), is("1.1.15006458883500001")); } diff --git a/apm-sniffer/apm-sdk-plugin/motan-plugin/src/test/java/org/skywalking/apm/plugin/motan/MotanProviderInterceptorTest.java b/apm-sniffer/apm-sdk-plugin/motan-plugin/src/test/java/org/skywalking/apm/plugin/motan/MotanProviderInterceptorTest.java index fe7541112..e90f0b65f 100644 --- a/apm-sniffer/apm-sdk-plugin/motan-plugin/src/test/java/org/skywalking/apm/plugin/motan/MotanProviderInterceptorTest.java +++ b/apm-sniffer/apm-sdk-plugin/motan-plugin/src/test/java/org/skywalking/apm/plugin/motan/MotanProviderInterceptorTest.java @@ -91,7 +91,7 @@ public class MotanProviderInterceptorTest { @Test public void testInvokerWithRefSegment() throws Throwable { HashMap attachments = new HashMap(); - attachments.put(Config.Plugin.Propagation.HEADER_NAME, "#AQA*#AQA*4WcWe0tQNQA*|3|1|#192.168.1.8:18002|#/portal/|#/testEntrySpan|#AQA*#AQA*Et0We0tQNQA*"); + attachments.put(Config.Plugin.Propagation.HEADER_NAME, "#AQA*#AQA*4WcWe0tQNQA*|3|1|1|#192.168.1.8:18002|#/portal/|#/testEntrySpan|#AQA*#AQA*Et0We0tQNQA*"); when(request.getAttachments()).thenReturn(attachments); invokeInterceptor.beforeMethod(enhancedInstance, "execute", arguments, argumentType, null); @@ -137,6 +137,7 @@ public class MotanProviderInterceptorTest { private void assertRefSegment(TraceSegmentRef primaryRef) { assertThat(SegmentRefHelper.getTraceSegmentId(primaryRef).toString(), is("1.1.15006458883500001")); assertThat(SegmentRefHelper.getSpanId(primaryRef), is(3)); + assertThat(SegmentRefHelper.getEntryApplicationInstanceId(primaryRef), is(1)); assertThat(SegmentRefHelper.getPeerHost(primaryRef), is("192.168.1.8:18002")); } diff --git a/apm-sniffer/apm-sdk-plugin/resin-3.x-plugin/src/test/java/org/skywalking/apm/plugin/resin/v3/ResinV3InterceptorTest.java b/apm-sniffer/apm-sdk-plugin/resin-3.x-plugin/src/test/java/org/skywalking/apm/plugin/resin/v3/ResinV3InterceptorTest.java index 71b3e35d6..f36301c83 100644 --- a/apm-sniffer/apm-sdk-plugin/resin-3.x-plugin/src/test/java/org/skywalking/apm/plugin/resin/v3/ResinV3InterceptorTest.java +++ b/apm-sniffer/apm-sdk-plugin/resin-3.x-plugin/src/test/java/org/skywalking/apm/plugin/resin/v3/ResinV3InterceptorTest.java @@ -90,7 +90,7 @@ public class ResinV3InterceptorTest { @Test public void testWithSerializedContextData() throws Throwable { - when(request.getHeader(Config.Plugin.Propagation.HEADER_NAME)).thenReturn("#AQA*#AQA*4WcWe0tQNQA*|3|1|#192.168.1.8:18002|#/portal/|#/testEntrySpan|#AQA*#AQA*Et0We0tQNQA*"); + when(request.getHeader(Config.Plugin.Propagation.HEADER_NAME)).thenReturn("#AQA*#AQA*4WcWe0tQNQA*|3|1|1|#192.168.1.8:18002|#/portal/|#/testEntrySpan|#AQA*#AQA*Et0We0tQNQA*"); interceptor.beforeMethod(enhancedInstance, "service", arguments, argumentType, methodInterceptResult); interceptor.afterMethod(enhancedInstance, "service", arguments, argumentType, null); @@ -121,6 +121,7 @@ public class ResinV3InterceptorTest { private void assertTraceSegmentRef(TraceSegmentRef ref) { assertThat(SegmentRefHelper.getSpanId(ref), is(3)); + assertThat(SegmentRefHelper.getEntryApplicationInstanceId(ref), is(1)); assertThat(SegmentRefHelper.getTraceSegmentId(ref).toString(), is("1.1.15006458883500001")); } diff --git a/apm-sniffer/apm-sdk-plugin/resin-4.x-plugin/src/test/java/org/skywalking/apm/plugin/resin/v4/ResinV4InterceptorTest.java b/apm-sniffer/apm-sdk-plugin/resin-4.x-plugin/src/test/java/org/skywalking/apm/plugin/resin/v4/ResinV4InterceptorTest.java index 280211f6f..aeed0ffa3 100644 --- a/apm-sniffer/apm-sdk-plugin/resin-4.x-plugin/src/test/java/org/skywalking/apm/plugin/resin/v4/ResinV4InterceptorTest.java +++ b/apm-sniffer/apm-sdk-plugin/resin-4.x-plugin/src/test/java/org/skywalking/apm/plugin/resin/v4/ResinV4InterceptorTest.java @@ -92,7 +92,7 @@ public class ResinV4InterceptorTest { @Test public void testWithSerializedContextData() throws Throwable { - when(request.getHeader(Config.Plugin.Propagation.HEADER_NAME)).thenReturn("#AQA*#AQA*4WcWe0tQNQA*|3|1|#192.168.1.8:18002|#/portal/|#/testEntrySpan|#AQA*#AQA*Et0We0tQNQA*"); + when(request.getHeader(Config.Plugin.Propagation.HEADER_NAME)).thenReturn("#AQA*#AQA*4WcWe0tQNQA*|3|1|1|#192.168.1.8:18002|#/portal/|#/testEntrySpan|#AQA*#AQA*Et0We0tQNQA*"); interceptor.beforeMethod(enhancedInstance, "service", arguments, argumentType, methodInterceptResult); interceptor.afterMethod(enhancedInstance, "service", arguments, argumentType, null); @@ -122,6 +122,7 @@ public class ResinV4InterceptorTest { } private void assertTraceSegmentRef(TraceSegmentRef ref) { + assertThat(SegmentRefHelper.getEntryApplicationInstanceId(ref), is(1)); assertThat(SegmentRefHelper.getSpanId(ref), is(3)); assertThat(SegmentRefHelper.getTraceSegmentId(ref).toString(), is("1.1.15006458883500001")); } diff --git a/apm-sniffer/apm-sdk-plugin/tomcat-7.x-8.x-plugin/src/test/java/org/skywalking/apm/plugin/tomcat78x/TomcatInterceptorTest.java b/apm-sniffer/apm-sdk-plugin/tomcat-7.x-8.x-plugin/src/test/java/org/skywalking/apm/plugin/tomcat78x/TomcatInterceptorTest.java index 19b94a5b2..3bd02a897 100644 --- a/apm-sniffer/apm-sdk-plugin/tomcat-7.x-8.x-plugin/src/test/java/org/skywalking/apm/plugin/tomcat78x/TomcatInterceptorTest.java +++ b/apm-sniffer/apm-sdk-plugin/tomcat-7.x-8.x-plugin/src/test/java/org/skywalking/apm/plugin/tomcat78x/TomcatInterceptorTest.java @@ -82,7 +82,7 @@ public class TomcatInterceptorTest { @Test public void testWithSerializedContextData() throws Throwable { - when(request.getHeader(Config.Plugin.Propagation.HEADER_NAME)).thenReturn("#AQA*#AQA*4WcWe0tQNQA*|3|1|#192.168.1.8:18002|#/portal/|#/testEntrySpan|#AQA*#AQA*Et0We0tQNQA*"); + when(request.getHeader(Config.Plugin.Propagation.HEADER_NAME)).thenReturn("#AQA*#AQA*4WcWe0tQNQA*|3|1|1|#192.168.1.8:18002|#/portal/|#/testEntrySpan|#AQA*#AQA*Et0We0tQNQA*"); tomcatInterceptor.beforeMethod(enhancedInstance, "invoke", arguments, argumentType, methodInterceptResult); tomcatInterceptor.afterMethod(enhancedInstance, "invoke", arguments, argumentType, null); @@ -112,6 +112,7 @@ public class TomcatInterceptorTest { } private void assertTraceSegmentRef(TraceSegmentRef ref) { + assertThat(SegmentRefHelper.getEntryApplicationInstanceId(ref), is(1)); assertThat(SegmentRefHelper.getSpanId(ref), is(3)); assertThat(SegmentRefHelper.getTraceSegmentId(ref).toString(), is("1.1.15006458883500001")); } diff --git a/apm-sniffer/apm-test-tools/src/main/java/org/skywalking/apm/agent/test/helper/SegmentRefHelper.java b/apm-sniffer/apm-test-tools/src/main/java/org/skywalking/apm/agent/test/helper/SegmentRefHelper.java index f0ce52860..38fb32a20 100644 --- a/apm-sniffer/apm-test-tools/src/main/java/org/skywalking/apm/agent/test/helper/SegmentRefHelper.java +++ b/apm-sniffer/apm-test-tools/src/main/java/org/skywalking/apm/agent/test/helper/SegmentRefHelper.java @@ -30,4 +30,13 @@ public class SegmentRefHelper { return -1; } + + public static int getEntryApplicationInstanceId(TraceSegmentRef ref) { + try { + return FieldGetter.getValue(ref, "entryApplicationInstanceId"); + } catch (Exception e) { + } + + return -1; + } } diff --git a/apm-sniffer/apm-test-tools/src/main/java/org/skywalking/apm/agent/test/tools/SegmentRefAssert.java b/apm-sniffer/apm-test-tools/src/main/java/org/skywalking/apm/agent/test/tools/SegmentRefAssert.java index c5d88304a..f61751d6d 100644 --- a/apm-sniffer/apm-test-tools/src/main/java/org/skywalking/apm/agent/test/tools/SegmentRefAssert.java +++ b/apm-sniffer/apm-test-tools/src/main/java/org/skywalking/apm/agent/test/tools/SegmentRefAssert.java @@ -18,4 +18,9 @@ public class SegmentRefAssert { public static void assertPeerHost(TraceSegmentRef ref, String peerHost) { assertThat(SegmentRefHelper.getPeerHost(ref), is(peerHost)); } + + public static void assertEntryApplicationInstanceId(TraceSegmentRef ref, int entryApplicationInstanceID) { + assertThat(SegmentRefHelper.getEntryApplicationInstanceId(ref), is(entryApplicationInstanceID)); + } + } diff --git a/apm-sniffer/apm-toolkit-activation/apm-toolkit-opentracing-activation/src/test/java/org/skywalking/apm/toolkit/activation/opentracing/SkywalkingSpanActivationTest.java b/apm-sniffer/apm-toolkit-activation/apm-toolkit-opentracing-activation/src/test/java/org/skywalking/apm/toolkit/activation/opentracing/SkywalkingSpanActivationTest.java index 474ce1777..b09e5c1e1 100644 --- a/apm-sniffer/apm-toolkit-activation/apm-toolkit-opentracing-activation/src/test/java/org/skywalking/apm/toolkit/activation/opentracing/SkywalkingSpanActivationTest.java +++ b/apm-sniffer/apm-toolkit-activation/apm-toolkit-opentracing-activation/src/test/java/org/skywalking/apm/toolkit/activation/opentracing/SkywalkingSpanActivationTest.java @@ -17,6 +17,7 @@ import org.skywalking.apm.agent.core.context.trace.TraceSegment; import org.skywalking.apm.agent.core.context.trace.TraceSegmentRef; import org.skywalking.apm.agent.core.plugin.interceptor.enhance.EnhancedInstance; import org.skywalking.apm.agent.test.helper.SegmentHelper; +import org.skywalking.apm.agent.test.helper.SegmentRefHelper; import org.skywalking.apm.agent.test.tools.AgentServiceRule; import org.skywalking.apm.agent.test.tools.SegmentStorage; import org.skywalking.apm.agent.test.tools.SegmentStoragePoint; @@ -37,6 +38,7 @@ import static org.junit.Assert.assertNull; import static org.junit.Assert.assertTrue; import static org.skywalking.apm.agent.test.tools.SegmentRefAssert.assertPeerHost; import static org.skywalking.apm.agent.test.tools.SegmentRefAssert.assertSegmentId; +import static org.skywalking.apm.agent.test.tools.SegmentRefAssert.assertEntryApplicationInstanceId; import static org.skywalking.apm.agent.test.tools.SegmentRefAssert.assertSpanId; import static org.skywalking.apm.agent.test.tools.SpanAssert.assertComponent; import static org.skywalking.apm.agent.test.tools.SpanAssert.assertLogSize; @@ -181,7 +183,7 @@ public class SkywalkingSpanActivationTest { .withTag(Tags.PEER_HOST_IPV4.getKey(), "127.0.0.1").withTag(Tags.PEER_PORT.getKey(), 8080); startSpan(); extractInterceptor.afterMethod(enhancedInstance, "extract", - new Object[] {"#AQA*#AQA*4WcWe0tQNQA*|3|1|#127.0.0.1:8080|#/portal/|#/testEntrySpan|#AQA*#AQA*Et0We0tQNQA*"}, new Class[] {String.class}, null); + new Object[] {"#AQA*#AQA*4WcWe0tQNQA*|3|1|1|#127.0.0.1:8080|#/portal/|#/testEntrySpan|#AQA*#AQA*Et0We0tQNQA*"}, new Class[] {String.class}, null); stopSpan(); TraceSegment tracingSegment = assertTraceSemgnets(); @@ -190,11 +192,11 @@ public class SkywalkingSpanActivationTest { TraceSegmentRef ref = tracingSegment.getRefs().get(0); assertSegmentId(ref, "1.1.15006458883500001"); assertSpanId(ref, 3); + assertEntryApplicationInstanceId(ref, 1); assertPeerHost(ref, "127.0.0.1:8080"); assertThat(spans.size(), is(1)); assertSpanCommonsAttribute(spans.get(0)); } - @Test public void testExtractWithInValidateContext() throws Throwable { spanBuilder.withTag(Tags.SPAN_KIND.getKey(), Tags.SPAN_KIND_CLIENT)