Skip to content

Commit 389b153

Browse files
authored
Fix route handling when local root span wasn't created by instrumentation api (#13588)
1 parent f048a91 commit 389b153

File tree

3 files changed

+10
-8
lines changed

3 files changed

+10
-8
lines changed

instrumentation-api/src/main/java/io/opentelemetry/instrumentation/api/instrumenter/Instrumenter.java

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -190,7 +190,8 @@ private Context doStart(Context parentContext, REQUEST request, @Nullable Instan
190190
context = contextCustomizer.onStart(context, request, attributes);
191191
}
192192

193-
boolean localRoot = LocalRootSpan.isLocalRoot(context);
193+
boolean localRoot = LocalRootSpan.isLocalRoot(parentContext);
194+
boolean hasLocalRoot = LocalRootSpan.fromContextOrNull(context) != null;
194195

195196
spanBuilder.setAllAttributes(attributes);
196197
Span span = spanBuilder.setParent(context).startSpan();
@@ -216,9 +217,9 @@ private Context doStart(Context parentContext, REQUEST request, @Nullable Instan
216217

217218
if (localRoot) {
218219
context = LocalRootSpan.store(context, span);
219-
if (spanKind == SpanKind.SERVER) {
220-
HttpRouteState.updateSpan(context, span);
221-
}
220+
}
221+
if (!hasLocalRoot && spanKind == SpanKind.SERVER) {
222+
HttpRouteState.updateSpan(context, span);
222223
}
223224

224225
return spanSuppressor.storeInContext(context, spanKind, span);

instrumentation-api/src/main/java/io/opentelemetry/instrumentation/api/internal/HttpRouteState.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@ public static HttpRouteState fromContextOrNull(Context context) {
2727

2828
public static void updateSpan(Context context, Span span) {
2929
HttpRouteState state = fromContextOrNull(context);
30-
if (state != null) {
30+
if (state != null && state.span == null) {
3131
state.span = span;
3232
}
3333
}

instrumentation-api/src/test/java/io/opentelemetry/instrumentation/api/semconv/http/HttpServerRouteTest.java

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -44,7 +44,7 @@ void setUp() {
4444
}
4545

4646
@Test
47-
void noLocalRootSpan() {
47+
void nonInstrumenerParentLocalRootSpan() {
4848
Span parentSpan =
4949
testing.getOpenTelemetry().getTracer("test").spanBuilder("parent").startSpan();
5050
parentSpan.end();
@@ -56,10 +56,11 @@ void noLocalRootSpan() {
5656

5757
instrumenter.end(context, "test", null, null);
5858

59-
assertNull(HttpServerRoute.get(context));
59+
assertEquals("/get/:id", HttpServerRoute.get(context));
6060
assertThat(testing.getSpans())
6161
.satisfiesExactly(
62-
span -> assertThat(span).hasName("parent"), span -> assertThat(span).hasName("test"));
62+
span -> assertThat(span).hasName("parent"),
63+
span -> assertThat(span).hasName("HTTP /get/:id"));
6364
}
6465

6566
@Test

0 commit comments

Comments
 (0)