diff --git a/sdk/core/azure-core-amqp/src/main/java/com/azure/core/amqp/implementation/TracerProvider.java b/sdk/core/azure-core-amqp/src/main/java/com/azure/core/amqp/implementation/TracerProvider.java index bd651c4c8aa23..5ae3615521fb0 100644 --- a/sdk/core/azure-core-amqp/src/main/java/com/azure/core/amqp/implementation/TracerProvider.java +++ b/sdk/core/azure-core-amqp/src/main/java/com/azure/core/amqp/implementation/TracerProvider.java @@ -113,11 +113,11 @@ public Context extractContext(String diagnosticId, Context context) { * * @param context Additional metadata containing the span name for creating the span builer. */ - public Context getSpanBuilder(Context context) { + public Context getSharedSpanBuilder(Context context) { Context local = Objects.requireNonNull(context, "'context' cannot be null."); String spanName = getSpanName(ProcessKind.SEND); for (Tracer tracer : tracers) { - local = tracer.getSpanBuilder(spanName, local); + local = tracer.getSharedSpanBuilder(spanName, local); } return local; } diff --git a/sdk/core/azure-core-amqp/src/test/java/com/azure/core/amqp/implementation/TracerProviderTest.java b/sdk/core/azure-core-amqp/src/test/java/com/azure/core/amqp/implementation/TracerProviderTest.java index e0b4235892782..e902739e47a5c 100644 --- a/sdk/core/azure-core-amqp/src/test/java/com/azure/core/amqp/implementation/TracerProviderTest.java +++ b/sdk/core/azure-core-amqp/src/test/java/com/azure/core/amqp/implementation/TracerProviderTest.java @@ -24,6 +24,7 @@ import static org.junit.jupiter.api.Assertions.assertThrows; import static org.mockito.ArgumentMatchers.any; +import static org.mockito.ArgumentMatchers.anyString; import static org.mockito.ArgumentMatchers.eq; import static org.mockito.ArgumentMatchers.isNull; import static org.mockito.Mockito.never; @@ -194,4 +195,40 @@ public void addSpanLinks() { // Act assertThrows(NullPointerException.class, () -> tracerProvider.addSpanLinks(null)); } + + @Test + public void getSpanBuilderReturnsUpdatedContext() { + // Arrange + final String spanBuilderKey = "spanBuilder-key"; + final String spanBuilderValue = "spanBuilder-value"; + + final String spanBuilderKey1 = "spanBuilder-key1"; + final String spanBuilderValue1 = "spanBuilder-value1"; + final Context startingContext = Context.NONE; + + when(tracer.getSharedSpanBuilder(anyString(), any())).thenAnswer( + invocation -> { + Context passed = invocation.getArgument(1, Context.class); + return passed.addData(spanBuilderKey, spanBuilderValue); + } + ); + when(tracer2.getSharedSpanBuilder(anyString(), any())).thenAnswer( + invocation -> { + Context passed = invocation.getArgument(1, Context.class); + return passed.addData(spanBuilderKey1, spanBuilderValue1); + } + ); + + // Act + final Context updatedContext = tracerProvider.getSharedSpanBuilder(startingContext); + + // Assert + final Optional spanBuilderData = updatedContext.getData(spanBuilderKey); + Assertions.assertTrue(spanBuilderData.isPresent()); + Assertions.assertEquals(spanBuilderValue, spanBuilderData.get()); + + final Optional spanBuilderData1 = updatedContext.getData(spanBuilderKey1); + Assertions.assertTrue(spanBuilderData1.isPresent()); + Assertions.assertEquals(spanBuilderValue1, spanBuilderData1.get()); + } } diff --git a/sdk/core/azure-core-tracing-opencensus/src/main/java/com/azure/core/tracing/opencensus/OpenCensusTracer.java b/sdk/core/azure-core-tracing-opencensus/src/main/java/com/azure/core/tracing/opencensus/OpenCensusTracer.java index 055406152644a..f237190e0d4d0 100644 --- a/sdk/core/azure-core-tracing-opencensus/src/main/java/com/azure/core/tracing/opencensus/OpenCensusTracer.java +++ b/sdk/core/azure-core-tracing-opencensus/src/main/java/com/azure/core/tracing/opencensus/OpenCensusTracer.java @@ -181,6 +181,12 @@ public Context extractContext(String diagnosticId, Context context) { return AmqpPropagationFormatUtil.extractContext(diagnosticId, context); } + @Override + public Context getSharedSpanBuilder(String spanName, Context context) { + return Context.NONE; + // Remove OpenCensus support for tracing in https://github.com/Azure/azure-sdk-for-java/issues/6781 + } + /** * Starts a new child {@link Span} with parent being the remote and uses the {@link Span} is in the current Context, * to return an object that represents that scope. diff --git a/sdk/core/azure-core-tracing-opentelemetry/src/main/java/com/azure/core/tracing/opentelemetry/OpenTelemetryTracer.java b/sdk/core/azure-core-tracing-opentelemetry/src/main/java/com/azure/core/tracing/opentelemetry/OpenTelemetryTracer.java index 55acf5cc7298c..c4c98d4c19aff 100644 --- a/sdk/core/azure-core-tracing-opentelemetry/src/main/java/com/azure/core/tracing/opentelemetry/OpenTelemetryTracer.java +++ b/sdk/core/azure-core-tracing-opentelemetry/src/main/java/com/azure/core/tracing/opentelemetry/OpenTelemetryTracer.java @@ -46,7 +46,7 @@ public Context start(String spanName, Context context) { Objects.requireNonNull(spanName, "'spanName' cannot be null."); Objects.requireNonNull(context, "'context' cannot be null."); - Builder spanBuilder = getParentSpanBuilder(spanName, context); + Builder spanBuilder = getSpanBuilder(spanName, context); Span span = spanBuilder.startSpan(); return context.addData(PARENT_SPAN_KEY, span); @@ -78,7 +78,7 @@ public Context start(String spanName, Context context, ProcessKind processKind) } return context.addData(PARENT_SPAN_KEY, span); case MESSAGE: - spanBuilder = getParentSpanBuilder(spanName, context); + spanBuilder = getSpanBuilder(spanName, context); span = spanBuilder.startSpan(); // Add diagnostic Id and trace-headers to Context context = setContextData(span); @@ -177,8 +177,8 @@ public Context extractContext(String diagnosticId, Context context) { } @Override - public Context getSpanBuilder(String spanName, Context context) { - return context.addData(SPAN_BUILDER_KEY, getParentSpanBuilder(spanName, context)); + public Context getSharedSpanBuilder(String spanName, Context context) { + return context.addData(SPAN_BUILDER_KEY, getSpanBuilder(spanName, context)); } /** @@ -197,7 +197,7 @@ private Context startScopedSpan(String spanName, Context context) { if (spanContext != null) { span = startSpanWithRemoteParent(spanName, spanContext); } else { - Builder spanBuilder = getParentSpanBuilder(spanName, context); + Builder spanBuilder = getSpanBuilder(spanName, context); span = spanBuilder.setSpanKind(Span.Kind.SERVER).startSpan(); } return context.addData(PARENT_SPAN_KEY, span).addData("scope", TRACER.withSpan(span)); @@ -274,7 +274,7 @@ private static String parseComponentValue(String spanName) { * @param context The context containing the span and the span name. * @return A {@code Span.Builder} to create and start a new {@code Span}. */ - private Builder getParentSpanBuilder(String spanName, Context context) { + private Builder getSpanBuilder(String spanName, Context context) { Span parentSpan = getOrDefault(context, PARENT_SPAN_KEY, null, Span.class); String spanNameKey = getOrDefault(context, USER_SPAN_NAME_KEY, null, String.class); diff --git a/sdk/core/azure-core-tracing-opentelemetry/src/test/java/com/azure/core/tracing/opentelemetry/OpenTelemetryTracerTest.java b/sdk/core/azure-core-tracing-opentelemetry/src/test/java/com/azure/core/tracing/opentelemetry/OpenTelemetryTracerTest.java index 7a4699f399aec..7ea88d54de9fe 100644 --- a/sdk/core/azure-core-tracing-opentelemetry/src/test/java/com/azure/core/tracing/opentelemetry/OpenTelemetryTracerTest.java +++ b/sdk/core/azure-core-tracing-opentelemetry/src/test/java/com/azure/core/tracing/opentelemetry/OpenTelemetryTracerTest.java @@ -183,7 +183,7 @@ public void startSpanProcessKindProcess() { @Test public void getSpanBuilderTest() { // Act - final Context updatedContext = openTelemetryTracer.getSpanBuilder(METHOD_NAME, Context.NONE); + final Context updatedContext = openTelemetryTracer.getSharedSpanBuilder(METHOD_NAME, Context.NONE); assertTrue(updatedContext.getData(SPAN_BUILDER_KEY).isPresent()); } diff --git a/sdk/core/azure-core/src/main/java/com/azure/core/util/tracing/Tracer.java b/sdk/core/azure-core/src/main/java/com/azure/core/util/tracing/Tracer.java index 2090b8307cec5..c6d052b5dc321 100644 --- a/sdk/core/azure-core/src/main/java/com/azure/core/util/tracing/Tracer.java +++ b/sdk/core/azure-core/src/main/java/com/azure/core/util/tracing/Tracer.java @@ -211,7 +211,7 @@ public interface Tracer { *

Code samples

* *

Returns a builder with the provided span name.

- * {@codesnippet com.azure.core.util.tracing.getSpanBuilder#string-context} + * {@codesnippet com.azure.core.util.tracing.getSharedSpanBuilder#string-context} * * @param spanName Name to give the span for the created builder. * @param context Additional metadata that is passed through the call stack. @@ -219,5 +219,5 @@ public interface Tracer { * @return The updated {@link Context} object containing the span builder. * @throws NullPointerException if {@code context} or {@code spanName} is {@code null}. */ - Context getSpanBuilder(String spanName, Context context); + Context getSharedSpanBuilder(String spanName, Context context); } diff --git a/sdk/core/azure-core/src/samples/java/com/azure/core/util/tracing/TracerJavaDocCodeSnippets.java b/sdk/core/azure-core/src/samples/java/com/azure/core/util/tracing/TracerJavaDocCodeSnippets.java index bc99564e894a9..6710fe08ab506 100644 --- a/sdk/core/azure-core/src/samples/java/com/azure/core/util/tracing/TracerJavaDocCodeSnippets.java +++ b/sdk/core/azure-core/src/samples/java/com/azure/core/util/tracing/TracerJavaDocCodeSnippets.java @@ -122,13 +122,13 @@ public void extractContext() { } /** - * Code snippet for {@link Tracer#getSpanBuilder(String, Context)} + * Code snippet for {@link Tracer#getSharedSpanBuilder(String, Context)} */ - public void getSpanBuilder() { + public void getSharedSpanBuilder() { // BEGIN: com.azure.core.util.tracing.getSpanBuilder#string-context // Returns a span builder with the provided name String methodName = "message-span"; - Context spanContext = tracer.getSpanBuilder(methodName, Context.NONE); + Context spanContext = tracer.getSharedSpanBuilder(methodName, Context.NONE); System.out.printf("Span context of the current tracing span: %s%n", spanContext.getData(SPAN_BUILDER_KEY).get()); // END: com.azure.core.util.tracing.getSpanBuilder#string-context } @@ -176,7 +176,7 @@ public Context extractContext(String diagnosticId, Context context) { } @Override - public Context getSpanBuilder(String spanName, Context context) { return null; + public Context getSharedSpanBuilder(String spanName, Context context) { return null; } } } diff --git a/sdk/eventhubs/azure-messaging-eventhubs/src/main/java/com/azure/messaging/eventhubs/EventHubProducerAsyncClient.java b/sdk/eventhubs/azure-messaging-eventhubs/src/main/java/com/azure/messaging/eventhubs/EventHubProducerAsyncClient.java index 967209676adc3..e07c9f4a1007a 100644 --- a/sdk/eventhubs/azure-messaging-eventhubs/src/main/java/com/azure/messaging/eventhubs/EventHubProducerAsyncClient.java +++ b/sdk/eventhubs/azure-messaging-eventhubs/src/main/java/com/azure/messaging/eventhubs/EventHubProducerAsyncClient.java @@ -396,7 +396,7 @@ public Mono send(EventDataBatch batch) { if (isFirst.getAndSet(false)) { parentContext.set(event.getContext()); // get shared span builder for all links - sharedContext.set(tracerProvider.getSpanBuilder(parentContext.get())); + sharedContext.set(tracerProvider.getSharedSpanBuilder(parentContext.get())); } Context sharedSpanBuilderContext = sharedContext.get(); tracerProvider.addSpanLinks(sharedSpanBuilderContext.addData(SPAN_CONTEXT_KEY, event.getContext())); diff --git a/sdk/eventhubs/azure-messaging-eventhubs/src/test/java/com/azure/messaging/eventhubs/EventHubProducerAsyncClientTest.java b/sdk/eventhubs/azure-messaging-eventhubs/src/test/java/com/azure/messaging/eventhubs/EventHubProducerAsyncClientTest.java index 9e508b54c780b..a997fcb211b6a 100644 --- a/sdk/eventhubs/azure-messaging-eventhubs/src/test/java/com/azure/messaging/eventhubs/EventHubProducerAsyncClientTest.java +++ b/sdk/eventhubs/azure-messaging-eventhubs/src/test/java/com/azure/messaging/eventhubs/EventHubProducerAsyncClientTest.java @@ -245,7 +245,7 @@ public void sendStartSpanSingleMessage() { } ); - when(tracer1.getSpanBuilder(eq("Azure.eventhubs.send"), any())).thenAnswer( + when(tracer1.getSharedSpanBuilder(eq("Azure.eventhubs.send"), any())).thenAnswer( invocation -> { Context passed = invocation.getArgument(1, Context.class); return passed.addData(SPAN_BUILDER_KEY, "value"); @@ -303,7 +303,7 @@ public void sendMessageRetrySpanTest() { } ); - when(tracer1.getSpanBuilder(eq("Azure.eventhubs.send"), any())).thenAnswer( + when(tracer1.getSharedSpanBuilder(eq("Azure.eventhubs.send"), any())).thenAnswer( invocation -> { Context passed = invocation.getArgument(1, Context.class); return passed.addData(SPAN_BUILDER_KEY, "value"); diff --git a/sdk/eventhubs/azure-messaging-eventhubs/src/test/java/com/azure/messaging/eventhubs/EventHubProducerClientTest.java b/sdk/eventhubs/azure-messaging-eventhubs/src/test/java/com/azure/messaging/eventhubs/EventHubProducerClientTest.java index 2484d32b170fd..6e38fdf46694d 100644 --- a/sdk/eventhubs/azure-messaging-eventhubs/src/test/java/com/azure/messaging/eventhubs/EventHubProducerClientTest.java +++ b/sdk/eventhubs/azure-messaging-eventhubs/src/test/java/com/azure/messaging/eventhubs/EventHubProducerClientTest.java @@ -169,7 +169,7 @@ public void sendStartSpanSingleMessage() { return passed.addData(PARENT_SPAN_KEY, "value").addData(DIAGNOSTIC_ID_KEY, "value2"); } ); - when(tracer1.getSpanBuilder(eq("Azure.eventhubs.send"), any())).thenAnswer( + when(tracer1.getSharedSpanBuilder(eq("Azure.eventhubs.send"), any())).thenAnswer( invocation -> { Context passed = invocation.getArgument(1, Context.class); return passed.addData(SPAN_BUILDER_KEY, "value"); @@ -217,7 +217,7 @@ public void sendMessageRetrySpanTest() { } ); - when(tracer1.getSpanBuilder(eq("Azure.eventhubs.send"), any())).thenAnswer( + when(tracer1.getSharedSpanBuilder(eq("Azure.eventhubs.send"), any())).thenAnswer( invocation -> { Context passed = invocation.getArgument(1, Context.class); return passed.addData(SPAN_BUILDER_KEY, "value");