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 ec216c2e1..1afab9a0c 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 @@ -6,6 +6,7 @@ import java.util.List; import org.skywalking.apm.agent.core.context.ids.DistributedTraceId; import org.skywalking.apm.agent.core.context.ids.PropagatedTraceId; import org.skywalking.apm.agent.core.context.trace.TraceSegment; +import org.skywalking.apm.agent.core.dictionary.DictionaryUtil; import org.skywalking.apm.util.StringUtil; /** @@ -22,10 +23,12 @@ public class ContextCarrier implements Serializable { private int spanId = -1; - private String applicationCode; + private int applicationId = DictionaryUtil.nullValue(); private String peerHost; + private String entryOperationName; + /** * {@link DistributedTraceId} */ @@ -42,8 +45,9 @@ public class ContextCarrier implements Serializable { return StringUtil.join('|', this.getTraceSegmentId(), this.getSpanId() + "", - this.getApplicationCode(), + this.getApplicationId() + "", this.getPeerHost(), + this.getEntryOperationName(), this.serializeDistributedTraceIds()); } else { return ""; @@ -58,13 +62,14 @@ public class ContextCarrier implements Serializable { public ContextCarrier deserialize(String text) { if (text != null) { String[] parts = text.split("\\|", 6); - if (parts.length == 5) { + if (parts.length == 6) { try { - setSpanId(Integer.parseInt(parts[1])); - setTraceSegmentId(parts[0]); - setApplicationCode(parts[2]); - setPeerHost(parts[3]); - setDistributedTraceIds(deserializeDistributedTraceIds(parts[4])); + this.traceSegmentId = parts[0]; + this.spanId = Integer.parseInt(parts[1]); + this.applicationId = Integer.parseInt(parts[2]); + this.peerHost = parts[3]; + this.entryOperationName = parts[4]; + this.distributedTraceIds = deserializeDistributedTraceIds(parts[5]); } catch (NumberFormatException e) { } @@ -81,11 +86,24 @@ public class ContextCarrier implements Serializable { public boolean isValid() { return !StringUtil.isEmpty(traceSegmentId) && getSpanId() > -1 - && !StringUtil.isEmpty(applicationCode) + && applicationId != DictionaryUtil.nullValue() && !StringUtil.isEmpty(peerHost) + && !StringUtil.isEmpty(entryOperationName) && distributedTraceIds != null; } + public String getEntryOperationName() { + return entryOperationName; + } + + public void setEntryOperationName(String entryOperationName) { + this.entryOperationName = '#' + entryOperationName; + } + + public void setEntryOperationId(int entryOperationId) { + this.entryOperationName = entryOperationId + ""; + } + public String getTraceSegmentId() { return traceSegmentId; } @@ -102,16 +120,12 @@ public class ContextCarrier implements Serializable { this.spanId = spanId; } - public String getApplicationCode() { - return applicationCode; - } - - public void setApplicationCode(String applicationCode) { - this.applicationCode = applicationCode; + public int getApplicationId() { + return applicationId; } public void setApplicationId(int applicationId) { - this.applicationCode = applicationId + ""; + this.applicationId = applicationId; } public String getPeerHost() { @@ -119,7 +133,7 @@ public class ContextCarrier implements Serializable { } public void setPeerHost(String peerHost) { - this.peerHost = peerHost; + this.peerHost = '#' + peerHost; } public void setPeerId(int peerId) { 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 69439ae9b..5da2aebcb 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 @@ -3,6 +3,7 @@ package org.skywalking.apm.agent.core.context.trace; import java.util.List; import org.skywalking.apm.agent.core.context.ContextCarrier; import org.skywalking.apm.agent.core.context.ids.DistributedTraceId; +import org.skywalking.apm.agent.core.dictionary.DictionaryUtil; /** * {@link TraceSegmentRef} is like a pointer, which ref to another {@link TraceSegment}, @@ -15,10 +16,16 @@ public class TraceSegmentRef { private int spanId = -1; - private String applicationCode; + private int applicationId; private String peerHost; + private int peerId = DictionaryUtil.nullValue(); + + private String operationName; + + private int operationId; + /** * {@link DistributedTraceId} */ @@ -27,8 +34,20 @@ public class TraceSegmentRef { public TraceSegmentRef(ContextCarrier carrier) { this.traceSegmentId = carrier.getTraceSegmentId(); this.spanId = carrier.getSpanId(); - this.applicationCode = carrier.getApplicationCode(); - this.peerHost = carrier.getPeerHost(); + this.applicationId = carrier.getApplicationId(); + String host = carrier.getPeerHost(); + if (host.charAt(0) == '#') { + this.peerHost = host.substring(1); + } else { + this.peerId = Integer.parseInt(host); + } + String entryOperationName = carrier.getEntryOperationName(); + if (entryOperationName.charAt(0) == '#') { + this.operationName = host.substring(1); + } else { + this.operationId = Integer.parseInt(entryOperationName); + } + this.distributedTraceIds = carrier.getDistributedTraceIds(); }