From 5a29bdbd525ac74626ff29a8f27b44ee5e16176a Mon Sep 17 00:00:00 2001 From: blakeli Date: Fri, 10 Apr 2026 10:39:58 -0400 Subject: [PATCH 1/2] refactor(o11y): remove @BetaApi and @InternalApi annotations from observability classes and make factory mutable --- .../google/api/gax/tracing/LoggingTracer.java | 4 ---- .../api/gax/tracing/LoggingTracerFactory.java | 2 -- .../tracing/OpenTelemetryMetricsFactory.java | 4 ---- .../tracing/OpenTelemetryTracingFactory.java | 4 ---- .../tracing/OpenTelemetryTracingTracer.java | 3 --- .../OpenTelemetryMetricsFactoryTest.java | 19 +++++++++---------- 6 files changed, 9 insertions(+), 27 deletions(-) diff --git a/sdk-platform-java/gax-java/gax/src/main/java/com/google/api/gax/tracing/LoggingTracer.java b/sdk-platform-java/gax-java/gax/src/main/java/com/google/api/gax/tracing/LoggingTracer.java index 552ad2659bc4..1f56ace89b45 100644 --- a/sdk-platform-java/gax-java/gax/src/main/java/com/google/api/gax/tracing/LoggingTracer.java +++ b/sdk-platform-java/gax-java/gax/src/main/java/com/google/api/gax/tracing/LoggingTracer.java @@ -30,8 +30,6 @@ package com.google.api.gax.tracing; -import com.google.api.core.BetaApi; -import com.google.api.core.InternalApi; import com.google.api.gax.logging.LoggerProvider; import com.google.api.gax.logging.LoggingUtils; import com.google.common.annotations.VisibleForTesting; @@ -44,8 +42,6 @@ * An {@link ApiTracer} that logs actionable errors using {@link LoggingUtils} when an RPC attempt * fails. */ -@BetaApi -@InternalApi class LoggingTracer extends BaseApiTracer { private static final LoggerProvider LOGGER_PROVIDER = LoggerProvider.forClazz(LoggingTracer.class); diff --git a/sdk-platform-java/gax-java/gax/src/main/java/com/google/api/gax/tracing/LoggingTracerFactory.java b/sdk-platform-java/gax-java/gax/src/main/java/com/google/api/gax/tracing/LoggingTracerFactory.java index 8f75cded244c..53e2c6c4572a 100644 --- a/sdk-platform-java/gax-java/gax/src/main/java/com/google/api/gax/tracing/LoggingTracerFactory.java +++ b/sdk-platform-java/gax-java/gax/src/main/java/com/google/api/gax/tracing/LoggingTracerFactory.java @@ -30,7 +30,6 @@ package com.google.api.gax.tracing; -import com.google.api.core.BetaApi; import com.google.api.core.InternalApi; import com.google.api.gax.logging.LoggingUtils; import com.google.common.annotations.VisibleForTesting; @@ -41,7 +40,6 @@ * managed automatically by the system, when {@link LoggingUtils#isLoggingEnabled()} returning * {@code true}. */ -@BetaApi @InternalApi public class LoggingTracerFactory implements ApiTracerFactory { private final ApiTracerContext apiTracerContext; diff --git a/sdk-platform-java/gax-java/gax/src/main/java/com/google/api/gax/tracing/OpenTelemetryMetricsFactory.java b/sdk-platform-java/gax-java/gax/src/main/java/com/google/api/gax/tracing/OpenTelemetryMetricsFactory.java index dceabeba2aaa..3d36d8714794 100644 --- a/sdk-platform-java/gax-java/gax/src/main/java/com/google/api/gax/tracing/OpenTelemetryMetricsFactory.java +++ b/sdk-platform-java/gax-java/gax/src/main/java/com/google/api/gax/tracing/OpenTelemetryMetricsFactory.java @@ -29,8 +29,6 @@ */ package com.google.api.gax.tracing; -import com.google.api.core.BetaApi; -import com.google.api.core.InternalApi; import io.opentelemetry.api.OpenTelemetry; /** @@ -38,8 +36,6 @@ * *

This class is expected to be initialized once during client initialization. */ -@BetaApi -@InternalApi public class OpenTelemetryMetricsFactory implements ApiTracerFactory { private ApiTracerContext clientLevelTracerContext; diff --git a/sdk-platform-java/gax-java/gax/src/main/java/com/google/api/gax/tracing/OpenTelemetryTracingFactory.java b/sdk-platform-java/gax-java/gax/src/main/java/com/google/api/gax/tracing/OpenTelemetryTracingFactory.java index ad148e5268aa..79dd094209e4 100644 --- a/sdk-platform-java/gax-java/gax/src/main/java/com/google/api/gax/tracing/OpenTelemetryTracingFactory.java +++ b/sdk-platform-java/gax-java/gax/src/main/java/com/google/api/gax/tracing/OpenTelemetryTracingFactory.java @@ -31,8 +31,6 @@ package com.google.api.gax.tracing; import com.google.api.client.util.Strings; -import com.google.api.core.BetaApi; -import com.google.api.core.InternalApi; import com.google.api.gax.rpc.LibraryMetadata; import com.google.common.annotations.VisibleForTesting; import io.opentelemetry.api.OpenTelemetry; @@ -46,8 +44,6 @@ * *

This class is expected to be initialized once during client initialization. */ -@BetaApi -@InternalApi public class OpenTelemetryTracingFactory implements ApiTracerFactory { private final Tracer tracer; private final OpenTelemetry openTelemetry; diff --git a/sdk-platform-java/gax-java/gax/src/main/java/com/google/api/gax/tracing/OpenTelemetryTracingTracer.java b/sdk-platform-java/gax-java/gax/src/main/java/com/google/api/gax/tracing/OpenTelemetryTracingTracer.java index 549b3b4ab7dc..af99ab2af7c8 100644 --- a/sdk-platform-java/gax-java/gax/src/main/java/com/google/api/gax/tracing/OpenTelemetryTracingTracer.java +++ b/sdk-platform-java/gax-java/gax/src/main/java/com/google/api/gax/tracing/OpenTelemetryTracingTracer.java @@ -31,7 +31,6 @@ package com.google.api.gax.tracing; import com.google.api.client.util.Strings; -import com.google.api.core.BetaApi; import com.google.api.core.InternalApi; import io.opentelemetry.api.trace.Span; import io.opentelemetry.api.trace.SpanBuilder; @@ -42,8 +41,6 @@ import java.util.concurrent.CancellationException; /** An implementation of {@link ApiTracer} that uses OpenTelemetry to record traces. */ -@BetaApi -@InternalApi class OpenTelemetryTracingTracer implements ApiTracer { static final String CONTENT_LENGTH_KEY = "Content-Length"; diff --git a/sdk-platform-java/gax-java/gax/src/test/java/com/google/api/gax/tracing/OpenTelemetryMetricsFactoryTest.java b/sdk-platform-java/gax-java/gax/src/test/java/com/google/api/gax/tracing/OpenTelemetryMetricsFactoryTest.java index e25b3d93f0af..7d81951aff8f 100644 --- a/sdk-platform-java/gax-java/gax/src/test/java/com/google/api/gax/tracing/OpenTelemetryMetricsFactoryTest.java +++ b/sdk-platform-java/gax-java/gax/src/test/java/com/google/api/gax/tracing/OpenTelemetryMetricsFactoryTest.java @@ -69,17 +69,16 @@ void newTracerWithSpanName_shouldCreateBaseTracer_ifMetricsRecorderIsNull() { @Test void newTracerWithApiTracerContext_shouldMergeApiTracerContext() { - ApiTracerContext clientLevelTracerContext = mock(ApiTracerContext.class, RETURNS_DEEP_STUBS); - ApiTracerContext methodLevelTracerContext = mock(ApiTracerContext.class); - when(clientLevelTracerContext.libraryMetadata().artifactName()).thenReturn("gax-java"); - when(clientLevelTracerContext.libraryMetadata().isEmpty()).thenReturn(false); - when(clientLevelTracerContext.merge(methodLevelTracerContext)) - .thenReturn(clientLevelTracerContext); - - tracerFactory.withContext(clientLevelTracerContext); - ApiTracer actual = tracerFactory.newTracer(mock(ApiTracer.class), methodLevelTracerContext); + LibraryMetadata metadata = + LibraryMetadata.newBuilder().setArtifactName("gax-java").setVersion("1.0").build(); + ApiTracerContext clientLevelTracerContext = + ApiTracerContext.newBuilder().setLibraryMetadata(metadata).build(); + ApiTracerContext methodLevelTracerContext = + ApiTracerContext.newBuilder().setLibraryMetadata(LibraryMetadata.empty()).build(); + + ApiTracerFactory factoryWithContext = tracerFactory.withContext(clientLevelTracerContext); + ApiTracer actual = factoryWithContext.newTracer(mock(ApiTracer.class), methodLevelTracerContext); - verify(clientLevelTracerContext).merge(methodLevelTracerContext); assertThat(actual).isInstanceOf(OpenTelemetryMetricsTracer.class); } From f7fa606d870b507f11aa1ec1c5afae5b9aab260a Mon Sep 17 00:00:00 2001 From: blakeli Date: Fri, 10 Apr 2026 10:44:22 -0400 Subject: [PATCH 2/2] test(o11y): revert OpenTelemetryMetricsFactoryTest to use mocks --- .../OpenTelemetryMetricsFactoryTest.java | 19 ++++++++++--------- 1 file changed, 10 insertions(+), 9 deletions(-) diff --git a/sdk-platform-java/gax-java/gax/src/test/java/com/google/api/gax/tracing/OpenTelemetryMetricsFactoryTest.java b/sdk-platform-java/gax-java/gax/src/test/java/com/google/api/gax/tracing/OpenTelemetryMetricsFactoryTest.java index 7d81951aff8f..e25b3d93f0af 100644 --- a/sdk-platform-java/gax-java/gax/src/test/java/com/google/api/gax/tracing/OpenTelemetryMetricsFactoryTest.java +++ b/sdk-platform-java/gax-java/gax/src/test/java/com/google/api/gax/tracing/OpenTelemetryMetricsFactoryTest.java @@ -69,16 +69,17 @@ void newTracerWithSpanName_shouldCreateBaseTracer_ifMetricsRecorderIsNull() { @Test void newTracerWithApiTracerContext_shouldMergeApiTracerContext() { - LibraryMetadata metadata = - LibraryMetadata.newBuilder().setArtifactName("gax-java").setVersion("1.0").build(); - ApiTracerContext clientLevelTracerContext = - ApiTracerContext.newBuilder().setLibraryMetadata(metadata).build(); - ApiTracerContext methodLevelTracerContext = - ApiTracerContext.newBuilder().setLibraryMetadata(LibraryMetadata.empty()).build(); - - ApiTracerFactory factoryWithContext = tracerFactory.withContext(clientLevelTracerContext); - ApiTracer actual = factoryWithContext.newTracer(mock(ApiTracer.class), methodLevelTracerContext); + ApiTracerContext clientLevelTracerContext = mock(ApiTracerContext.class, RETURNS_DEEP_STUBS); + ApiTracerContext methodLevelTracerContext = mock(ApiTracerContext.class); + when(clientLevelTracerContext.libraryMetadata().artifactName()).thenReturn("gax-java"); + when(clientLevelTracerContext.libraryMetadata().isEmpty()).thenReturn(false); + when(clientLevelTracerContext.merge(methodLevelTracerContext)) + .thenReturn(clientLevelTracerContext); + + tracerFactory.withContext(clientLevelTracerContext); + ApiTracer actual = tracerFactory.newTracer(mock(ApiTracer.class), methodLevelTracerContext); + verify(clientLevelTracerContext).merge(methodLevelTracerContext); assertThat(actual).isInstanceOf(OpenTelemetryMetricsTracer.class); }