From c126b3ff6f8e9031252644cb60643cdf783df06d Mon Sep 17 00:00:00 2001 From: Vindhya Ningegowda Date: Mon, 2 May 2022 11:52:37 -0700 Subject: [PATCH 1/3] make gcp-observability depend on grpc-census; update opencensus version --- build.gradle | 2 +- .../java/io/grpc/census/CensusTracingModule.java | 8 +++++--- .../test/java/io/grpc/census/CensusModulesTest.java | 13 ++++++++----- gcp-observability/build.gradle | 13 ++++++++++--- .../testing/integration/AbstractInteropTest.java | 6 +++--- 5 files changed, 27 insertions(+), 15 deletions(-) diff --git a/build.gradle b/build.gradle index f982f600bbe..0b5c484d063 100644 --- a/build.gradle +++ b/build.gradle @@ -60,7 +60,7 @@ subprojects { googleauthVersion = '1.4.0' protobufVersion = '3.19.2' protocVersion = protobufVersion - opencensusVersion = '0.28.0' + opencensusVersion = '0.31.0' autovalueVersion = '1.9' configureProtoCompilation = { diff --git a/census/src/main/java/io/grpc/census/CensusTracingModule.java b/census/src/main/java/io/grpc/census/CensusTracingModule.java index 5c635613f33..a54d1b2fab0 100644 --- a/census/src/main/java/io/grpc/census/CensusTracingModule.java +++ b/census/src/main/java/io/grpc/census/CensusTracingModule.java @@ -41,7 +41,6 @@ import io.opencensus.trace.Status; import io.opencensus.trace.Tracer; import io.opencensus.trace.propagation.BinaryFormat; -import io.opencensus.trace.unsafe.ContextUtils; import java.util.concurrent.atomic.AtomicIntegerFieldUpdater; import java.util.logging.Level; import java.util.logging.Logger; @@ -366,12 +365,13 @@ public void streamClosed(io.grpc.Status status) { span.end(createEndSpanOptions(status, isSampledToLocalTracing)); } + @SuppressWarnings("deprecation") @Override public Context filterContext(Context context) { // Access directly the unsafe trace API to create the new Context. This is a safe usage // because gRPC always creates a new Context for each of the server calls and does not // inherit from the parent Context. - return ContextUtils.withValue(context, span); + return io.opencensus.trace.unsafe.ContextUtils.withValue(context, span); } @Override @@ -404,6 +404,7 @@ public ServerStreamTracer newServerStreamTracer(String fullMethodName, Metadata @VisibleForTesting final class TracingClientInterceptor implements ClientInterceptor { + @SuppressWarnings("deprecation") @Override public ClientCall interceptCall( MethodDescriptor method, CallOptions callOptions, Channel next) { @@ -412,7 +413,8 @@ public ClientCall interceptCall( // as Tracer.getCurrentSpan() except when no value available when the return value is null // for the direct access and BlankSpan when Tracer API is used. final CallAttemptsTracerFactory tracerFactory = - newClientCallTracer(ContextUtils.getValue(Context.current()), method); + newClientCallTracer( + io.opencensus.trace.unsafe.ContextUtils.getValue(Context.current()), method); ClientCall call = next.newCall( method, diff --git a/census/src/test/java/io/grpc/census/CensusModulesTest.java b/census/src/test/java/io/grpc/census/CensusModulesTest.java index b710d1b4112..9382ab84c12 100644 --- a/census/src/test/java/io/grpc/census/CensusModulesTest.java +++ b/census/src/test/java/io/grpc/census/CensusModulesTest.java @@ -95,7 +95,6 @@ import io.opencensus.trace.Tracer; import io.opencensus.trace.propagation.BinaryFormat; import io.opencensus.trace.propagation.SpanContextParseException; -import io.opencensus.trace.unsafe.ContextUtils; import java.io.InputStream; import java.util.HashSet; import java.util.List; @@ -247,6 +246,7 @@ public void clientInterceptorCustomTag() { // Test that Census ClientInterceptors uses the TagContext and Span out of the current Context // to create the ClientCallTracer, and that it intercepts ClientCall.Listener.onClose() to call // ClientCallTracer.callEnded(). + @SuppressWarnings("deprecation") private void testClientInterceptors(boolean nonDefaultContext) { grpcServerRule.getServiceRegistry().addService( ServerServiceDefinition.builder("package1.service2").addMethod( @@ -284,7 +284,7 @@ public ClientCall interceptCall( .emptyBuilder() .putLocal(StatsTestUtils.EXTRA_TAG, TagValue.create("extra value")) .build()); - ctx = ContextUtils.withValue(ctx, fakeClientParentSpan); + ctx = io.opencensus.trace.unsafe.ContextUtils.withValue(ctx, fakeClientParentSpan); Context origCtx = ctx.attach(); try { call = interceptedChannel.newCall(method, CALL_OPTIONS); @@ -295,7 +295,8 @@ public ClientCall interceptCall( assertEquals( io.opencensus.tags.unsafe.ContextUtils.getValue(Context.ROOT), io.opencensus.tags.unsafe.ContextUtils.getValue(Context.current())); - assertEquals(ContextUtils.getValue(Context.current()), BlankSpan.INSTANCE); + assertEquals(io.opencensus.trace.unsafe.ContextUtils.getValue(Context.current()), + BlankSpan.INSTANCE); call = interceptedChannel.newCall(method, CALL_OPTIONS); } @@ -1035,6 +1036,7 @@ public void statsHeaderMalformed() { assertSame(tagger.empty(), headers.get(censusStats.statsHeader)); } + @SuppressWarnings("deprecation") @Test public void traceHeadersPropagateSpanContext() throws Exception { CallAttemptsTracerFactory callTracer = @@ -1062,7 +1064,7 @@ public void traceHeadersPropagateSpanContext() throws Exception { verify(spyServerSpanBuilder).setRecordEvents(eq(true)); Context filteredContext = serverTracer.filterContext(Context.ROOT); - assertSame(spyServerSpan, ContextUtils.getValue(filteredContext)); + assertSame(spyServerSpan, io.opencensus.trace.unsafe.ContextUtils.getValue(filteredContext)); } @Test @@ -1279,6 +1281,7 @@ private void subtestServerBasicStatsNoHeaders( } } + @SuppressWarnings("deprecation") @Test public void serverBasicTracingNoHeaders() { ServerStreamTracer.Factory tracerFactory = censusTracing.getServerTracerFactory(); @@ -1290,7 +1293,7 @@ public void serverBasicTracingNoHeaders() { verify(spyServerSpanBuilder).setRecordEvents(eq(true)); Context filteredContext = serverStreamTracer.filterContext(Context.ROOT); - assertSame(spyServerSpan, ContextUtils.getValue(filteredContext)); + assertSame(spyServerSpan, io.opencensus.trace.unsafe.ContextUtils.getValue(filteredContext)); serverStreamTracer.serverCallStarted( new CallInfo<>(method, Attributes.EMPTY, null)); diff --git a/gcp-observability/build.gradle b/gcp-observability/build.gradle index 5e81dd438d4..6bc659acca7 100644 --- a/gcp-observability/build.gradle +++ b/gcp-observability/build.gradle @@ -21,10 +21,10 @@ description = "gRPC: Google Cloud Platform Observability" dependencies { def cloudLoggingVersion = '3.6.1' + def opencensusVersion = '0.31.0' annotationProcessor libraries.autovalue api project(':grpc-api') - implementation project(':grpc-protobuf'), project(':grpc-stub'), project(':grpc-alts'), @@ -36,11 +36,18 @@ dependencies { ('com.google.auth:google-auth-library-credentials:1.4.0'), ('org.checkerframework:checker-qual:3.20.0'), ('com.google.auto.value:auto-value-annotations:1.9'), - ('com.google.http-client:google-http-client:1.41.0'), - ('com.google.http-client:google-http-client-gson:1.41.0'), + ('com.google.http-client:google-http-client:1.41.7'), + ('com.google.http-client:google-http-client-gson:1.41.7'), ('com.google.api.grpc:proto-google-common-protos:2.7.1'), ("com.google.cloud:google-cloud-logging:${cloudLoggingVersion}") + implementation project(':grpc-census'), + libraries.opencensus_contrib_grpc_metrics, + ("io.opencensus:opencensus-exporter-stats-stackdriver:${opencensusVersion}"), + ("io.opencensus:opencensus-exporter-trace-stackdriver:${opencensusVersion}") + + runtimeOnly libraries.opencensus_impl + testImplementation project(':grpc-testing'), project(':grpc-testing-proto'), project(':grpc-netty-shaded') diff --git a/interop-testing/src/main/java/io/grpc/testing/integration/AbstractInteropTest.java b/interop-testing/src/main/java/io/grpc/testing/integration/AbstractInteropTest.java index 8e107add3e3..7f6f5a6e90e 100644 --- a/interop-testing/src/main/java/io/grpc/testing/integration/AbstractInteropTest.java +++ b/interop-testing/src/main/java/io/grpc/testing/integration/AbstractInteropTest.java @@ -100,7 +100,6 @@ import io.opencensus.trace.Span; import io.opencensus.trace.SpanContext; import io.opencensus.trace.Tracing; -import io.opencensus.trace.unsafe.ContextUtils; import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; import java.io.IOException; @@ -1547,6 +1546,7 @@ public void customMetadata() throws Exception { Collections.singleton(streamingRequest), Collections.singleton(goldenStreamingResponse)); } + @SuppressWarnings("deprecation") @Test(timeout = 10000) public void censusContextsPropagated() { Assume.assumeTrue("Skip the test because server is not in the same process.", server != null); @@ -1561,7 +1561,7 @@ public void censusContextsPropagated() { .emptyBuilder() .putLocal(StatsTestUtils.EXTRA_TAG, TagValue.create("extra value")) .build()); - ctx = ContextUtils.withValue(ctx, clientParentSpan); + ctx = io.opencensus.trace.unsafe.ContextUtils.withValue(ctx, clientParentSpan); Context origCtx = ctx.attach(); try { blockingStub.unaryCall(SimpleRequest.getDefaultInstance()); @@ -1581,7 +1581,7 @@ public void censusContextsPropagated() { } assertTrue("tag not found", tagFound); - Span span = ContextUtils.getValue(serverCtx); + Span span = io.opencensus.trace.unsafe.ContextUtils.getValue(serverCtx); assertNotNull(span); SpanContext spanContext = span.getContext(); assertEquals(clientParentSpan.getContext().getTraceId(), spanContext.getTraceId()); From 5137aba206747bc998aabf209d247a6656006b23 Mon Sep 17 00:00:00 2001 From: Vindhya Ningegowda Date: Tue, 3 May 2022 11:19:57 -0700 Subject: [PATCH 2/3] addressed comments --- .../io/grpc/census/CensusTracingModule.java | 6 ++++++ gcp-observability/build.gradle | 17 ++++++++--------- 2 files changed, 14 insertions(+), 9 deletions(-) diff --git a/census/src/main/java/io/grpc/census/CensusTracingModule.java b/census/src/main/java/io/grpc/census/CensusTracingModule.java index a54d1b2fab0..b507db10c64 100644 --- a/census/src/main/java/io/grpc/census/CensusTracingModule.java +++ b/census/src/main/java/io/grpc/census/CensusTracingModule.java @@ -365,6 +365,11 @@ public void streamClosed(io.grpc.Status status) { span.end(createEndSpanOptions(status, isSampledToLocalTracing)); } + /* + TODO(dnvindhya): Replace deprecated ContextUtils usage with ContextHandleUtils to interact + with io.grpc.Context as described in {@link io.opencensus.trace.unsafeContextUtils} to remove + SuppressWarnings annotation. + */ @SuppressWarnings("deprecation") @Override public Context filterContext(Context context) { @@ -404,6 +409,7 @@ public ServerStreamTracer newServerStreamTracer(String fullMethodName, Metadata @VisibleForTesting final class TracingClientInterceptor implements ClientInterceptor { + @SuppressWarnings("deprecation") @Override public ClientCall interceptCall( diff --git a/gcp-observability/build.gradle b/gcp-observability/build.gradle index 6bc659acca7..46fc5b7cee2 100644 --- a/gcp-observability/build.gradle +++ b/gcp-observability/build.gradle @@ -21,30 +21,29 @@ description = "gRPC: Google Cloud Platform Observability" dependencies { def cloudLoggingVersion = '3.6.1' - def opencensusVersion = '0.31.0' + def opencensusExporterVersion = '0.31.0' annotationProcessor libraries.autovalue api project(':grpc-api') implementation project(':grpc-protobuf'), project(':grpc-stub'), project(':grpc-alts'), + project(':grpc-census'), libraries.google_auth_oauth2_http, libraries.autovalue_annotation, libraries.perfmark, + libraries.opencensus_contrib_grpc_metrics, ('com.google.guava:guava:31.0.1-jre'), ('com.google.errorprone:error_prone_annotations:2.11.0'), ('com.google.auth:google-auth-library-credentials:1.4.0'), ('org.checkerframework:checker-qual:3.20.0'), ('com.google.auto.value:auto-value-annotations:1.9'), - ('com.google.http-client:google-http-client:1.41.7'), - ('com.google.http-client:google-http-client-gson:1.41.7'), + ('com.google.http-client:google-http-client:1.41.0'), + ('com.google.http-client:google-http-client-gson:1.41.0'), ('com.google.api.grpc:proto-google-common-protos:2.7.1'), - ("com.google.cloud:google-cloud-logging:${cloudLoggingVersion}") - - implementation project(':grpc-census'), - libraries.opencensus_contrib_grpc_metrics, - ("io.opencensus:opencensus-exporter-stats-stackdriver:${opencensusVersion}"), - ("io.opencensus:opencensus-exporter-trace-stackdriver:${opencensusVersion}") + ("com.google.cloud:google-cloud-logging:${cloudLoggingVersion}"), + ("io.opencensus:opencensus-exporter-stats-stackdriver:${opencensusExporterVersion}"), + ("io.opencensus:opencensus-exporter-trace-stackdriver:${opencensusExporterVersion}") runtimeOnly libraries.opencensus_impl From 1d24187fec79ba87172423eeab7e38c6bad16fed Mon Sep 17 00:00:00 2001 From: Vindhya Ningegowda Date: Tue, 3 May 2022 11:25:04 -0700 Subject: [PATCH 3/3] addressed comments(2) --- gcp-observability/build.gradle | 1 + 1 file changed, 1 insertion(+) diff --git a/gcp-observability/build.gradle b/gcp-observability/build.gradle index 46fc5b7cee2..2720e914e89 100644 --- a/gcp-observability/build.gradle +++ b/gcp-observability/build.gradle @@ -25,6 +25,7 @@ dependencies { annotationProcessor libraries.autovalue api project(':grpc-api') + implementation project(':grpc-protobuf'), project(':grpc-stub'), project(':grpc-alts'),