diff --git a/dd-java-agent/instrumentation/jetty-8/src/main/java/datadog/trace/instrumentation/jetty8/HandlerInstrumentation.java b/dd-java-agent/instrumentation/jetty-8/src/main/java/datadog/trace/instrumentation/jetty8/HandlerInstrumentation.java index afe2e4f12f..566e8e85a5 100644 --- a/dd-java-agent/instrumentation/jetty-8/src/main/java/datadog/trace/instrumentation/jetty8/HandlerInstrumentation.java +++ b/dd-java-agent/instrumentation/jetty-8/src/main/java/datadog/trace/instrumentation/jetty8/HandlerInstrumentation.java @@ -15,6 +15,7 @@ import datadog.trace.agent.tooling.HelperInjector; import datadog.trace.agent.tooling.Instrumenter; import datadog.trace.api.DDSpanTypes; import datadog.trace.api.DDTags; +import datadog.trace.context.TraceScope; import io.opentracing.Scope; import io.opentracing.Span; import io.opentracing.SpanContext; @@ -94,6 +95,10 @@ public final class HandlerInstrumentation extends Instrumenter.Configurable { .withTag("span.origin.type", source.getClass().getName()) .startActive(false); + if (scope instanceof TraceScope) { + ((TraceScope) scope).setAsyncPropagation(true); + } + final Span span = scope.span(); Tags.HTTP_METHOD.set(span, req.getMethod()); Tags.HTTP_URL.set(span, req.getRequestURL().toString()); diff --git a/dd-java-agent/instrumentation/jms-1/src/main/java/datadog/trace/instrumentation/jms1/JMS1MessageListenerInstrumentation.java b/dd-java-agent/instrumentation/jms-1/src/main/java/datadog/trace/instrumentation/jms1/JMS1MessageListenerInstrumentation.java index 50131053fd..207b043ba5 100644 --- a/dd-java-agent/instrumentation/jms-1/src/main/java/datadog/trace/instrumentation/jms1/JMS1MessageListenerInstrumentation.java +++ b/dd-java-agent/instrumentation/jms-1/src/main/java/datadog/trace/instrumentation/jms1/JMS1MessageListenerInstrumentation.java @@ -17,6 +17,7 @@ import datadog.trace.agent.tooling.DDTransformers; import datadog.trace.agent.tooling.Instrumenter; import datadog.trace.api.DDSpanTypes; import datadog.trace.api.DDTags; +import datadog.trace.context.TraceScope; import datadog.trace.instrumentation.jms.util.MessagePropertyTextMap; import io.opentracing.Scope; import io.opentracing.Span; @@ -64,16 +65,23 @@ public final class JMS1MessageListenerInstrumentation extends Instrumenter.Confi final SpanContext extractedContext = GlobalTracer.get().extract(Format.Builtin.TEXT_MAP, new MessagePropertyTextMap(message)); - return GlobalTracer.get() - .buildSpan("jms.onMessage") - .asChildOf(extractedContext) - .withTag(DDTags.SERVICE_NAME, "jms") - .withTag(DDTags.SPAN_TYPE, DDSpanTypes.MESSAGE_CONSUMER) - .withTag(DDTags.RESOURCE_NAME, "Received from " + toResourceName(message, null)) - .withTag(Tags.COMPONENT.getKey(), "jms1") - .withTag(Tags.SPAN_KIND.getKey(), Tags.SPAN_KIND_CONSUMER) - .withTag("span.origin.type", listener.getClass().getName()) - .startActive(true); + final Scope scope = + GlobalTracer.get() + .buildSpan("jms.onMessage") + .asChildOf(extractedContext) + .withTag(DDTags.SERVICE_NAME, "jms") + .withTag(DDTags.SPAN_TYPE, DDSpanTypes.MESSAGE_CONSUMER) + .withTag(DDTags.RESOURCE_NAME, "Received from " + toResourceName(message, null)) + .withTag(Tags.COMPONENT.getKey(), "jms1") + .withTag(Tags.SPAN_KIND.getKey(), Tags.SPAN_KIND_CONSUMER) + .withTag("span.origin.type", listener.getClass().getName()) + .startActive(true); + + if (scope instanceof TraceScope) { + ((TraceScope) scope).setAsyncPropagation(true); + } + + return scope; } @Advice.OnMethodExit(onThrowable = Throwable.class, suppress = Throwable.class) diff --git a/dd-java-agent/instrumentation/jms-2/src/main/java/datadog/trace/instrumentation/jms2/JMS2MessageListenerInstrumentation.java b/dd-java-agent/instrumentation/jms-2/src/main/java/datadog/trace/instrumentation/jms2/JMS2MessageListenerInstrumentation.java index dad4cc77c8..d77721e18b 100644 --- a/dd-java-agent/instrumentation/jms-2/src/main/java/datadog/trace/instrumentation/jms2/JMS2MessageListenerInstrumentation.java +++ b/dd-java-agent/instrumentation/jms-2/src/main/java/datadog/trace/instrumentation/jms2/JMS2MessageListenerInstrumentation.java @@ -17,6 +17,7 @@ import datadog.trace.agent.tooling.DDTransformers; import datadog.trace.agent.tooling.Instrumenter; import datadog.trace.api.DDSpanTypes; import datadog.trace.api.DDTags; +import datadog.trace.context.TraceScope; import datadog.trace.instrumentation.jms.util.MessagePropertyTextMap; import io.opentracing.Scope; import io.opentracing.Span; @@ -64,16 +65,23 @@ public final class JMS2MessageListenerInstrumentation extends Instrumenter.Confi final SpanContext extractedContext = GlobalTracer.get().extract(Format.Builtin.TEXT_MAP, new MessagePropertyTextMap(message)); - return GlobalTracer.get() - .buildSpan("jms.onMessage") - .asChildOf(extractedContext) - .withTag(DDTags.SERVICE_NAME, "jms") - .withTag(DDTags.SPAN_TYPE, DDSpanTypes.MESSAGE_CONSUMER) - .withTag(DDTags.RESOURCE_NAME, "Received from " + toResourceName(message, null)) - .withTag(Tags.COMPONENT.getKey(), "jms2") - .withTag(Tags.SPAN_KIND.getKey(), Tags.SPAN_KIND_CONSUMER) - .withTag("span.origin.type", listener.getClass().getName()) - .startActive(true); + final Scope scope = + GlobalTracer.get() + .buildSpan("jms.onMessage") + .asChildOf(extractedContext) + .withTag(DDTags.SERVICE_NAME, "jms") + .withTag(DDTags.SPAN_TYPE, DDSpanTypes.MESSAGE_CONSUMER) + .withTag(DDTags.RESOURCE_NAME, "Received from " + toResourceName(message, null)) + .withTag(Tags.COMPONENT.getKey(), "jms2") + .withTag(Tags.SPAN_KIND.getKey(), Tags.SPAN_KIND_CONSUMER) + .withTag("span.origin.type", listener.getClass().getName()) + .startActive(true); + + if (scope instanceof TraceScope) { + ((TraceScope) scope).setAsyncPropagation(true); + } + + return scope; } @Advice.OnMethodExit(onThrowable = Throwable.class, suppress = Throwable.class) diff --git a/dd-java-agent/instrumentation/servlet-2/src/main/java/datadog/trace/instrumentation/servlet2/FilterChain2Instrumentation.java b/dd-java-agent/instrumentation/servlet-2/src/main/java/datadog/trace/instrumentation/servlet2/FilterChain2Instrumentation.java index 3434638af9..106f10df23 100644 --- a/dd-java-agent/instrumentation/servlet-2/src/main/java/datadog/trace/instrumentation/servlet2/FilterChain2Instrumentation.java +++ b/dd-java-agent/instrumentation/servlet-2/src/main/java/datadog/trace/instrumentation/servlet2/FilterChain2Instrumentation.java @@ -16,6 +16,7 @@ import datadog.trace.agent.tooling.DDTransformers; import datadog.trace.agent.tooling.Instrumenter; import datadog.trace.api.DDSpanTypes; import datadog.trace.api.DDTags; +import datadog.trace.context.TraceScope; import io.opentracing.Scope; import io.opentracing.Span; import io.opentracing.SpanContext; @@ -84,6 +85,10 @@ public final class FilterChain2Instrumentation extends Instrumenter.Configurable .withTag(DDTags.SPAN_TYPE, DDSpanTypes.WEB_SERVLET) .startActive(true); + if (scope instanceof TraceScope) { + ((TraceScope) scope).setAsyncPropagation(true); + } + final Span span = scope.span(); Tags.COMPONENT.set(span, "java-web-servlet"); Tags.HTTP_METHOD.set(span, ((HttpServletRequest) req).getMethod()); diff --git a/dd-java-agent/instrumentation/servlet-2/src/main/java/datadog/trace/instrumentation/servlet2/HttpServlet2Instrumentation.java b/dd-java-agent/instrumentation/servlet-2/src/main/java/datadog/trace/instrumentation/servlet2/HttpServlet2Instrumentation.java index 1e0c637a56..67df772271 100644 --- a/dd-java-agent/instrumentation/servlet-2/src/main/java/datadog/trace/instrumentation/servlet2/HttpServlet2Instrumentation.java +++ b/dd-java-agent/instrumentation/servlet-2/src/main/java/datadog/trace/instrumentation/servlet2/HttpServlet2Instrumentation.java @@ -17,6 +17,7 @@ import datadog.trace.agent.tooling.HelperInjector; import datadog.trace.agent.tooling.Instrumenter; import datadog.trace.api.DDSpanTypes; import datadog.trace.api.DDTags; +import datadog.trace.context.TraceScope; import io.opentracing.Scope; import io.opentracing.Span; import io.opentracing.SpanContext; @@ -86,6 +87,10 @@ public final class HttpServlet2Instrumentation extends Instrumenter.Configurable .withTag(DDTags.SPAN_TYPE, DDSpanTypes.WEB_SERVLET) .startActive(true); + if (scope instanceof TraceScope) { + ((TraceScope) scope).setAsyncPropagation(true); + } + final Span span = scope.span(); Tags.COMPONENT.set(span, "java-web-servlet"); Tags.HTTP_METHOD.set(span, req.getMethod()); diff --git a/dd-java-agent/instrumentation/servlet-3/src/main/java/datadog/trace/instrumentation/servlet3/FilterChain3Instrumentation.java b/dd-java-agent/instrumentation/servlet-3/src/main/java/datadog/trace/instrumentation/servlet3/FilterChain3Instrumentation.java index c3b6c1e8b3..8ae1a166e8 100644 --- a/dd-java-agent/instrumentation/servlet-3/src/main/java/datadog/trace/instrumentation/servlet3/FilterChain3Instrumentation.java +++ b/dd-java-agent/instrumentation/servlet-3/src/main/java/datadog/trace/instrumentation/servlet3/FilterChain3Instrumentation.java @@ -17,6 +17,7 @@ import datadog.trace.agent.tooling.HelperInjector; import datadog.trace.agent.tooling.Instrumenter; import datadog.trace.api.DDSpanTypes; import datadog.trace.api.DDTags; +import datadog.trace.context.TraceScope; import io.opentracing.Scope; import io.opentracing.Span; import io.opentracing.SpanContext; @@ -89,6 +90,10 @@ public final class FilterChain3Instrumentation extends Instrumenter.Configurable .withTag(DDTags.SPAN_TYPE, DDSpanTypes.WEB_SERVLET) .startActive(false); + if (scope instanceof TraceScope) { + ((TraceScope) scope).setAsyncPropagation(true); + } + final Span span = scope.span(); Tags.COMPONENT.set(span, "java-web-servlet"); Tags.HTTP_METHOD.set(span, ((HttpServletRequest) req).getMethod()); diff --git a/dd-java-agent/instrumentation/servlet-3/src/main/java/datadog/trace/instrumentation/servlet3/HttpServlet3Instrumentation.java b/dd-java-agent/instrumentation/servlet-3/src/main/java/datadog/trace/instrumentation/servlet3/HttpServlet3Instrumentation.java index c90375a452..1921272bb0 100644 --- a/dd-java-agent/instrumentation/servlet-3/src/main/java/datadog/trace/instrumentation/servlet3/HttpServlet3Instrumentation.java +++ b/dd-java-agent/instrumentation/servlet-3/src/main/java/datadog/trace/instrumentation/servlet3/HttpServlet3Instrumentation.java @@ -17,6 +17,7 @@ import datadog.trace.agent.tooling.HelperInjector; import datadog.trace.agent.tooling.Instrumenter; import datadog.trace.api.DDSpanTypes; import datadog.trace.api.DDTags; +import datadog.trace.context.TraceScope; import io.opentracing.Scope; import io.opentracing.Span; import io.opentracing.SpanContext; @@ -85,6 +86,10 @@ public final class HttpServlet3Instrumentation extends Instrumenter.Configurable .withTag(DDTags.SPAN_TYPE, DDSpanTypes.WEB_SERVLET) .startActive(false); + if (scope instanceof TraceScope) { + ((TraceScope) scope).setAsyncPropagation(true); + } + final Span span = scope.span(); Tags.COMPONENT.set(span, "java-web-servlet"); Tags.HTTP_METHOD.set(span, req.getMethod());