Add entryApplicationInstanceID field for service topological
This commit is contained in:
parent
42e53aad88
commit
81f73fb5e8
|
|
@ -37,8 +37,9 @@ message TraceSegmentReference {
|
|||
int32 networkAddressId = 6;
|
||||
string entryServiceName = 7;
|
||||
int32 entryServiceId = 8;
|
||||
string parentServiceName = 9;
|
||||
int32 parentServiceId = 10;
|
||||
int32 entryServiceApplicationInstanceId = 9;
|
||||
string parentServiceName = 10;
|
||||
int32 parentServiceId = 11;
|
||||
}
|
||||
|
||||
message SpanObject {
|
||||
|
|
|
|||
|
|
@ -10,10 +10,8 @@ import org.skywalking.apm.agent.core.dictionary.DictionaryUtil;
|
|||
import org.skywalking.apm.util.StringUtil;
|
||||
|
||||
/**
|
||||
* {@link ContextCarrier} is a data carrier of {@link TracingContext}.
|
||||
* It holds the snapshot (current state) of {@link TracingContext}.
|
||||
* <p>
|
||||
* Created by wusheng on 2017/2/17.
|
||||
* {@link ContextCarrier} is a data carrier of {@link TracingContext}. It holds the snapshot (current state) of {@link
|
||||
* TracingContext}. <p> Created by wusheng on 2017/2/17.
|
||||
*/
|
||||
public class ContextCarrier implements Serializable {
|
||||
/**
|
||||
|
|
@ -36,9 +34,10 @@ public class ContextCarrier implements Serializable {
|
|||
*/
|
||||
private DistributedTraceId primaryDistributedTraceId;
|
||||
|
||||
private int entryApplicationInstanceId = DictionaryUtil.nullValue();
|
||||
|
||||
/**
|
||||
* Serialize this {@link ContextCarrier} to a {@link String},
|
||||
* with '|' split.
|
||||
* Serialize this {@link ContextCarrier} to a {@link String}, with '|' split.
|
||||
*
|
||||
* @return the serialization string.
|
||||
*/
|
||||
|
|
@ -51,7 +50,8 @@ public class ContextCarrier implements Serializable {
|
|||
this.getPeerHost(),
|
||||
this.getEntryOperationName(),
|
||||
this.getParentOperationName(),
|
||||
this.getPrimaryDistributedTraceId());
|
||||
this.getPrimaryDistributedTraceId(),
|
||||
this.getEntryApplicationInstanceId() + "");
|
||||
} else {
|
||||
return "";
|
||||
}
|
||||
|
|
@ -64,8 +64,8 @@ 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]);
|
||||
|
|
@ -74,6 +74,7 @@ public class ContextCarrier implements Serializable {
|
|||
this.entryOperationName = parts[4];
|
||||
this.parentOperationName = parts[5];
|
||||
this.primaryDistributedTraceId = new PropagatedTraceId(parts[6]);
|
||||
this.entryApplicationInstanceId = Integer.parseInt(parts[7]);
|
||||
} catch (NumberFormatException e) {
|
||||
|
||||
}
|
||||
|
|
@ -94,7 +95,8 @@ public class ContextCarrier implements Serializable {
|
|||
&& !StringUtil.isEmpty(peerHost)
|
||||
&& !StringUtil.isEmpty(entryOperationName)
|
||||
&& !StringUtil.isEmpty(parentOperationName)
|
||||
&& primaryDistributedTraceId != null;
|
||||
&& primaryDistributedTraceId != null
|
||||
&& entryApplicationInstanceId != DictionaryUtil.nullValue();
|
||||
}
|
||||
|
||||
public String getEntryOperationName() {
|
||||
|
|
@ -168,4 +170,12 @@ public class ContextCarrier implements Serializable {
|
|||
public String getParentOperationName() {
|
||||
return parentOperationName;
|
||||
}
|
||||
|
||||
public void setEntryApplicationInstanceId(int entryApplicationInstanceId) {
|
||||
this.entryApplicationInstanceId = entryApplicationInstanceId;
|
||||
}
|
||||
|
||||
public int getEntryApplicationInstanceId() {
|
||||
return entryApplicationInstanceId;
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -84,7 +84,7 @@ public class TracingContext implements AbstractTracerContext {
|
|||
carrier.setTraceSegmentId(this.segment.getTraceSegmentId());
|
||||
carrier.setSpanId(span.getSpanId());
|
||||
|
||||
carrier.setApplicationInstanceId(segment.getApplicationId());
|
||||
carrier.setApplicationInstanceId(segment.getApplicationInstanceId());
|
||||
|
||||
if (DictionaryUtil.isNull(exitSpan.getPeerId())) {
|
||||
carrier.setPeerHost(exitSpan.getPeer());
|
||||
|
|
@ -102,6 +102,7 @@ public class TracingContext implements AbstractTracerContext {
|
|||
AbstractTracingSpan firstSpan = first();
|
||||
operationId = firstSpan.getOperationId();
|
||||
operationName = firstSpan.getOperationName();
|
||||
carrier.setEntryApplicationInstanceId(this.segment.getApplicationInstanceId());
|
||||
}
|
||||
if (operationId == DictionaryUtil.nullValue()) {
|
||||
carrier.setEntryOperationName(operationName);
|
||||
|
|
|
|||
|
|
@ -191,4 +191,8 @@ public class TraceSegment {
|
|||
", relatedGlobalTraces=" + relatedGlobalTraces +
|
||||
'}';
|
||||
}
|
||||
|
||||
public int getApplicationInstanceId() {
|
||||
return RemoteDownstreamConfig.Agent.APPLICATION_INSTANCE_ID;
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -30,6 +30,8 @@ public class TraceSegmentRef {
|
|||
|
||||
private int entryOperationId = DictionaryUtil.nullValue();
|
||||
|
||||
private int entryApplicationInstanceId = DictionaryUtil.nullValue();
|
||||
|
||||
private String parentOperationName;
|
||||
|
||||
private int parentOperationId = DictionaryUtil.nullValue();
|
||||
|
|
@ -44,6 +46,7 @@ public class TraceSegmentRef {
|
|||
this.traceSegmentId = carrier.getTraceSegmentId();
|
||||
this.spanId = carrier.getSpanId();
|
||||
this.applicationInstanceId = carrier.getApplicationInstanceId();
|
||||
this.entryApplicationInstanceId = carrier.getEntryApplicationInstanceId();
|
||||
String host = carrier.getPeerHost();
|
||||
if (host.charAt(0) == '#') {
|
||||
this.peerHost = host.substring(1);
|
||||
|
|
@ -95,6 +98,7 @@ public class TraceSegmentRef {
|
|||
if (SegmentRefType.CROSS_PROCESS.equals(type)) {
|
||||
refBuilder.setRefType(RefType.CrossProcess);
|
||||
refBuilder.setParentApplicationInstanceId(applicationInstanceId);
|
||||
refBuilder.setEntryServiceApplicationInstanceId(entryApplicationInstanceId);
|
||||
if (peerId == DictionaryUtil.nullValue()) {
|
||||
refBuilder.setNetworkAddress(peerHost);
|
||||
} else {
|
||||
|
|
|
|||
|
|
@ -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|#127.0.0.1:8080|#/portal/|#/testEntrySpan|#AQA*#AQA*Et0We0tQNQA*|1");
|
||||
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|#127.0.0.1:8080|#/portal/|#/testEntrySpan|#AQA*#AQA*Et0We0tQNQA*|1");
|
||||
assertTrue(contextCarrier.isValid());
|
||||
|
||||
AbstractSpan firstEntrySpan = ContextManager.createEntrySpan("/testFirstEntry", contextCarrier);
|
||||
|
|
|
|||
|
|
@ -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|#192.168.1.8 :18002|#/portal/|#/testEntrySpan|#AQA*#AQA*Et0We0tQNQA*|1");
|
||||
|
||||
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|#192.168.1.8 :18002|#/portal/|#/testEntrySpan|#AQA*#AQA*Et0We0tQNQA*|1");
|
||||
|
||||
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"));
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -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|#192.168.1.8:18002|#/portal/|#/testEntrySpan|#AQA*#AQA*Et0We0tQNQA*|1");
|
||||
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"));
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -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|#192.168.1.8:18002|#/portal/|#/testEntrySpan|#AQA*#AQA*Et0We0tQNQA*|1");
|
||||
|
||||
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"));
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -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|#192.168.1.8:18002|#/portal/|#/testEntrySpan|#AQA*#AQA*Et0We0tQNQA*|1");
|
||||
|
||||
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"));
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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|#192.168.1.8:18002|#/portal/|#/testEntrySpan|#AQA*#AQA*Et0We0tQNQA*|1");
|
||||
|
||||
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"));
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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));
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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|#127.0.0.1:8080|#/portal/|#/testEntrySpan|#AQA*#AQA*Et0We0tQNQA*|1"}, 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)
|
||||
|
|
|
|||
Loading…
Reference in New Issue