diff --git a/apm-sniffer/apm-agent-core/src/main/java/org/skywalking/apm/agent/core/context/trace/EntrySpan.java b/apm-sniffer/apm-agent-core/src/main/java/org/skywalking/apm/agent/core/context/trace/EntrySpan.java index 04e42861b05b04bef30616d11c9ce4128a50bf04..19ccd83a160174d4de490099c8cccf51e27aa949 100644 --- a/apm-sniffer/apm-agent-core/src/main/java/org/skywalking/apm/agent/core/context/trace/EntrySpan.java +++ b/apm-sniffer/apm-agent-core/src/main/java/org/skywalking/apm/agent/core/context/trace/EntrySpan.java @@ -88,6 +88,24 @@ public class EntrySpan extends AbstractTracingSpan { } } + @Override + public AbstractTracingSpan setOperationName(String operationName) { + if (stackDepth == currentMaxDepth) { + return super.setOperationName(operationName); + } else { + return this; + } + } + + @Override + public AbstractTracingSpan setOperationId(int operationId) { + if (stackDepth == currentMaxDepth) { + return super.setOperationId(operationId); + } else { + return this; + } + } + @Override public EntrySpan log(Throwable t) { super.log(t); diff --git a/apm-sniffer/apm-agent-core/src/main/java/org/skywalking/apm/agent/core/context/trace/ExitSpan.java b/apm-sniffer/apm-agent-core/src/main/java/org/skywalking/apm/agent/core/context/trace/ExitSpan.java index 929872383ca89027c21afff458aca28f0460435e..96d8faebbae60e00327893c81353f067b480ce64 100644 --- a/apm-sniffer/apm-agent-core/src/main/java/org/skywalking/apm/agent/core/context/trace/ExitSpan.java +++ b/apm-sniffer/apm-agent-core/src/main/java/org/skywalking/apm/agent/core/context/trace/ExitSpan.java @@ -116,6 +116,24 @@ public class ExitSpan extends AbstractTracingSpan { return spanBuilder; } + @Override + public AbstractTracingSpan setOperationName(String operationName) { + if (stackDepth == 1) { + return super.setOperationName(operationName); + } else { + return this; + } + } + + @Override + public AbstractTracingSpan setOperationId(int operationId) { + if (stackDepth == 1) { + return super.setOperationId(operationId); + } else { + return this; + } + } + public int getPeerId() { return peerId; } 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 1fe50131962b5d286034a432c8338c59414abe92..0c488efa5fe5bbd15b4e553df49b14995c310375 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 @@ -1,5 +1,6 @@ package org.skywalking.apm.agent.core.context; +import com.google.instrumentation.trace.Span; import com.google.protobuf.InvalidProtocolBufferException; import java.util.List; import org.junit.After; @@ -19,6 +20,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.context.util.AbstractTracingSpanHelper; import org.skywalking.apm.agent.core.context.util.SegmentHelper; +import org.skywalking.apm.agent.core.context.util.SpanHelper; import org.skywalking.apm.agent.core.test.tools.AgentServiceRule; import org.skywalking.apm.agent.core.test.tools.SegmentStorage; import org.skywalking.apm.agent.core.test.tools.SegmentStoragePoint; @@ -102,6 +104,8 @@ public class ContextManagerTest { ContextManager.stopSpan(); ContextManager.stopSpan(); + SpanLayer.asHttp(firstEntrySpan); + firstEntrySpan.setOperationName("/testFirstEntry-setOperationName"); ContextManager.stopSpan(); assertThat(tracingData.getTraceSegments().size(), is(1)); @@ -121,6 +125,8 @@ public class ContextManagerTest { assertThat(actualEntrySpan.getOperationName(), is("/testSecondEntry")); assertThat(actualEntrySpan.getSpanId(), is(0)); assertThat(AbstractTracingSpanHelper.getParentSpanId(actualEntrySpan), is(-1)); + assertThat(SpanHelper.getComponentId(actualEntrySpan), is(ComponentsDefine.DUBBO.getId())); + assertThat(SpanHelper.getLayer(actualEntrySpan), is(SpanLayer.RPC_FRAMEWORK)); AbstractTracingSpan actualExitSpan = spanList.get(0); assertThat(actualExitSpan.getOperationName(), is("/textExitSpan")); @@ -156,6 +162,7 @@ public class ContextManagerTest { Tags.HTTP.METHOD.set(secondExitSpan, "GET"); Tags.URL.set(secondExitSpan, "127.0.0.1:8080"); SpanLayer.asHttp(secondExitSpan); + secondExitSpan.setOperationName("/testSecondExit-setOperationName"); ContextManager.stopSpan(); ContextManager.stopSpan(); @@ -172,6 +179,8 @@ public class ContextManagerTest { assertThat(actualFirstExitSpan.getOperationName(), is("/testFirstExit")); assertThat(actualFirstExitSpan.getSpanId(), is(1)); assertThat(AbstractTracingSpanHelper.getParentSpanId(actualFirstExitSpan), is(0)); + assertThat(SpanHelper.getComponentId(actualFirstExitSpan), is(ComponentsDefine.DUBBO.getId())); + assertThat(SpanHelper.getLayer(actualFirstExitSpan), is(SpanLayer.RPC_FRAMEWORK)); AbstractTracingSpan actualEntrySpan = spanList.get(1); assertThat(actualEntrySpan.getOperationName(), is("/testEntrySpan")); diff --git a/apm-sniffer/apm-agent-core/src/test/java/org/skywalking/apm/agent/core/context/util/SpanHelper.java b/apm-sniffer/apm-agent-core/src/test/java/org/skywalking/apm/agent/core/context/util/SpanHelper.java new file mode 100644 index 0000000000000000000000000000000000000000..1ab112344d6ed767b959bf4eda9de7a9c3466f2e --- /dev/null +++ b/apm-sniffer/apm-agent-core/src/test/java/org/skywalking/apm/agent/core/context/util/SpanHelper.java @@ -0,0 +1,26 @@ +package org.skywalking.apm.agent.core.context.util; + +import org.skywalking.apm.agent.core.context.trace.AbstractSpan; +import org.skywalking.apm.agent.core.context.trace.SpanLayer; + +public class SpanHelper { + + public static SpanLayer getLayer(AbstractSpan tracingSpan) { + try { + return FieldGetter.getParentFieldValue(tracingSpan, "layer"); + } catch (Exception e) { + } + + return null; + } + + public static int getComponentId(AbstractSpan tracingSpan) { + try { + return FieldGetter.getParentFieldValue(tracingSpan, "componentId"); + } catch (Exception e) { + } + + return -1; + } + +}