From 26889046bc0c0a3ac287f2a6c0eba0a41248ecb1 Mon Sep 17 00:00:00 2001 From: ascrutae Date: Mon, 5 Mar 2018 18:06:17 +0800 Subject: [PATCH] [Agent] fix create entry span failure --- .../agent/core/context/TracingContext.java | 30 +++++++++---------- 1 file changed, 14 insertions(+), 16 deletions(-) diff --git a/apm-sniffer/apm-agent-core/src/main/java/org/apache/skywalking/apm/agent/core/context/TracingContext.java b/apm-sniffer/apm-agent-core/src/main/java/org/apache/skywalking/apm/agent/core/context/TracingContext.java index 16c9b32184..1bff777439 100644 --- a/apm-sniffer/apm-agent-core/src/main/java/org/apache/skywalking/apm/agent/core/context/TracingContext.java +++ b/apm-sniffer/apm-agent-core/src/main/java/org/apache/skywalking/apm/agent/core/context/TracingContext.java @@ -248,21 +248,7 @@ public class TracingContext implements AbstractTracerContext { AbstractSpan entrySpan; final AbstractSpan parentSpan = peek(); final int parentSpanId = parentSpan == null ? -1 : parentSpan.getSpanId(); - if (parentSpan == null) { - entrySpan = (AbstractTracingSpan)DictionaryManager.findOperationNameCodeSection() - .findOnly(segment.getApplicationId(), operationName) - .doInCondition(new PossibleFound.FoundAndObtain() { - @Override public Object doProcess(int operationId) { - return new EntrySpan(spanIdGenerator++, parentSpanId, operationId); - } - }, new PossibleFound.NotFoundAndObtain() { - @Override public Object doProcess() { - return new EntrySpan(spanIdGenerator++, parentSpanId, operationName); - } - }); - entrySpan.start(); - return push(entrySpan); - } else if (parentSpan.isEntry()) { + if (parentSpan != null && parentSpan.isEntry()) { entrySpan = (AbstractTracingSpan)DictionaryManager.findOperationNameCodeSection() .findOnly(segment.getApplicationId(), operationName) .doInCondition(new PossibleFound.FoundAndObtain() { @@ -276,7 +262,19 @@ public class TracingContext implements AbstractTracerContext { }); return entrySpan.start(); } else { - throw new IllegalStateException("The Entry Span can't be the child of Non-Entry Span"); + entrySpan = (AbstractTracingSpan)DictionaryManager.findOperationNameCodeSection() + .findOnly(segment.getApplicationId(), operationName) + .doInCondition(new PossibleFound.FoundAndObtain() { + @Override public Object doProcess(int operationId) { + return new EntrySpan(spanIdGenerator++, parentSpanId, operationId); + } + }, new PossibleFound.NotFoundAndObtain() { + @Override public Object doProcess() { + return new EntrySpan(spanIdGenerator++, parentSpanId, operationName); + } + }); + entrySpan.start(); + return push(entrySpan); } }