From 72ffb3b7c5525a2767be0bfc519f02975a670adc Mon Sep 17 00:00:00 2001 From: Mateusz Rzeszutek Date: Fri, 5 Mar 2021 19:54:00 +0100 Subject: [PATCH] Make BaseTracer fields private (#2492) * Make BaseTracer fields private By making `tracer` private we're forcing all tracer implementation to use the `spanBuilder()` utility method and pass the parent context manually. --- .../api/tracer/BaseTracer.java | 13 ++++----- .../api/tracer/DatabaseClientTracer.java | 5 +--- .../api/tracer/HttpClientTracer.java | 2 +- .../api/tracer/HttpServerTracer.java | 2 +- .../apachecamel/CamelRoutePolicy.java | 27 +++++++++---------- .../apachecamel/CamelTracer.java | 5 ---- .../apachedubbo/v2_7/DubboTracer.java | 13 ++++----- .../ApacheHttpAsyncClientTracer.java | 7 +---- ...wsLambdaRequestHandlerInstrumentation.java | 2 +- .../v1_0/AwsLambdaMessageTracer.java | 16 +++++------ .../awslambda/v1_0/AwsLambdaTracer.java | 5 ++-- .../v1_0/TracingSqsEventHandler.java | 3 ++- .../v1_0/TracingSqsMessageHandler.java | 3 ++- .../awssdk/v2_2/AwsSdkHttpClientTracer.java | 3 +-- .../instrumentation/geode/GeodeTracer.java | 7 +++-- .../grpc/v1_5/GrpcClientTracer.java | 6 +++-- .../grpc/v1_5/GrpcServerTracer.java | 7 ++--- .../jaxrs/v2_0/JaxRsAnnotationsTracer.java | 6 +++-- .../jaxws/common/JaxWsTracer.java | 11 ++++---- .../instrumentation/jms/JmsTracer.java | 18 ++++++------- .../kafkaclients/KafkaConsumerTracer.java | 5 +--- .../kafkaclients/KafkaProducerTracer.java | 2 +- .../kafkastreams/KafkaStreamsTracer.java | 7 ++--- .../v3_8/client/NettyHttpClientTracer.java | 7 +---- .../v4_0/client/NettyHttpClientTracer.java | 7 +---- .../v4_1/client/NettyHttpClientTracer.java | 7 +---- .../otelannotations/WithSpanTracer.java | 12 ++++----- .../rabbitmq/RabbitTracer.java | 18 ++++++------- .../rmi/client/RmiClientTracer.java | 5 ++-- .../rmi/server/RmiServerTracer.java | 5 +--- .../batch/chunk/ChunkExecutionTracer.java | 21 ++++++++------- .../spring/batch/job/JobExecutionTracer.java | 4 +-- .../batch/step/StepExecutionTracer.java | 4 +-- .../aspects/WithSpanAspectTracer.java | 4 +-- .../client/SpringWebfluxHttpClientTracer.java | 5 ---- .../springwebmvc/SpringWebMvcTracer.java | 10 ++++--- .../spring/ws/SpringWsTracer.java | 5 ++-- .../struts2/Struts2Tracer.java | 4 ++- .../instrumentation/twilio/TwilioTracer.java | 8 ++---- 39 files changed, 127 insertions(+), 174 deletions(-) diff --git a/instrumentation-api/src/main/java/io/opentelemetry/instrumentation/api/tracer/BaseTracer.java b/instrumentation-api/src/main/java/io/opentelemetry/instrumentation/api/tracer/BaseTracer.java index 4fdba2dfe6..dcbb5b494b 100644 --- a/instrumentation-api/src/main/java/io/opentelemetry/instrumentation/api/tracer/BaseTracer.java +++ b/instrumentation-api/src/main/java/io/opentelemetry/instrumentation/api/tracer/BaseTracer.java @@ -49,8 +49,8 @@ public abstract class BaseTracer { private static final SupportabilityMetrics supportability = new SupportabilityMetrics(Config.get()).start(); - protected final Tracer tracer; - protected final ContextPropagators propagators; + private final Tracer tracer; + private final ContextPropagators propagators; public BaseTracer() { this(GlobalOpenTelemetry.get()); @@ -153,12 +153,13 @@ public abstract class BaseTracer { * name {@code spanName} and kind {@code kind}. */ public Context startSpan(Context parentContext, String spanName, SpanKind kind) { - Span span = spanBuilder(spanName, kind).setParent(parentContext).startSpan(); + Span span = spanBuilder(parentContext, spanName, kind).startSpan(); return parentContext.with(span); } - protected SpanBuilder spanBuilder(String spanName, SpanKind kind) { - return tracer.spanBuilder(spanName).setSpanKind(kind); + /** Returns a {@link SpanBuilder} to create and start a new {@link Span}. */ + protected final SpanBuilder spanBuilder(Context parentContext, String spanName, SpanKind kind) { + return tracer.spanBuilder(spanName).setSpanKind(kind).setParent(parentContext); } /** @@ -217,7 +218,7 @@ public abstract class BaseTracer { if (clazz.getPackage() != null) { String pkgName = clazz.getPackage().getName(); if (!pkgName.isEmpty()) { - className = clazz.getName().replace(pkgName, "").substring(1); + className = className.substring(pkgName.length() + 1); } } return className; diff --git a/instrumentation-api/src/main/java/io/opentelemetry/instrumentation/api/tracer/DatabaseClientTracer.java b/instrumentation-api/src/main/java/io/opentelemetry/instrumentation/api/tracer/DatabaseClientTracer.java index 699aea7780..10b60b3591 100644 --- a/instrumentation-api/src/main/java/io/opentelemetry/instrumentation/api/tracer/DatabaseClientTracer.java +++ b/instrumentation-api/src/main/java/io/opentelemetry/instrumentation/api/tracer/DatabaseClientTracer.java @@ -40,10 +40,7 @@ public abstract class DatabaseClientTracer extends BaseT private Span internalStartSpan( SpanKind kind, Context parentContext, REQUEST request, String name, long startTimeNanos) { - SpanBuilder spanBuilder = tracer.spanBuilder(name).setSpanKind(kind).setParent(parentContext); + SpanBuilder spanBuilder = spanBuilder(parentContext, name, kind); if (startTimeNanos > 0) { spanBuilder.setStartTimestamp(startTimeNanos, TimeUnit.NANOSECONDS); } diff --git a/instrumentation-api/src/main/java/io/opentelemetry/instrumentation/api/tracer/HttpServerTracer.java b/instrumentation-api/src/main/java/io/opentelemetry/instrumentation/api/tracer/HttpServerTracer.java index 2a0bf1c0b0..dc4aad96c2 100644 --- a/instrumentation-api/src/main/java/io/opentelemetry/instrumentation/api/tracer/HttpServerTracer.java +++ b/instrumentation-api/src/main/java/io/opentelemetry/instrumentation/api/tracer/HttpServerTracer.java @@ -82,7 +82,7 @@ public abstract class HttpServerTracer e // whether to call end() or not on the Span in the returned Context Context parentContext = extract(request, getGetter()); - SpanBuilder builder = tracer.spanBuilder(spanName).setSpanKind(SERVER).setParent(parentContext); + SpanBuilder builder = spanBuilder(parentContext, spanName, SERVER); if (startTimestamp >= 0) { builder.setStartTimestamp(startTimestamp, TimeUnit.NANOSECONDS); diff --git a/instrumentation/apache-camel-2.20/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/apachecamel/CamelRoutePolicy.java b/instrumentation/apache-camel-2.20/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/apachecamel/CamelRoutePolicy.java index d476f13d04..aae986e0a0 100644 --- a/instrumentation/apache-camel-2.20/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/apachecamel/CamelRoutePolicy.java +++ b/instrumentation/apache-camel-2.20/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/apachecamel/CamelRoutePolicy.java @@ -24,7 +24,6 @@ package io.opentelemetry.javaagent.instrumentation.apachecamel; import io.opentelemetry.api.trace.Span; -import io.opentelemetry.api.trace.SpanBuilder; import io.opentelemetry.api.trace.SpanKind; import io.opentelemetry.context.Context; import org.apache.camel.Exchange; @@ -38,23 +37,20 @@ final class CamelRoutePolicy extends RoutePolicySupport { private static final Logger LOG = LoggerFactory.getLogger(CamelRoutePolicy.class); private Span spanOnExchangeBegin( - Route route, Exchange exchange, SpanDecorator sd, SpanKind spanKind) { - Span activeSpan = Span.current(); - String name = sd.getOperationName(exchange, route.getEndpoint(), CamelDirection.INBOUND); - SpanBuilder builder = CamelTracer.TRACER.spanBuilder(name); - builder.setSpanKind(spanKind); + Route route, Exchange exchange, SpanDecorator sd, Context parentContext, SpanKind spanKind) { + Span activeSpan = Span.fromContext(parentContext); if (!activeSpan.getSpanContext().isValid()) { - Context parentContext = + parentContext = CamelPropagationUtil.extractParent(exchange.getIn().getHeaders(), route.getEndpoint()); - if (parentContext != null) { - builder.setParent(parentContext); - } } - return builder.startSpan(); + + String name = sd.getOperationName(exchange, route.getEndpoint(), CamelDirection.INBOUND); + Context context = CamelTracer.TRACER.startSpan(parentContext, name, spanKind); + return Span.fromContext(context); } - private SpanKind spanKind(SpanDecorator sd) { - Span activeSpan = Span.current(); + private SpanKind spanKind(Context context, SpanDecorator sd) { + Span activeSpan = Span.fromContext(context); // if there's an active span, this is not a root span which we always mark as INTERNAL return (activeSpan.getSpanContext().isValid() ? SpanKind.INTERNAL : sd.getReceiverSpanKind()); } @@ -67,8 +63,9 @@ final class CamelRoutePolicy extends RoutePolicySupport { public void onExchangeBegin(Route route, Exchange exchange) { try { SpanDecorator sd = CamelTracer.TRACER.getSpanDecorator(route.getEndpoint()); - SpanKind spanKind = spanKind(sd); - Span span = spanOnExchangeBegin(route, exchange, sd, spanKind); + Context parentContext = Context.current(); + SpanKind spanKind = spanKind(parentContext, sd); + Span span = spanOnExchangeBegin(route, exchange, sd, parentContext, spanKind); sd.pre(span, exchange, route.getEndpoint(), CamelDirection.INBOUND); ActiveSpanManager.activate(exchange, span, spanKind); LOG.debug("[Route start] Receiver span started {}", span); diff --git a/instrumentation/apache-camel-2.20/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/apachecamel/CamelTracer.java b/instrumentation/apache-camel-2.20/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/apachecamel/CamelTracer.java index 9bc2622848..6ec39660c2 100644 --- a/instrumentation/apache-camel-2.20/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/apachecamel/CamelTracer.java +++ b/instrumentation/apache-camel-2.20/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/apachecamel/CamelTracer.java @@ -24,7 +24,6 @@ package io.opentelemetry.javaagent.instrumentation.apachecamel; import io.opentelemetry.api.trace.Span; -import io.opentelemetry.api.trace.SpanBuilder; import io.opentelemetry.context.Context; import io.opentelemetry.context.Scope; import io.opentelemetry.instrumentation.api.tracer.BaseTracer; @@ -43,10 +42,6 @@ class CamelTracer extends BaseTracer { return "io.opentelemetry.javaagent.apache-camel-2.20"; } - public SpanBuilder spanBuilder(String name) { - return tracer.spanBuilder(name); - } - public Scope startClientScope(Span span) { Context current = super.withClientSpan(Context.current(), span); return current.makeCurrent(); diff --git a/instrumentation/apache-dubbo/apache-dubbo-2.7/library/src/main/java/io/opentelemetry/instrumentation/apachedubbo/v2_7/DubboTracer.java b/instrumentation/apache-dubbo/apache-dubbo-2.7/library/src/main/java/io/opentelemetry/instrumentation/apachedubbo/v2_7/DubboTracer.java index 7253dbb759..f3beb81cbb 100644 --- a/instrumentation/apache-dubbo/apache-dubbo-2.7/library/src/main/java/io/opentelemetry/instrumentation/apachedubbo/v2_7/DubboTracer.java +++ b/instrumentation/apache-dubbo/apache-dubbo-2.7/library/src/main/java/io/opentelemetry/instrumentation/apachedubbo/v2_7/DubboTracer.java @@ -25,11 +25,9 @@ class DubboTracer extends RpcServerTracer { public Context startServerSpan( String interfaceName, String methodName, RpcInvocation rpcInvocation) { + Context parentContext = extract(rpcInvocation, getGetter()); SpanBuilder spanBuilder = - tracer - .spanBuilder(DubboHelper.getSpanName(interfaceName, methodName)) - .setSpanKind(SERVER) - .setParent(extract(rpcInvocation, getGetter())) + spanBuilder(parentContext, DubboHelper.getSpanName(interfaceName, methodName), SERVER) .setAttribute(SemanticAttributes.RPC_SYSTEM, "dubbo"); DubboHelper.prepareSpan(spanBuilder, interfaceName, methodName); NetPeerUtils.INSTANCE.setNetPeer(spanBuilder, RpcContext.getContext().getRemoteAddress()); @@ -37,14 +35,13 @@ class DubboTracer extends RpcServerTracer { } public Context startClientSpan(String interfaceName, String methodName) { + Context parentContext = Context.current(); SpanBuilder spanBuilder = - tracer - .spanBuilder(DubboHelper.getSpanName(interfaceName, methodName)) - .setSpanKind(CLIENT) + spanBuilder(parentContext, DubboHelper.getSpanName(interfaceName, methodName), CLIENT) .setAttribute(SemanticAttributes.RPC_SYSTEM, "dubbo"); DubboHelper.prepareSpan(spanBuilder, interfaceName, methodName); NetPeerUtils.INSTANCE.setNetPeer(spanBuilder, RpcContext.getContext().getRemoteAddress()); - return withClientSpan(Context.current(), spanBuilder.startSpan()); + return withClientSpan(parentContext, spanBuilder.startSpan()); } public void end(Context context, Result result) { diff --git a/instrumentation/apache-httpasyncclient-4.1/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/apachehttpasyncclient/ApacheHttpAsyncClientTracer.java b/instrumentation/apache-httpasyncclient-4.1/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/apachehttpasyncclient/ApacheHttpAsyncClientTracer.java index cb1b5ebfc1..29e087a048 100644 --- a/instrumentation/apache-httpasyncclient-4.1/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/apachehttpasyncclient/ApacheHttpAsyncClientTracer.java +++ b/instrumentation/apache-httpasyncclient-4.1/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/apachehttpasyncclient/ApacheHttpAsyncClientTracer.java @@ -33,12 +33,7 @@ public class ApacheHttpAsyncClientTracer } public Context startSpan(Context parentContext) { - Span span = - tracer - .spanBuilder(DEFAULT_SPAN_NAME) - .setSpanKind(CLIENT) - .setParent(parentContext) - .startSpan(); + Span span = spanBuilder(parentContext, DEFAULT_SPAN_NAME, CLIENT).startSpan(); return withClientSpan(parentContext, span); } diff --git a/instrumentation/aws-lambda-1.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/awslambda/v1_0/AwsLambdaRequestHandlerInstrumentation.java b/instrumentation/aws-lambda-1.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/awslambda/v1_0/AwsLambdaRequestHandlerInstrumentation.java index 2ae471ee0b..ed04064fd1 100644 --- a/instrumentation/aws-lambda-1.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/awslambda/v1_0/AwsLambdaRequestHandlerInstrumentation.java +++ b/instrumentation/aws-lambda-1.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/awslambda/v1_0/AwsLambdaRequestHandlerInstrumentation.java @@ -63,7 +63,7 @@ public class AwsLambdaRequestHandlerInstrumentation implements TypeInstrumentati functionContext = functionTracer().startSpan(context, SpanKind.SERVER, arg); functionScope = functionContext.makeCurrent(); if (arg instanceof SQSEvent) { - messageContext = messageTracer().startSpan((SQSEvent) arg); + messageContext = messageTracer().startSpan(functionContext, (SQSEvent) arg); messageScope = messageContext.makeCurrent(); } } diff --git a/instrumentation/aws-lambda-1.0/library/src/main/java/io/opentelemetry/instrumentation/awslambda/v1_0/AwsLambdaMessageTracer.java b/instrumentation/aws-lambda-1.0/library/src/main/java/io/opentelemetry/instrumentation/awslambda/v1_0/AwsLambdaMessageTracer.java index fa108ee938..f6de3a25b1 100644 --- a/instrumentation/aws-lambda-1.0/library/src/main/java/io/opentelemetry/instrumentation/awslambda/v1_0/AwsLambdaMessageTracer.java +++ b/instrumentation/aws-lambda-1.0/library/src/main/java/io/opentelemetry/instrumentation/awslambda/v1_0/AwsLambdaMessageTracer.java @@ -5,13 +5,14 @@ package io.opentelemetry.instrumentation.awslambda.v1_0; +import static io.opentelemetry.api.trace.SpanKind.CONSUMER; + import com.amazonaws.services.lambda.runtime.events.SQSEvent; import com.amazonaws.services.lambda.runtime.events.SQSEvent.SQSMessage; import io.opentelemetry.api.OpenTelemetry; import io.opentelemetry.api.trace.Span; import io.opentelemetry.api.trace.SpanBuilder; import io.opentelemetry.api.trace.SpanContext; -import io.opentelemetry.api.trace.SpanKind; import io.opentelemetry.context.Context; import io.opentelemetry.instrumentation.api.tracer.BaseTracer; import io.opentelemetry.semconv.trace.attributes.SemanticAttributes; @@ -24,7 +25,7 @@ public class AwsLambdaMessageTracer extends BaseTracer { super(openTelemetry); } - public Context startSpan(SQSEvent event) { + public Context startSpan(Context parentContext, SQSEvent event) { // Use event source in name if all messages have the same source, otherwise use placeholder. String source = "multiple_sources"; if (!event.getRecords().isEmpty()) { @@ -41,7 +42,7 @@ public class AwsLambdaMessageTracer extends BaseTracer { } } - SpanBuilder span = tracer.spanBuilder(source + " process").setSpanKind(SpanKind.CONSUMER); + SpanBuilder span = spanBuilder(parentContext, source + " process", CONSUMER); span.setAttribute(SemanticAttributes.MESSAGING_SYSTEM, "AmazonSQS"); span.setAttribute(SemanticAttributes.MESSAGING_OPERATION, "process"); @@ -50,12 +51,11 @@ public class AwsLambdaMessageTracer extends BaseTracer { addLinkToMessageParent(message, span); } - return Context.current().with(span.startSpan()); + return parentContext.with(span.startSpan()); } - public Context startSpan(SQSMessage message) { - SpanBuilder span = - tracer.spanBuilder(message.getEventSource() + " process").setSpanKind(SpanKind.CONSUMER); + public Context startSpan(Context parentContext, SQSMessage message) { + SpanBuilder span = spanBuilder(parentContext, message.getEventSource() + " process", CONSUMER); span.setAttribute(SemanticAttributes.MESSAGING_SYSTEM, "AmazonSQS"); span.setAttribute(SemanticAttributes.MESSAGING_OPERATION, "process"); @@ -64,7 +64,7 @@ public class AwsLambdaMessageTracer extends BaseTracer { addLinkToMessageParent(message, span); - return Context.current().with(span.startSpan()); + return parentContext.with(span.startSpan()); } private void addLinkToMessageParent(SQSMessage message, SpanBuilder span) { diff --git a/instrumentation/aws-lambda-1.0/library/src/main/java/io/opentelemetry/instrumentation/awslambda/v1_0/AwsLambdaTracer.java b/instrumentation/aws-lambda-1.0/library/src/main/java/io/opentelemetry/instrumentation/awslambda/v1_0/AwsLambdaTracer.java index 9b9ec04eb9..7c0a347a5a 100644 --- a/instrumentation/aws-lambda-1.0/library/src/main/java/io/opentelemetry/instrumentation/awslambda/v1_0/AwsLambdaTracer.java +++ b/instrumentation/aws-lambda-1.0/library/src/main/java/io/opentelemetry/instrumentation/awslambda/v1_0/AwsLambdaTracer.java @@ -118,11 +118,10 @@ public class AwsLambdaTracer extends BaseTracer { Context awsContext, SpanKind kind, Object input, Map headers) { io.opentelemetry.context.Context parentContext = ParentContextExtractor.extract(headers, this); - SpanBuilder spanBuilder = tracer.spanBuilder(spanName(awsContext, input)); + SpanBuilder spanBuilder = spanBuilder(parentContext, spanName(awsContext, input), kind); setAttributes(spanBuilder, awsContext, input); - Span span = spanBuilder.setParent(parentContext).setSpanKind(kind).startSpan(); - return withServerSpan(parentContext, span); + return withServerSpan(parentContext, spanBuilder.startSpan()); } public void onOutput(io.opentelemetry.context.Context context, Object output) { diff --git a/instrumentation/aws-lambda-1.0/library/src/main/java/io/opentelemetry/instrumentation/awslambda/v1_0/TracingSqsEventHandler.java b/instrumentation/aws-lambda-1.0/library/src/main/java/io/opentelemetry/instrumentation/awslambda/v1_0/TracingSqsEventHandler.java index 3b458361ef..7d85ff56e0 100644 --- a/instrumentation/aws-lambda-1.0/library/src/main/java/io/opentelemetry/instrumentation/awslambda/v1_0/TracingSqsEventHandler.java +++ b/instrumentation/aws-lambda-1.0/library/src/main/java/io/opentelemetry/instrumentation/awslambda/v1_0/TracingSqsEventHandler.java @@ -45,7 +45,8 @@ public abstract class TracingSqsEventHandler extends TracingRequestHandler, String, SqlS } public Context startSpan(String operation, Region connection, String query) { + Context parentContext = Context.current(); SqlStatementInfo sanitizedStatement = sanitizeStatement(query); SpanBuilder span = - tracer - .spanBuilder(operation) - .setSpanKind(CLIENT) + spanBuilder(parentContext, operation, CLIENT) .setAttribute(SemanticAttributes.DB_SYSTEM, dbSystem(connection)) .setAttribute(SemanticAttributes.DB_OPERATION, operation); @@ -37,7 +36,7 @@ public class GeodeTracer extends DatabaseClientTracer, String, SqlS setNetSemanticConvention(span, connection); onStatement(span, connection, query, sanitizedStatement); - return Context.current().with(span.startSpan()); + return parentContext.with(span.startSpan()); } @Override diff --git a/instrumentation/grpc-1.5/library/src/main/java/io/opentelemetry/instrumentation/grpc/v1_5/GrpcClientTracer.java b/instrumentation/grpc-1.5/library/src/main/java/io/opentelemetry/instrumentation/grpc/v1_5/GrpcClientTracer.java index c373f758aa..a42d0d5d5f 100644 --- a/instrumentation/grpc-1.5/library/src/main/java/io/opentelemetry/instrumentation/grpc/v1_5/GrpcClientTracer.java +++ b/instrumentation/grpc-1.5/library/src/main/java/io/opentelemetry/instrumentation/grpc/v1_5/GrpcClientTracer.java @@ -26,11 +26,13 @@ final class GrpcClientTracer extends RpcClientTracer { } public Context startSpan(String name) { + Context parentContext = Context.current(); Span span = - spanBuilder(name, CLIENT) + spanBuilder(parentContext, name, CLIENT) .setAttribute(SemanticAttributes.RPC_SYSTEM, getRpcSystem()) .startSpan(); - return Context.current().with(span); + // TODO: withClientSpan() + return parentContext.with(span); } public void end(Context context, Status status) { diff --git a/instrumentation/grpc-1.5/library/src/main/java/io/opentelemetry/instrumentation/grpc/v1_5/GrpcServerTracer.java b/instrumentation/grpc-1.5/library/src/main/java/io/opentelemetry/instrumentation/grpc/v1_5/GrpcServerTracer.java index 308866d215..a478a29dd7 100644 --- a/instrumentation/grpc-1.5/library/src/main/java/io/opentelemetry/instrumentation/grpc/v1_5/GrpcServerTracer.java +++ b/instrumentation/grpc-1.5/library/src/main/java/io/opentelemetry/instrumentation/grpc/v1_5/GrpcServerTracer.java @@ -24,10 +24,11 @@ final class GrpcServerTracer extends RpcServerTracer { } public Context startSpan(String name, Metadata headers) { - SpanBuilder spanBuilder = - tracer.spanBuilder(name).setSpanKind(SERVER).setParent(extract(headers, getGetter())); + Context parentContext = extract(headers, getGetter()); + SpanBuilder spanBuilder = spanBuilder(parentContext, name, SERVER); spanBuilder.setAttribute(SemanticAttributes.RPC_SYSTEM, "grpc"); - return Context.current().with(spanBuilder.startSpan()); + // TODO: withServerSpan() + return parentContext.with(spanBuilder.startSpan()); } public void setStatus(Context context, Status status) { diff --git a/instrumentation/jaxrs/jaxrs-2.0/jaxrs-2.0-common/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/jaxrs/v2_0/JaxRsAnnotationsTracer.java b/instrumentation/jaxrs/jaxrs-2.0/jaxrs-2.0-common/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/jaxrs/v2_0/JaxRsAnnotationsTracer.java index 21a8f77800..a56e5928c7 100644 --- a/instrumentation/jaxrs/jaxrs-2.0/jaxrs-2.0-common/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/jaxrs/v2_0/JaxRsAnnotationsTracer.java +++ b/instrumentation/jaxrs/jaxrs-2.0/jaxrs-2.0-common/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/jaxrs/v2_0/JaxRsAnnotationsTracer.java @@ -5,6 +5,8 @@ package io.opentelemetry.javaagent.instrumentation.jaxrs.v2_0; +import static io.opentelemetry.api.trace.SpanKind.INTERNAL; + import io.opentelemetry.api.trace.Span; import io.opentelemetry.context.Context; import io.opentelemetry.instrumentation.api.servlet.ServletContextPath; @@ -46,7 +48,7 @@ public class JaxRsAnnotationsTracer extends BaseTracer { // We create span and immediately update its name // We do that in order to reuse logic inside updateSpanNames method, which is used externally as // well. - Span span = tracer.spanBuilder("jax-rs.request").setParent(parentContext).startSpan(); + Span span = spanBuilder(parentContext, "jax-rs.request", INTERNAL).startSpan(); updateSpanNames( parentContext, span, ServerSpan.fromContextOrNull(parentContext), target, method); return parentContext.with(span); @@ -59,7 +61,7 @@ public class JaxRsAnnotationsTracer extends BaseTracer { updateSpanName(span, pathBasedSpanName); } else { updateSpanName(serverSpan, pathBasedSpanName); - updateSpanName(span, tracer().spanNameForMethod(target, method)); + updateSpanName(span, spanNameForMethod(target, method)); } } diff --git a/instrumentation/jaxws/jaxws-common/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/jaxws/common/JaxWsTracer.java b/instrumentation/jaxws/jaxws-common/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/jaxws/common/JaxWsTracer.java index 6d5e32ef45..dee04f385a 100644 --- a/instrumentation/jaxws/jaxws-common/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/jaxws/common/JaxWsTracer.java +++ b/instrumentation/jaxws/jaxws-common/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/jaxws/common/JaxWsTracer.java @@ -5,6 +5,8 @@ package io.opentelemetry.javaagent.instrumentation.jaxws.common; +import static io.opentelemetry.api.trace.SpanKind.INTERNAL; + import io.opentelemetry.api.trace.Span; import io.opentelemetry.context.Context; import io.opentelemetry.instrumentation.api.tracer.BaseTracer; @@ -34,12 +36,11 @@ public class JaxWsTracer extends BaseTracer { serverSpan.updateName(spanName); } - return parentContext.with( - tracer - .spanBuilder(spanName) - .setParent(parentContext) + Span span = + spanBuilder(parentContext, spanName, INTERNAL) .setAttribute(SemanticAttributes.CODE_NAMESPACE, method.getDeclaringClass().getName()) .setAttribute(SemanticAttributes.CODE_FUNCTION, method.getName()) - .startSpan()); + .startSpan(); + return parentContext.with(span); } } diff --git a/instrumentation/jms-1.1/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/jms/JmsTracer.java b/instrumentation/jms-1.1/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/jms/JmsTracer.java index f55e319a40..23682bbd6f 100644 --- a/instrumentation/jms-1.1/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/jms/JmsTracer.java +++ b/instrumentation/jms-1.1/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/jms/JmsTracer.java @@ -41,13 +41,6 @@ public class JmsTracer extends BaseTracer { public Context startConsumerSpan( MessageDestination destination, String operation, Message message, long startTime) { - SpanBuilder spanBuilder = - tracer - .spanBuilder(spanName(destination, operation)) - .setSpanKind(CONSUMER) - .setStartTimestamp(startTime, TimeUnit.MILLISECONDS) - .setAttribute(SemanticAttributes.MESSAGING_OPERATION, operation); - Context parentContext = Context.root(); if (message != null && "process".equals(operation)) { // TODO use BaseTracer.extract() which has context leak detection @@ -57,16 +50,21 @@ public class JmsTracer extends BaseTracer { .getTextMapPropagator() .extract(Context.root(), message, GETTER); } - spanBuilder.setParent(parentContext); + + SpanBuilder spanBuilder = + spanBuilder(parentContext, spanName(destination, operation), CONSUMER) + .setStartTimestamp(startTime, TimeUnit.MILLISECONDS) + .setAttribute(SemanticAttributes.MESSAGING_OPERATION, operation); afterStart(spanBuilder, destination, message); return parentContext.with(spanBuilder.startSpan()); } public Context startProducerSpan(MessageDestination destination, Message message) { - SpanBuilder span = tracer.spanBuilder(spanName(destination, "send")).setSpanKind(PRODUCER); + Context parentContext = Context.current(); + SpanBuilder span = spanBuilder(parentContext, spanName(destination, "send"), PRODUCER); afterStart(span, destination, message); - return Context.current().with(span.startSpan()); + return parentContext.with(span.startSpan()); } public Scope startProducerScope(Context context, Message message) { diff --git a/instrumentation/kafka-clients-0.11/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/kafkaclients/KafkaConsumerTracer.java b/instrumentation/kafka-clients-0.11/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/kafkaclients/KafkaConsumerTracer.java index 45dfe96a5d..afe61a3af8 100644 --- a/instrumentation/kafka-clients-0.11/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/kafkaclients/KafkaConsumerTracer.java +++ b/instrumentation/kafka-clients-0.11/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/kafkaclients/KafkaConsumerTracer.java @@ -28,10 +28,7 @@ public class KafkaConsumerTracer extends BaseTracer { Context parentContext = extractParent(record); Span span = - tracer - .spanBuilder(spanNameOnConsume(record)) - .setSpanKind(CONSUMER) - .setParent(parentContext) + spanBuilder(parentContext, spanNameOnConsume(record), CONSUMER) .setStartTimestamp(now, TimeUnit.MILLISECONDS) .setAttribute(SemanticAttributes.MESSAGING_SYSTEM, "kafka") .setAttribute(SemanticAttributes.MESSAGING_DESTINATION, record.topic()) diff --git a/instrumentation/kafka-clients-0.11/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/kafkaclients/KafkaProducerTracer.java b/instrumentation/kafka-clients-0.11/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/kafkaclients/KafkaProducerTracer.java index 27d481f1df..c5e6e90448 100644 --- a/instrumentation/kafka-clients-0.11/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/kafkaclients/KafkaProducerTracer.java +++ b/instrumentation/kafka-clients-0.11/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/kafkaclients/KafkaProducerTracer.java @@ -23,7 +23,7 @@ public class KafkaProducerTracer extends BaseTracer { } public Context startProducerSpan(Context parentContext, ProducerRecord record) { - SpanBuilder span = spanBuilder(spanNameOnProduce(record), PRODUCER).setParent(parentContext); + SpanBuilder span = spanBuilder(parentContext, spanNameOnProduce(record), PRODUCER); onProduce(span, record); return parentContext.with(span.startSpan()); } diff --git a/instrumentation/kafka-streams-0.11/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/kafkastreams/KafkaStreamsTracer.java b/instrumentation/kafka-streams-0.11/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/kafkastreams/KafkaStreamsTracer.java index 8186d865fc..7db9446cfa 100644 --- a/instrumentation/kafka-streams-0.11/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/kafkastreams/KafkaStreamsTracer.java +++ b/instrumentation/kafka-streams-0.11/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/kafkastreams/KafkaStreamsTracer.java @@ -5,10 +5,10 @@ package io.opentelemetry.javaagent.instrumentation.kafkastreams; +import static io.opentelemetry.api.trace.SpanKind.CONSUMER; import static io.opentelemetry.javaagent.instrumentation.kafkastreams.TextMapExtractAdapter.GETTER; import io.opentelemetry.api.trace.Span; -import io.opentelemetry.api.trace.SpanKind; import io.opentelemetry.context.Context; import io.opentelemetry.instrumentation.api.config.Config; import io.opentelemetry.instrumentation.api.tracer.BaseTracer; @@ -29,10 +29,7 @@ public class KafkaStreamsTracer extends BaseTracer { public Context startSpan(StampedRecord record) { Context parentContext = extract(record.value.headers(), GETTER); Span span = - tracer - .spanBuilder(spanNameForConsume(record)) - .setSpanKind(SpanKind.CONSUMER) - .setParent(parentContext) + spanBuilder(parentContext, spanNameForConsume(record), CONSUMER) .setAttribute(SemanticAttributes.MESSAGING_SYSTEM, "kafka") .setAttribute(SemanticAttributes.MESSAGING_DESTINATION, record.topic()) .setAttribute(SemanticAttributes.MESSAGING_DESTINATION_KIND, "topic") diff --git a/instrumentation/netty/netty-3.8/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/netty/v3_8/client/NettyHttpClientTracer.java b/instrumentation/netty/netty-3.8/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/netty/v3_8/client/NettyHttpClientTracer.java index be070b1de7..90913179f2 100644 --- a/instrumentation/netty/netty-3.8/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/netty/v3_8/client/NettyHttpClientTracer.java +++ b/instrumentation/netty/netty-3.8/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/netty/v3_8/client/NettyHttpClientTracer.java @@ -32,12 +32,7 @@ public class NettyHttpClientTracer } public Context startSpan(Context parentContext, ChannelHandlerContext ctx, HttpRequest request) { - Span span = - tracer - .spanBuilder(spanNameForRequest(request)) - .setSpanKind(CLIENT) - .setParent(parentContext) - .startSpan(); + Span span = spanBuilder(parentContext, spanNameForRequest(request), CLIENT).startSpan(); onRequest(span, request); NetPeerUtils.INSTANCE.setNetPeer(span, (InetSocketAddress) ctx.getChannel().getRemoteAddress()); diff --git a/instrumentation/netty/netty-4.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/netty/v4_0/client/NettyHttpClientTracer.java b/instrumentation/netty/netty-4.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/netty/v4_0/client/NettyHttpClientTracer.java index dac76d31be..a163f59feb 100644 --- a/instrumentation/netty/netty-4.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/netty/v4_0/client/NettyHttpClientTracer.java +++ b/instrumentation/netty/netty-4.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/netty/v4_0/client/NettyHttpClientTracer.java @@ -32,12 +32,7 @@ public class NettyHttpClientTracer } public Context startSpan(Context parentContext, ChannelHandlerContext ctx, HttpRequest request) { - Span span = - tracer - .spanBuilder(spanNameForRequest(request)) - .setSpanKind(CLIENT) - .setParent(parentContext) - .startSpan(); + Span span = spanBuilder(parentContext, spanNameForRequest(request), CLIENT).startSpan(); onRequest(span, request); NetPeerUtils.INSTANCE.setNetPeer(span, (InetSocketAddress) ctx.channel().remoteAddress()); diff --git a/instrumentation/netty/netty-4.1/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/netty/v4_1/client/NettyHttpClientTracer.java b/instrumentation/netty/netty-4.1/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/netty/v4_1/client/NettyHttpClientTracer.java index c63bee917d..63244cf14c 100644 --- a/instrumentation/netty/netty-4.1/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/netty/v4_1/client/NettyHttpClientTracer.java +++ b/instrumentation/netty/netty-4.1/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/netty/v4_1/client/NettyHttpClientTracer.java @@ -32,12 +32,7 @@ public class NettyHttpClientTracer } public Context startSpan(Context parentContext, ChannelHandlerContext ctx, HttpRequest request) { - Span span = - tracer - .spanBuilder(spanNameForRequest(request)) - .setSpanKind(CLIENT) - .setParent(parentContext) - .startSpan(); + Span span = spanBuilder(parentContext, spanNameForRequest(request), CLIENT).startSpan(); onRequest(span, request); NetPeerUtils.INSTANCE.setNetPeer(span, (InetSocketAddress) ctx.channel().remoteAddress()); diff --git a/instrumentation/opentelemetry-annotations-1.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/otelannotations/WithSpanTracer.java b/instrumentation/opentelemetry-annotations-1.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/otelannotations/WithSpanTracer.java index ab26502677..6f56531cab 100644 --- a/instrumentation/opentelemetry-annotations-1.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/otelannotations/WithSpanTracer.java +++ b/instrumentation/opentelemetry-annotations-1.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/otelannotations/WithSpanTracer.java @@ -24,18 +24,18 @@ public class WithSpanTracer extends BaseTracer { private static final Logger log = LoggerFactory.getLogger(WithSpanTracer.class); public Context startSpan( - Context context, WithSpan applicationAnnotation, Method method, SpanKind kind) { + Context parentContext, WithSpan applicationAnnotation, Method method, SpanKind kind) { Span span = - spanBuilder(spanNameForMethodWithAnnotation(applicationAnnotation, method), kind) - .setParent(context) + spanBuilder( + parentContext, spanNameForMethodWithAnnotation(applicationAnnotation, method), kind) .startSpan(); if (kind == SpanKind.SERVER) { - return withServerSpan(context, span); + return withServerSpan(parentContext, span); } if (kind == SpanKind.CLIENT) { - return withClientSpan(context, span); + return withClientSpan(parentContext, span); } - return context.with(span); + return parentContext.with(span); } /** diff --git a/instrumentation/rabbitmq-2.7/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/rabbitmq/RabbitTracer.java b/instrumentation/rabbitmq-2.7/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/rabbitmq/RabbitTracer.java index 481ee4aa3d..57752f374a 100644 --- a/instrumentation/rabbitmq-2.7/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/rabbitmq/RabbitTracer.java +++ b/instrumentation/rabbitmq-2.7/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/rabbitmq/RabbitTracer.java @@ -40,23 +40,23 @@ public class RabbitTracer extends BaseTracer { } public Context startSpan(String method, Connection connection) { + Context parentContext = Context.current(); SpanKind kind = method.equals("Channel.basicPublish") ? PRODUCER : CLIENT; SpanBuilder span = - spanBuilder(method, kind) + spanBuilder(parentContext, method, kind) .setAttribute(SemanticAttributes.MESSAGING_SYSTEM, "rabbitmq") .setAttribute(SemanticAttributes.MESSAGING_DESTINATION_KIND, "queue"); NetPeerUtils.INSTANCE.setNetPeer(span, connection.getAddress(), connection.getPort()); - return Context.current().with(span.startSpan()); + return parentContext.with(span.startSpan()); } public Context startGetSpan( String queue, long startTime, GetResponse response, Connection connection) { + Context parentContext = Context.current(); SpanBuilder spanBuilder = - tracer - .spanBuilder(spanNameOnGet(queue)) - .setSpanKind(CLIENT) + spanBuilder(parentContext, spanNameOnGet(queue), CLIENT) .setAttribute(SemanticAttributes.MESSAGING_SYSTEM, "rabbitmq") .setAttribute(SemanticAttributes.MESSAGING_DESTINATION_KIND, "queue") .setAttribute(SemanticAttributes.MESSAGING_OPERATION, "receive") @@ -76,7 +76,8 @@ public class RabbitTracer extends BaseTracer { NetPeerUtils.INSTANCE.setNetPeer(spanBuilder, connection.getAddress(), connection.getPort()); onGet(spanBuilder, queue); - return Context.current().with(spanBuilder.startSpan()); + // TODO: withClientSpan()? + return parentContext.with(spanBuilder.startSpan()); } public Context startDeliverySpan( @@ -86,10 +87,7 @@ public class RabbitTracer extends BaseTracer { long startTimeMillis = System.currentTimeMillis(); Span span = - tracer - .spanBuilder(spanNameOnDeliver(queue)) - .setSpanKind(CONSUMER) - .setParent(parentContext) + spanBuilder(parentContext, spanNameOnDeliver(queue), CONSUMER) .setStartTimestamp(startTimeMillis, TimeUnit.MILLISECONDS) .setAttribute(SemanticAttributes.MESSAGING_SYSTEM, "rabbitmq") .setAttribute(SemanticAttributes.MESSAGING_DESTINATION_KIND, "queue") diff --git a/instrumentation/rmi/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/rmi/client/RmiClientTracer.java b/instrumentation/rmi/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/rmi/client/RmiClientTracer.java index 5876a52a8c..3b40d5f9a9 100644 --- a/instrumentation/rmi/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/rmi/client/RmiClientTracer.java +++ b/instrumentation/rmi/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/rmi/client/RmiClientTracer.java @@ -21,17 +21,18 @@ public class RmiClientTracer extends RpcClientTracer { } public Context startSpan(Method method) { + Context parentContext = Context.current(); String serviceName = method.getDeclaringClass().getName(); String methodName = method.getName(); Span span = - spanBuilder(serviceName + "/" + methodName, CLIENT) + spanBuilder(parentContext, serviceName + "/" + methodName, CLIENT) .setAttribute(SemanticAttributes.RPC_SYSTEM, getRpcSystem()) .setAttribute(SemanticAttributes.RPC_SERVICE, serviceName) .setAttribute(SemanticAttributes.RPC_METHOD, methodName) .startSpan(); - return Context.current().with(span); + return parentContext.with(span); } @Override diff --git a/instrumentation/rmi/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/rmi/server/RmiServerTracer.java b/instrumentation/rmi/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/rmi/server/RmiServerTracer.java index 44f44d0c6f..a5ab4ef264 100644 --- a/instrumentation/rmi/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/rmi/server/RmiServerTracer.java +++ b/instrumentation/rmi/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/rmi/server/RmiServerTracer.java @@ -26,10 +26,7 @@ public class RmiServerTracer extends RpcServerTracer { String methodName = method.getName(); SpanBuilder spanBuilder = - tracer - .spanBuilder(serviceName + "/" + methodName) - .setSpanKind(SERVER) - .setParent(parentContext) + spanBuilder(parentContext, serviceName + "/" + methodName, SERVER) .setAttribute(SemanticAttributes.RPC_SYSTEM, "java_rmi") .setAttribute(SemanticAttributes.RPC_SERVICE, serviceName) .setAttribute(SemanticAttributes.RPC_METHOD, methodName); diff --git a/instrumentation/spring/spring-batch-3.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/spring/batch/chunk/ChunkExecutionTracer.java b/instrumentation/spring/spring-batch-3.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/spring/batch/chunk/ChunkExecutionTracer.java index fbf1bd1296..650bb4feac 100644 --- a/instrumentation/spring/spring-batch-3.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/spring/batch/chunk/ChunkExecutionTracer.java +++ b/instrumentation/spring/spring-batch-3.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/spring/batch/chunk/ChunkExecutionTracer.java @@ -23,21 +23,24 @@ public class ChunkExecutionTracer extends BaseTracer { } public Context startSpan(ChunkContext chunkContext) { - String jobName = chunkContext.getStepContext().getJobName(); - String stepName = chunkContext.getStepContext().getStepName(); - SpanBuilder spanBuilder = - tracer.spanBuilder("BatchJob " + jobName + "." + stepName + ".Chunk").setSpanKind(INTERNAL); + Context parentContext = Context.current(); + SpanBuilder spanBuilder = spanBuilder(parentContext, spanName(chunkContext), INTERNAL); if (shouldCreateRootSpanForChunk()) { - linkParentSpan(spanBuilder); + linkParentSpan(spanBuilder, parentContext); } - Span span = spanBuilder.startSpan(); - return Context.current().with(span); + return parentContext.with(spanBuilder.startSpan()); } - private void linkParentSpan(SpanBuilder spanBuilder) { + private String spanName(ChunkContext chunkContext) { + String jobName = chunkContext.getStepContext().getJobName(); + String stepName = chunkContext.getStepContext().getStepName(); + return "BatchJob " + jobName + "." + stepName + ".Chunk"; + } + + private void linkParentSpan(SpanBuilder spanBuilder, Context parentContext) { spanBuilder.setNoParent(); - SpanContext parentSpanContext = Span.current().getSpanContext(); + SpanContext parentSpanContext = Span.fromContext(parentContext).getSpanContext(); if (parentSpanContext.isValid()) { spanBuilder.addLink(parentSpanContext); } diff --git a/instrumentation/spring/spring-batch-3.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/spring/batch/job/JobExecutionTracer.java b/instrumentation/spring/spring-batch-3.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/spring/batch/job/JobExecutionTracer.java index 3d1f489bb9..18d8297164 100644 --- a/instrumentation/spring/spring-batch-3.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/spring/batch/job/JobExecutionTracer.java +++ b/instrumentation/spring/spring-batch-3.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/spring/batch/job/JobExecutionTracer.java @@ -5,8 +5,6 @@ package io.opentelemetry.javaagent.instrumentation.spring.batch.job; -import static io.opentelemetry.api.trace.SpanKind.INTERNAL; - import io.opentelemetry.context.Context; import io.opentelemetry.instrumentation.api.tracer.BaseTracer; import org.springframework.batch.core.JobExecution; @@ -20,7 +18,7 @@ public class JobExecutionTracer extends BaseTracer { public Context startSpan(JobExecution jobExecution) { String jobName = jobExecution.getJobInstance().getJobName(); - return startSpan("BatchJob " + jobName, INTERNAL); + return startSpan("BatchJob " + jobName); } @Override diff --git a/instrumentation/spring/spring-batch-3.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/spring/batch/step/StepExecutionTracer.java b/instrumentation/spring/spring-batch-3.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/spring/batch/step/StepExecutionTracer.java index 8ba9ad2499..88f3fc34fd 100644 --- a/instrumentation/spring/spring-batch-3.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/spring/batch/step/StepExecutionTracer.java +++ b/instrumentation/spring/spring-batch-3.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/spring/batch/step/StepExecutionTracer.java @@ -5,8 +5,6 @@ package io.opentelemetry.javaagent.instrumentation.spring.batch.step; -import static io.opentelemetry.api.trace.SpanKind.INTERNAL; - import io.opentelemetry.context.Context; import io.opentelemetry.instrumentation.api.tracer.BaseTracer; import org.springframework.batch.core.StepExecution; @@ -21,7 +19,7 @@ public class StepExecutionTracer extends BaseTracer { public Context startSpan(StepExecution stepExecution) { String jobName = stepExecution.getJobExecution().getJobInstance().getJobName(); String stepName = stepExecution.getStepName(); - return startSpan("BatchJob " + jobName + "." + stepName, INTERNAL); + return startSpan("BatchJob " + jobName + "." + stepName); } @Override diff --git a/instrumentation/spring/spring-boot-autoconfigure/src/main/java/io/opentelemetry/instrumentation/spring/autoconfigure/aspects/WithSpanAspectTracer.java b/instrumentation/spring/spring-boot-autoconfigure/src/main/java/io/opentelemetry/instrumentation/spring/autoconfigure/aspects/WithSpanAspectTracer.java index c5bded7646..190c91bfc0 100644 --- a/instrumentation/spring/spring-boot-autoconfigure/src/main/java/io/opentelemetry/instrumentation/spring/autoconfigure/aspects/WithSpanAspectTracer.java +++ b/instrumentation/spring/spring-boot-autoconfigure/src/main/java/io/opentelemetry/instrumentation/spring/autoconfigure/aspects/WithSpanAspectTracer.java @@ -24,9 +24,7 @@ class WithSpanAspectTracer extends BaseTracer { Context startSpan(Context parentContext, WithSpan annotation, Method method) { Span span = - spanBuilder(spanName(annotation, method), annotation.kind()) - .setParent(parentContext) - .startSpan(); + spanBuilder(parentContext, spanName(annotation, method), annotation.kind()).startSpan(); switch (annotation.kind()) { case SERVER: return withServerSpan(parentContext, span); diff --git a/instrumentation/spring/spring-webflux-5.0/library/src/main/java/io/opentelemetry/instrumentation/spring/webflux/client/SpringWebfluxHttpClientTracer.java b/instrumentation/spring/spring-webflux-5.0/library/src/main/java/io/opentelemetry/instrumentation/spring/webflux/client/SpringWebfluxHttpClientTracer.java index f71140430d..1314a79b38 100644 --- a/instrumentation/spring/spring-webflux-5.0/library/src/main/java/io/opentelemetry/instrumentation/spring/webflux/client/SpringWebfluxHttpClientTracer.java +++ b/instrumentation/spring/spring-webflux-5.0/library/src/main/java/io/opentelemetry/instrumentation/spring/webflux/client/SpringWebfluxHttpClientTracer.java @@ -8,7 +8,6 @@ package io.opentelemetry.instrumentation.spring.webflux.client; import static io.opentelemetry.instrumentation.spring.webflux.client.HttpHeadersInjectAdapter.SETTER; import io.opentelemetry.api.trace.Span; -import io.opentelemetry.api.trace.Tracer; import io.opentelemetry.context.Context; import io.opentelemetry.context.propagation.TextMapSetter; import io.opentelemetry.instrumentation.api.config.Config; @@ -85,10 +84,6 @@ public class SpringWebfluxHttpClientTracer return "io.opentelemetry.javaagent.spring-webflux-5.0"; } - public Tracer getTracer() { - return tracer; - } - // rawStatusCode() method was introduced in webflux 5.1 // prior to this method, the best we can get is HttpStatus enum, which only covers standard status // codes (see usage above) diff --git a/instrumentation/spring/spring-webmvc-3.1/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/springwebmvc/SpringWebMvcTracer.java b/instrumentation/spring/spring-webmvc-3.1/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/springwebmvc/SpringWebMvcTracer.java index 732966886b..7a7c53443e 100644 --- a/instrumentation/spring/spring-webmvc-3.1/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/springwebmvc/SpringWebMvcTracer.java +++ b/instrumentation/spring/spring-webmvc-3.1/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/springwebmvc/SpringWebMvcTracer.java @@ -5,9 +5,10 @@ package io.opentelemetry.javaagent.instrumentation.springwebmvc; +import static io.opentelemetry.api.trace.SpanKind.INTERNAL; + import io.opentelemetry.api.trace.Span; import io.opentelemetry.api.trace.SpanBuilder; -import io.opentelemetry.api.trace.SpanKind; import io.opentelemetry.context.Context; import io.opentelemetry.instrumentation.api.config.Config; import io.opentelemetry.instrumentation.api.servlet.ServletContextPath; @@ -36,13 +37,14 @@ public class SpringWebMvcTracer extends BaseTracer { } public Context startHandlerSpan(Context parentContext, Object handler) { - return startSpan(parentContext, spanNameOnHandle(handler), SpanKind.INTERNAL); + return startSpan(parentContext, spanNameOnHandle(handler), INTERNAL); } public Context startSpan(ModelAndView mv) { - SpanBuilder span = tracer.spanBuilder(spanNameOnRender(mv)); + Context parentContext = Context.current(); + SpanBuilder span = spanBuilder(parentContext, spanNameOnRender(mv), INTERNAL); onRender(span, mv); - return Context.current().with(span.startSpan()); + return parentContext.with(span.startSpan()); } public void onRequest(Context context, Span span, HttpServletRequest request) { diff --git a/instrumentation/spring/spring-ws-2.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/spring/ws/SpringWsTracer.java b/instrumentation/spring/spring-ws-2.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/spring/ws/SpringWsTracer.java index 9e686c93ee..81d1575abf 100644 --- a/instrumentation/spring/spring-ws-2.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/spring/ws/SpringWsTracer.java +++ b/instrumentation/spring/spring-ws-2.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/spring/ws/SpringWsTracer.java @@ -21,12 +21,13 @@ public class SpringWsTracer extends BaseTracer { } public Context startSpan(Method method) { + Context parentContext = Context.current(); Span span = - spanBuilder(spanNameForMethod(method), SpanKind.INTERNAL) + spanBuilder(parentContext, spanNameForMethod(method), SpanKind.INTERNAL) .setAttribute(SemanticAttributes.CODE_NAMESPACE, method.getDeclaringClass().getName()) .setAttribute(SemanticAttributes.CODE_FUNCTION, method.getName()) .startSpan(); - return Context.current().with(span); + return parentContext.with(span); } @Override diff --git a/instrumentation/struts-2.3/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/struts2/Struts2Tracer.java b/instrumentation/struts-2.3/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/struts2/Struts2Tracer.java index 5441b85763..cdc55d4c6a 100644 --- a/instrumentation/struts-2.3/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/struts2/Struts2Tracer.java +++ b/instrumentation/struts-2.3/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/struts2/Struts2Tracer.java @@ -5,6 +5,8 @@ package io.opentelemetry.javaagent.instrumentation.struts2; +import static io.opentelemetry.api.trace.SpanKind.INTERNAL; + import com.opensymphony.xwork2.ActionInvocation; import com.opensymphony.xwork2.ActionProxy; import io.opentelemetry.api.trace.Span; @@ -31,7 +33,7 @@ public class Struts2Tracer extends BaseTracer { String method = actionInvocation.getProxy().getMethod(); String spanName = spanNameForMethod(actionClass, method); - SpanBuilder strutsSpan = tracer.spanBuilder(spanName).setParent(parentContext); + SpanBuilder strutsSpan = spanBuilder(parentContext, spanName, INTERNAL); strutsSpan.setAttribute(SemanticAttributes.CODE_NAMESPACE, actionClass.getName()); if (method != null) { diff --git a/instrumentation/twilio-6.6/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/twilio/TwilioTracer.java b/instrumentation/twilio-6.6/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/twilio/TwilioTracer.java index 65e83ba8bd..8259496a44 100644 --- a/instrumentation/twilio-6.6/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/twilio/TwilioTracer.java +++ b/instrumentation/twilio-6.6/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/twilio/TwilioTracer.java @@ -38,12 +38,8 @@ public class TwilioTracer extends BaseTracer { } public Context startSpan(Context parentContext, Object serviceExecutor, String methodName) { - Span span = - tracer - .spanBuilder(spanNameOnServiceExecution(serviceExecutor, methodName)) - .setSpanKind(CLIENT) - .setParent(parentContext) - .startSpan(); + String spanName = spanNameOnServiceExecution(serviceExecutor, methodName); + Span span = spanBuilder(parentContext, spanName, CLIENT).startSpan(); return withClientSpan(parentContext, span); }