提交 c08c9578 编写于 作者: A ascrutae

fix issue that operation name and operation id is not correct when create...

fix issue that operation name and operation id is not correct when create multi exit span or entry span
上级 b5ff6aa1
......@@ -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);
......
......@@ -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;
}
......
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"));
......
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;
}
}
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册