From cf6b68849fdd9a5169a2871031a47da68283efbd Mon Sep 17 00:00:00 2001 From: AgraVator Date: Tue, 14 Jul 2026 17:52:15 +0530 Subject: [PATCH 1/8] interop: enable OpenTelemetry tracing support in Java interop client and server --- gradle/libs.versions.toml | 1 + interop-testing/build.gradle | 1 + .../integration/TestServiceClient.java | 32 ++++++++++++++-- .../integration/TestServiceServer.java | 38 +++++++++++++++++-- 4 files changed, 64 insertions(+), 8 deletions(-) diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 9bd4fe51358..2591908d218 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -122,6 +122,7 @@ opencensus-impl = { module = "io.opencensus:opencensus-impl", version.ref = "ope opentelemetry-api = "io.opentelemetry:opentelemetry-api:1.63.0" opentelemetry-exporter-prometheus = "io.opentelemetry:opentelemetry-exporter-prometheus:1.63.0-alpha" opentelemetry-gcp-resources = "io.opentelemetry.contrib:opentelemetry-gcp-resources:1.57.0-alpha" +opentelemetry-exporter-otlp = "io.opentelemetry:opentelemetry-exporter-otlp:1.63.0" opentelemetry-sdk-extension-autoconfigure = "io.opentelemetry:opentelemetry-sdk-extension-autoconfigure:1.63.0" opentelemetry-sdk-testing = "io.opentelemetry:opentelemetry-sdk-testing:1.63.0" perfmark-api = "io.perfmark:perfmark-api:0.27.0" diff --git a/interop-testing/build.gradle b/interop-testing/build.gradle index 5160759460c..eab52afff78 100644 --- a/interop-testing/build.gradle +++ b/interop-testing/build.gradle @@ -26,6 +26,7 @@ dependencies { libraries.opencensus.contrib.grpc.metrics, libraries.google.auth.oauth2Http, libraries.opentelemetry.sdk.extension.autoconfigure, + libraries.opentelemetry.exporter.otlp, libraries.guava.jre // Fix checkUpperBoundDeps using -android api project(':grpc-api'), project(':grpc-stub'), diff --git a/interop-testing/src/main/java/io/grpc/testing/integration/TestServiceClient.java b/interop-testing/src/main/java/io/grpc/testing/integration/TestServiceClient.java index 8a5ca05da91..99de1aab822 100644 --- a/interop-testing/src/main/java/io/grpc/testing/integration/TestServiceClient.java +++ b/interop-testing/src/main/java/io/grpc/testing/integration/TestServiceClient.java @@ -54,6 +54,12 @@ import io.grpc.internal.JsonParser; import io.grpc.netty.InsecureFromHttp1ChannelCredentials; import io.grpc.netty.InternalNettyChannelBuilder; +import io.grpc.opentelemetry.GrpcOpenTelemetry; +import io.grpc.opentelemetry.GrpcTraceBinContextPropagator; +import io.grpc.opentelemetry.InternalGrpcOpenTelemetry; +import io.opentelemetry.context.propagation.TextMapPropagator; +import io.opentelemetry.sdk.OpenTelemetrySdk; +import io.opentelemetry.sdk.autoconfigure.AutoConfiguredOpenTelemetrySdk; import io.grpc.netty.NettyChannelBuilder; import io.grpc.okhttp.InternalOkHttpChannelBuilder; import io.grpc.okhttp.OkHttpChannelBuilder; @@ -118,6 +124,8 @@ public static void main(String[] args) throws Exception { private boolean useTls = true; private boolean useAlts = false; private boolean useH2cUpgrade = false; + private boolean enableOpentelemetry = false; + private OpenTelemetrySdk openTelemetrySdk; private String customCredentialsType; private boolean useTestCa; private boolean useOkHttp; @@ -219,6 +227,8 @@ void parseArgs(String[] args) throws Exception { numThreads = Integer.parseInt(value); } else if ("additional_metadata".equals(key)) { additionalMetadata = value; + } else if ("enable_opentelemetry".equals(key)) { + enableOpentelemetry = Boolean.parseBoolean(value); } else { System.err.println("Unknown argument: " + key); usage = true; @@ -307,20 +317,34 @@ void parseArgs(String[] args) throws Exception { @VisibleForTesting void setUp() { + if (enableOpentelemetry) { + AutoConfiguredOpenTelemetrySdk autoSdk = AutoConfiguredOpenTelemetrySdk.builder() + .addPropagatorCustomizer( + (previous, config) -> + TextMapPropagator.composite( + previous, GrpcTraceBinContextPropagator.defaultInstance())) + .build(); + this.openTelemetrySdk = autoSdk.getOpenTelemetrySdk(); + GrpcOpenTelemetry.Builder grpcOpentelemetryBuilder = GrpcOpenTelemetry.newBuilder() + .sdk(openTelemetrySdk); + InternalGrpcOpenTelemetry.enableTracing(grpcOpentelemetryBuilder, true); + GrpcOpenTelemetry grpcOpenTelemetry = grpcOpentelemetryBuilder.build(); + grpcOpenTelemetry.registerGlobal(); + } tester.setUp(); } private synchronized void tearDown() { try { tester.tearDown(); + } finally { if (customBackendMetricsLoadBalancerProvider != null) { LoadBalancerRegistry.getDefaultRegistry() .deregister(customBackendMetricsLoadBalancerProvider); } - } catch (RuntimeException ex) { - throw ex; - } catch (Exception ex) { - throw new RuntimeException(ex); + if (openTelemetrySdk != null) { + openTelemetrySdk.close(); + } } } diff --git a/interop-testing/src/main/java/io/grpc/testing/integration/TestServiceServer.java b/interop-testing/src/main/java/io/grpc/testing/integration/TestServiceServer.java index ee0ecff3ce1..cf24fba723e 100644 --- a/interop-testing/src/main/java/io/grpc/testing/integration/TestServiceServer.java +++ b/interop-testing/src/main/java/io/grpc/testing/integration/TestServiceServer.java @@ -28,10 +28,16 @@ import io.grpc.TlsServerCredentials; import io.grpc.alts.AltsServerCredentials; import io.grpc.netty.NettyServerBuilder; +import io.grpc.opentelemetry.GrpcOpenTelemetry; +import io.grpc.opentelemetry.GrpcTraceBinContextPropagator; +import io.grpc.opentelemetry.InternalGrpcOpenTelemetry; import io.grpc.services.MetricRecorder; import io.grpc.testing.TlsTesting; import io.grpc.xds.orca.OrcaMetricReportingServerInterceptor; import io.grpc.xds.orca.OrcaServiceImpl; +import io.opentelemetry.context.propagation.TextMapPropagator; +import io.opentelemetry.sdk.OpenTelemetrySdk; +import io.opentelemetry.sdk.autoconfigure.AutoConfiguredOpenTelemetrySdk; import java.net.InetSocketAddress; import java.net.SocketAddress; import java.util.List; @@ -76,6 +82,8 @@ public void run() { private boolean useTls = true; private boolean useAlts = false; private int mcsLimit = -1; + private boolean enableOpentelemetry = false; + private OpenTelemetrySdk openTelemetrySdk; private ScheduledExecutorService executor; private Server server; @@ -123,6 +131,8 @@ void parseArgs(String[] args) { mcsLimit = Integer.parseInt(value); // TODO: Make Netty server builder usable for IPV6 as well (not limited to MCS handling) addressType = Util.AddressType.IPV4; // To use NettyServerBuilder + } else if ("enable_opentelemetry".equals(key)) { + enableOpentelemetry = Boolean.parseBoolean(value); } else { System.err.println("Unknown argument: " + key); usage = true; @@ -156,6 +166,20 @@ void parseArgs(String[] args) { @SuppressWarnings("AddressSelection") @VisibleForTesting void start() throws Exception { + if (enableOpentelemetry) { + AutoConfiguredOpenTelemetrySdk autoSdk = AutoConfiguredOpenTelemetrySdk.builder() + .addPropagatorCustomizer( + (previous, config) -> + TextMapPropagator.composite( + previous, GrpcTraceBinContextPropagator.defaultInstance())) + .build(); + this.openTelemetrySdk = autoSdk.getOpenTelemetrySdk(); + GrpcOpenTelemetry.Builder grpcOpentelemetryBuilder = GrpcOpenTelemetry.newBuilder() + .sdk(openTelemetrySdk); + InternalGrpcOpenTelemetry.enableTracing(grpcOpentelemetryBuilder, true); + GrpcOpenTelemetry grpcOpenTelemetry = grpcOpentelemetryBuilder.build(); + grpcOpenTelemetry.registerGlobal(); + } executor = Executors.newSingleThreadScheduledExecutor(); ServerCredentials serverCreds; if (useAlts) { @@ -224,11 +248,17 @@ void start() throws Exception { @VisibleForTesting void stop() throws Exception { - server.shutdownNow(); - if (!server.awaitTermination(5, TimeUnit.SECONDS)) { - System.err.println("Timed out waiting for server shutdown"); + try { + server.shutdownNow(); + if (!server.awaitTermination(5, TimeUnit.SECONDS)) { + System.err.println("Timed out waiting for server shutdown"); + } + MoreExecutors.shutdownAndAwaitTermination(executor, 5, TimeUnit.SECONDS); + } finally { + if (openTelemetrySdk != null) { + openTelemetrySdk.close(); + } } - MoreExecutors.shutdownAndAwaitTermination(executor, 5, TimeUnit.SECONDS); } @VisibleForTesting From 299e536cfdc4eef555282a59335c3494f2df1669 Mon Sep 17 00:00:00 2001 From: AgraVator Date: Tue, 14 Jul 2026 21:22:45 +0530 Subject: [PATCH 2/8] interop: add signal handling and try-with-resources cleanups --- .../integration/TestServiceClient.java | 43 +++-- .../integration/TestServiceServer.java | 163 +++++++++--------- 2 files changed, 112 insertions(+), 94 deletions(-) diff --git a/interop-testing/src/main/java/io/grpc/testing/integration/TestServiceClient.java b/interop-testing/src/main/java/io/grpc/testing/integration/TestServiceClient.java index 99de1aab822..dcea3e97eaf 100644 --- a/interop-testing/src/main/java/io/grpc/testing/integration/TestServiceClient.java +++ b/interop-testing/src/main/java/io/grpc/testing/integration/TestServiceClient.java @@ -54,15 +54,12 @@ import io.grpc.internal.JsonParser; import io.grpc.netty.InsecureFromHttp1ChannelCredentials; import io.grpc.netty.InternalNettyChannelBuilder; -import io.grpc.opentelemetry.GrpcOpenTelemetry; -import io.grpc.opentelemetry.GrpcTraceBinContextPropagator; -import io.grpc.opentelemetry.InternalGrpcOpenTelemetry; -import io.opentelemetry.context.propagation.TextMapPropagator; -import io.opentelemetry.sdk.OpenTelemetrySdk; -import io.opentelemetry.sdk.autoconfigure.AutoConfiguredOpenTelemetrySdk; import io.grpc.netty.NettyChannelBuilder; import io.grpc.okhttp.InternalOkHttpChannelBuilder; import io.grpc.okhttp.OkHttpChannelBuilder; +import io.grpc.opentelemetry.GrpcOpenTelemetry; +import io.grpc.opentelemetry.GrpcTraceBinContextPropagator; +import io.grpc.opentelemetry.InternalGrpcOpenTelemetry; import io.grpc.stub.ClientCalls; import io.grpc.stub.MetadataUtils; import io.grpc.stub.StreamObserver; @@ -74,6 +71,9 @@ import io.grpc.testing.integration.Messages.StreamingOutputCallRequest; import io.grpc.testing.integration.Messages.StreamingOutputCallResponse; import io.grpc.testing.integration.Messages.TestOrcaReport; +import io.opentelemetry.context.propagation.TextMapPropagator; +import io.opentelemetry.sdk.OpenTelemetrySdk; +import io.opentelemetry.sdk.autoconfigure.AutoConfiguredOpenTelemetrySdk; import java.io.File; import java.io.FileInputStream; import java.io.InputStream; @@ -448,28 +448,36 @@ private void runTest(TestCases testCase) throws Exception { case SERVICE_ACCOUNT_CREDS: { String jsonKey = Files.asCharSource(new File(serviceAccountKeyFile), UTF_8).read(); - FileInputStream credentialsStream = new FileInputStream(new File(serviceAccountKeyFile)); - tester.serviceAccountCreds(jsonKey, credentialsStream, oauthScope); + try (FileInputStream credentialsStream = + new FileInputStream(new File(serviceAccountKeyFile))) { + tester.serviceAccountCreds(jsonKey, credentialsStream, oauthScope); + } break; } case JWT_TOKEN_CREDS: { - FileInputStream credentialsStream = new FileInputStream(new File(serviceAccountKeyFile)); - tester.jwtTokenCreds(credentialsStream); + try (FileInputStream credentialsStream = + new FileInputStream(new File(serviceAccountKeyFile))) { + tester.jwtTokenCreds(credentialsStream); + } break; } case OAUTH2_AUTH_TOKEN: { String jsonKey = Files.asCharSource(new File(serviceAccountKeyFile), UTF_8).read(); - FileInputStream credentialsStream = new FileInputStream(new File(serviceAccountKeyFile)); - tester.oauth2AuthToken(jsonKey, credentialsStream, oauthScope); + try (FileInputStream credentialsStream = + new FileInputStream(new File(serviceAccountKeyFile))) { + tester.oauth2AuthToken(jsonKey, credentialsStream, oauthScope); + } break; } case PER_RPC_CREDS: { String jsonKey = Files.asCharSource(new File(serviceAccountKeyFile), UTF_8).read(); - FileInputStream credentialsStream = new FileInputStream(new File(serviceAccountKeyFile)); - tester.perRpcCreds(jsonKey, credentialsStream, oauthScope); + try (FileInputStream credentialsStream = + new FileInputStream(new File(serviceAccountKeyFile))) { + tester.perRpcCreds(jsonKey, credentialsStream, oauthScope); + } break; } @@ -701,7 +709,8 @@ protected ManagedChannelBuilder createChannelBuilder() { if (serverPort == 0) { nettyBuilder = NettyChannelBuilder.forTarget(serverHost, channelCredentials); } else { - nettyBuilder = NettyChannelBuilder.forAddress(serverHost, serverPort, channelCredentials); + nettyBuilder = + NettyChannelBuilder.forAddress(serverHost, serverPort, channelCredentials); } nettyBuilder.flowControlWindow(AbstractInteropTest.TEST_FLOW_CONTROL_WINDOW); if (serverHostOverride != null) { @@ -819,8 +828,8 @@ public void cacheableUnary() { } /** Sends a large unary rpc with service account credentials. */ - public void serviceAccountCreds(String jsonKey, InputStream credentialsStream, String authScope) - throws Exception { + public void serviceAccountCreds( + String jsonKey, InputStream credentialsStream, String authScope) throws Exception { // cast to ServiceAccountCredentials to double-check the right type of object was created. GoogleCredentials credentials = ServiceAccountCredentials.class.cast(GoogleCredentials.fromStream(credentialsStream)); diff --git a/interop-testing/src/main/java/io/grpc/testing/integration/TestServiceServer.java b/interop-testing/src/main/java/io/grpc/testing/integration/TestServiceServer.java index cf24fba723e..e1ebab8a6fe 100644 --- a/interop-testing/src/main/java/io/grpc/testing/integration/TestServiceServer.java +++ b/interop-testing/src/main/java/io/grpc/testing/integration/TestServiceServer.java @@ -166,94 +166,103 @@ void parseArgs(String[] args) { @SuppressWarnings("AddressSelection") @VisibleForTesting void start() throws Exception { - if (enableOpentelemetry) { - AutoConfiguredOpenTelemetrySdk autoSdk = AutoConfiguredOpenTelemetrySdk.builder() - .addPropagatorCustomizer( - (previous, config) -> - TextMapPropagator.composite( - previous, GrpcTraceBinContextPropagator.defaultInstance())) - .build(); - this.openTelemetrySdk = autoSdk.getOpenTelemetrySdk(); - GrpcOpenTelemetry.Builder grpcOpentelemetryBuilder = GrpcOpenTelemetry.newBuilder() - .sdk(openTelemetrySdk); - InternalGrpcOpenTelemetry.enableTracing(grpcOpentelemetryBuilder, true); - GrpcOpenTelemetry grpcOpenTelemetry = grpcOpentelemetryBuilder.build(); - grpcOpenTelemetry.registerGlobal(); - } - executor = Executors.newSingleThreadScheduledExecutor(); - ServerCredentials serverCreds; - if (useAlts) { - if (localHandshakerPort > -1) { - serverCreds = AltsServerCredentials.newBuilder() - .enableUntrustedAltsForTesting() - .setHandshakerAddressForTesting("localhost:" + localHandshakerPort).build(); + try { + if (enableOpentelemetry) { + AutoConfiguredOpenTelemetrySdk autoSdk = AutoConfiguredOpenTelemetrySdk.builder() + .addPropagatorCustomizer( + (previous, config) -> + TextMapPropagator.composite( + previous, GrpcTraceBinContextPropagator.defaultInstance())) + .build(); + this.openTelemetrySdk = autoSdk.getOpenTelemetrySdk(); + GrpcOpenTelemetry.Builder grpcOpentelemetryBuilder = GrpcOpenTelemetry.newBuilder() + .sdk(openTelemetrySdk); + InternalGrpcOpenTelemetry.enableTracing(grpcOpentelemetryBuilder, true); + GrpcOpenTelemetry grpcOpenTelemetry = grpcOpentelemetryBuilder.build(); + grpcOpenTelemetry.registerGlobal(); + } + executor = Executors.newSingleThreadScheduledExecutor(); + ServerCredentials serverCreds; + if (useAlts) { + if (localHandshakerPort > -1) { + serverCreds = AltsServerCredentials.newBuilder() + .enableUntrustedAltsForTesting() + .setHandshakerAddressForTesting("localhost:" + localHandshakerPort).build(); + } else { + serverCreds = AltsServerCredentials.create(); + } + } else if (useTls) { + serverCreds = TlsServerCredentials.create( + TlsTesting.loadCert("server1.pem"), TlsTesting.loadCert("server1.key")); } else { - serverCreds = AltsServerCredentials.create(); + serverCreds = InsecureServerCredentials.create(); } - } else if (useTls) { - serverCreds = TlsServerCredentials.create( - TlsTesting.loadCert("server1.pem"), TlsTesting.loadCert("server1.key")); - } else { - serverCreds = InsecureServerCredentials.create(); - } - MetricRecorder metricRecorder = MetricRecorder.newInstance(); - BindableService orcaOobService = - OrcaServiceImpl.createService(executor, metricRecorder, 1, TimeUnit.SECONDS); + MetricRecorder metricRecorder = MetricRecorder.newInstance(); + BindableService orcaOobService = + OrcaServiceImpl.createService(executor, metricRecorder, 1, TimeUnit.SECONDS); - // Create ServerBuilder with appropriate addresses - // - IPV4_IPV6: bind to wildcard which covers all addresses on all interfaces of both families - // - IPV4: bind to v4 address for local hostname + v4 localhost - // - IPV6: bind to all v6 addresses for local hostname + v6 localhost - ServerBuilder serverBuilder; - switch (addressType) { - case IPV4_IPV6: - serverBuilder = Grpc.newServerBuilderForPort(port, serverCreds); - break; - case IPV4: - SocketAddress v4Address = Util.getV4Address(port); - InetSocketAddress localV4Address = new InetSocketAddress("127.0.0.1", port); - serverBuilder = - NettyServerBuilder.forAddress(localV4Address, serverCreds); - if (v4Address != null && !v4Address.equals(localV4Address)) { - ((NettyServerBuilder) serverBuilder).addListenAddress(v4Address); - } - if (mcsLimit != -1) { - ((NettyServerBuilder) serverBuilder).maxConcurrentCallsPerConnection(mcsLimit); - } - break; - case IPV6: - List v6Addresses = Util.getV6Addresses(port); - InetSocketAddress localV6Address = new InetSocketAddress("::1", port); - serverBuilder = - NettyServerBuilder.forAddress(localV6Address, serverCreds); - for (SocketAddress address : v6Addresses) { - if (!address.equals(localV6Address)) { - ((NettyServerBuilder) serverBuilder).addListenAddress(address); + // Create ServerBuilder with appropriate addresses + // - IPV4_IPV6: bind to wildcard which covers all addresses on all interfaces of both families + // - IPV4: bind to v4 address for local hostname + v4 localhost + // - IPV6: bind to all v6 addresses for local hostname + v6 localhost + ServerBuilder serverBuilder; + switch (addressType) { + case IPV4_IPV6: + serverBuilder = Grpc.newServerBuilderForPort(port, serverCreds); + break; + case IPV4: + SocketAddress v4Address = Util.getV4Address(port); + InetSocketAddress localV4Address = new InetSocketAddress("127.0.0.1", port); + serverBuilder = + NettyServerBuilder.forAddress(localV4Address, serverCreds); + if (v4Address != null && !v4Address.equals(localV4Address)) { + ((NettyServerBuilder) serverBuilder).addListenAddress(v4Address); } - } - break; - default: - throw new AssertionError("Unknown address type: " + addressType); + if (mcsLimit != -1) { + ((NettyServerBuilder) serverBuilder).maxConcurrentCallsPerConnection(mcsLimit); + } + break; + case IPV6: + List v6Addresses = Util.getV6Addresses(port); + InetSocketAddress localV6Address = new InetSocketAddress("::1", port); + serverBuilder = + NettyServerBuilder.forAddress(localV6Address, serverCreds); + for (SocketAddress address : v6Addresses) { + if (!address.equals(localV6Address)) { + ((NettyServerBuilder) serverBuilder).addListenAddress(address); + } + } + break; + default: + throw new AssertionError("Unknown address type: " + addressType); + } + server = serverBuilder + .maxInboundMessageSize(AbstractInteropTest.MAX_MESSAGE_SIZE) + .addService( + ServerInterceptors.intercept( + new TestServiceImpl(executor, metricRecorder), TestServiceImpl.interceptors())) + .addService(orcaOobService) + .intercept(OrcaMetricReportingServerInterceptor.create(metricRecorder)) + .build() + .start(); + } catch (Throwable t) { + stop(); + throw t; } - server = serverBuilder - .maxInboundMessageSize(AbstractInteropTest.MAX_MESSAGE_SIZE) - .addService( - ServerInterceptors.intercept( - new TestServiceImpl(executor, metricRecorder), TestServiceImpl.interceptors())) - .addService(orcaOobService) - .intercept(OrcaMetricReportingServerInterceptor.create(metricRecorder)) - .build() - .start(); } @VisibleForTesting void stop() throws Exception { try { - server.shutdownNow(); - if (!server.awaitTermination(5, TimeUnit.SECONDS)) { - System.err.println("Timed out waiting for server shutdown"); + if (server != null) { + server.shutdownNow(); + if (!server.awaitTermination(5, TimeUnit.SECONDS)) { + System.err.println("Timed out waiting for server shutdown"); + } + } + if (executor != null) { + MoreExecutors.shutdownAndAwaitTermination(executor, 5, TimeUnit.SECONDS); } - MoreExecutors.shutdownAndAwaitTermination(executor, 5, TimeUnit.SECONDS); } finally { if (openTelemetrySdk != null) { openTelemetrySdk.close(); From b0f13693b7071878e95548d376e9916240135803 Mon Sep 17 00:00:00 2001 From: AgraVator Date: Mon, 20 Jul 2026 19:44:10 +0530 Subject: [PATCH 3/8] interop: guarantee OpenTelemetrySdk teardown and fix span double ending --- .../testing/integration/TestServiceClient.java | 2 +- .../OpenTelemetryContextPropagationTest.java | 18 +++++++++++++++++- 2 files changed, 18 insertions(+), 2 deletions(-) diff --git a/interop-testing/src/main/java/io/grpc/testing/integration/TestServiceClient.java b/interop-testing/src/main/java/io/grpc/testing/integration/TestServiceClient.java index dcea3e97eaf..9be2fd2cde6 100644 --- a/interop-testing/src/main/java/io/grpc/testing/integration/TestServiceClient.java +++ b/interop-testing/src/main/java/io/grpc/testing/integration/TestServiceClient.java @@ -107,9 +107,9 @@ public static void main(String[] args) throws Exception { client.parseArgs(args); customBackendMetricsLoadBalancerProvider = new CustomBackendMetricsLoadBalancerProvider(); LoadBalancerRegistry.getDefaultRegistry().register(customBackendMetricsLoadBalancerProvider); - client.setUp(); try { + client.setUp(); client.run(); } finally { client.tearDown(); diff --git a/interop-testing/src/test/java/io/grpc/testing/integration/OpenTelemetryContextPropagationTest.java b/interop-testing/src/test/java/io/grpc/testing/integration/OpenTelemetryContextPropagationTest.java index 3884d977a6e..5389420c01e 100644 --- a/interop-testing/src/test/java/io/grpc/testing/integration/OpenTelemetryContextPropagationTest.java +++ b/interop-testing/src/test/java/io/grpc/testing/integration/OpenTelemetryContextPropagationTest.java @@ -44,6 +44,7 @@ import io.opentelemetry.sdk.trace.SdkTracerProvider; import java.util.Arrays; import java.util.concurrent.atomic.AtomicReference; +import org.junit.After; import org.junit.Assume; import org.junit.Test; import org.junit.runner.RunWith; @@ -83,6 +84,18 @@ public OpenTelemetryContextPropagationTest(TextMapPropagator textMapPropagator, this.censusClient = isCensusClient; } + @Override + @After + public void tearDown() { + try { + super.tearDown(); + } finally { + if (openTelemetrySdk != null) { + openTelemetrySdk.close(); + } + } + } + @Override protected ServerBuilder getServerBuilder() { NettyServerBuilder builder = NettyServerBuilder.forPort(0, InsecureServerCredentials.create()) @@ -133,7 +146,7 @@ public void onComplete() { } private void maybeCloseSpan(AtomicReference applicationSpan) { - Span tmp = applicationSpan.get(); + Span tmp = applicationSpan.getAndSet(null); if (tmp != null) { tmp.end(); } @@ -165,6 +178,8 @@ public void otelSpanContextPropagation() { Span parentSpan = tracer.spanBuilder("Test.interopTest").startSpan(); try (Scope scope = Context.current().with(parentSpan).makeCurrent()) { blockingStub.unaryCall(SimpleRequest.getDefaultInstance()); + } finally { + parentSpan.end(); } assertEquals(parentSpan.getSpanContext().getTraceId(), applicationSpan.get().getSpanContext().getTraceId()); @@ -186,6 +201,7 @@ public void censusToOtelGrpcTraceBinPropagator() { applicationSpan.get().getSpanContext().getTraceId()); } finally { context.detach(previous); + parentSpan.end(); } } } From 85eb6a915b8a1dadaed813ea5b241e522ec02bc1 Mon Sep 17 00:00:00 2001 From: AgraVator Date: Mon, 20 Jul 2026 20:04:51 +0530 Subject: [PATCH 4/8] interop: add @IgnoreJRERequirement for OpenTelemetry Java 8+ APIs to pass AnimalSniffer --- .../java/io/grpc/testing/integration/TestServiceClient.java | 2 ++ .../java/io/grpc/testing/integration/TestServiceServer.java | 2 ++ 2 files changed, 4 insertions(+) diff --git a/interop-testing/src/main/java/io/grpc/testing/integration/TestServiceClient.java b/interop-testing/src/main/java/io/grpc/testing/integration/TestServiceClient.java index 9be2fd2cde6..4571835cd1f 100644 --- a/interop-testing/src/main/java/io/grpc/testing/integration/TestServiceClient.java +++ b/interop-testing/src/main/java/io/grpc/testing/integration/TestServiceClient.java @@ -85,6 +85,7 @@ import java.util.concurrent.TimeUnit; import java.util.concurrent.atomic.AtomicReference; import javax.annotation.Nullable; +import org.codehaus.mojo.animal_sniffer.IgnoreJRERequirement; /** * Application that starts a client for the {@link TestServiceGrpc.TestServiceImplBase} and runs @@ -316,6 +317,7 @@ void parseArgs(String[] args) throws Exception { } @VisibleForTesting + @IgnoreJRERequirement void setUp() { if (enableOpentelemetry) { AutoConfiguredOpenTelemetrySdk autoSdk = AutoConfiguredOpenTelemetrySdk.builder() diff --git a/interop-testing/src/main/java/io/grpc/testing/integration/TestServiceServer.java b/interop-testing/src/main/java/io/grpc/testing/integration/TestServiceServer.java index e1ebab8a6fe..3e87bda9fcb 100644 --- a/interop-testing/src/main/java/io/grpc/testing/integration/TestServiceServer.java +++ b/interop-testing/src/main/java/io/grpc/testing/integration/TestServiceServer.java @@ -45,6 +45,7 @@ import java.util.concurrent.Executors; import java.util.concurrent.ScheduledExecutorService; import java.util.concurrent.TimeUnit; +import org.codehaus.mojo.animal_sniffer.IgnoreJRERequirement; /** Server that manages startup/shutdown of a single {@code TestService}. */ public class TestServiceServer { @@ -165,6 +166,7 @@ void parseArgs(String[] args) { @SuppressWarnings("AddressSelection") @VisibleForTesting + @IgnoreJRERequirement void start() throws Exception { try { if (enableOpentelemetry) { From 365918116ac4d73424caa72ce6d30e6ede9ef535 Mon Sep 17 00:00:00 2001 From: AgraVator Date: Mon, 20 Jul 2026 20:15:02 +0530 Subject: [PATCH 5/8] interop: add explanatory comment to @IgnoreJRERequirement for OpenTelemetry Java 8+ APIs --- .../java/io/grpc/testing/integration/TestServiceClient.java | 2 +- .../java/io/grpc/testing/integration/TestServiceServer.java | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/interop-testing/src/main/java/io/grpc/testing/integration/TestServiceClient.java b/interop-testing/src/main/java/io/grpc/testing/integration/TestServiceClient.java index 4571835cd1f..39d14499030 100644 --- a/interop-testing/src/main/java/io/grpc/testing/integration/TestServiceClient.java +++ b/interop-testing/src/main/java/io/grpc/testing/integration/TestServiceClient.java @@ -317,7 +317,7 @@ void parseArgs(String[] args) throws Exception { } @VisibleForTesting - @IgnoreJRERequirement + @IgnoreJRERequirement // OpenTelemetry uses Java 8+ APIs void setUp() { if (enableOpentelemetry) { AutoConfiguredOpenTelemetrySdk autoSdk = AutoConfiguredOpenTelemetrySdk.builder() diff --git a/interop-testing/src/main/java/io/grpc/testing/integration/TestServiceServer.java b/interop-testing/src/main/java/io/grpc/testing/integration/TestServiceServer.java index 3e87bda9fcb..f8d12871071 100644 --- a/interop-testing/src/main/java/io/grpc/testing/integration/TestServiceServer.java +++ b/interop-testing/src/main/java/io/grpc/testing/integration/TestServiceServer.java @@ -166,7 +166,7 @@ void parseArgs(String[] args) { @SuppressWarnings("AddressSelection") @VisibleForTesting - @IgnoreJRERequirement + @IgnoreJRERequirement // OpenTelemetry uses Java 8+ APIs void start() throws Exception { try { if (enableOpentelemetry) { From 7dbd4c36b99f7e9bcb6be995680baa1ad321f3a2 Mon Sep 17 00:00:00 2001 From: AgraVator Date: Mon, 20 Jul 2026 20:52:30 +0530 Subject: [PATCH 6/8] interop: fix maybeCloseSpan in OpenTelemetryContextPropagationTest to preserve applicationSpan reference --- .../integration/OpenTelemetryContextPropagationTest.java | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/interop-testing/src/test/java/io/grpc/testing/integration/OpenTelemetryContextPropagationTest.java b/interop-testing/src/test/java/io/grpc/testing/integration/OpenTelemetryContextPropagationTest.java index 5389420c01e..726453d4194 100644 --- a/interop-testing/src/test/java/io/grpc/testing/integration/OpenTelemetryContextPropagationTest.java +++ b/interop-testing/src/test/java/io/grpc/testing/integration/OpenTelemetryContextPropagationTest.java @@ -43,6 +43,7 @@ import io.opentelemetry.sdk.OpenTelemetrySdk; import io.opentelemetry.sdk.trace.SdkTracerProvider; import java.util.Arrays; +import java.util.concurrent.atomic.AtomicBoolean; import java.util.concurrent.atomic.AtomicReference; import org.junit.After; import org.junit.Assume; @@ -145,10 +146,12 @@ public void onComplete() { return builder; } + private final AtomicBoolean applicationSpanClosed = new AtomicBoolean(false); + private void maybeCloseSpan(AtomicReference applicationSpan) { - Span tmp = applicationSpan.getAndSet(null); - if (tmp != null) { - tmp.end(); + Span span = applicationSpan.get(); + if (span != null && applicationSpanClosed.compareAndSet(false, true)) { + span.end(); } } From 625ce3975c008638cae3ac9566c343443f2ac1df Mon Sep 17 00:00:00 2001 From: agrawalabhi Date: Mon, 10 Aug 2026 15:05:20 +0000 Subject: [PATCH 7/8] Upgrade to protobuf 3.25.9 / 25.6 - Synchronize buildscripts/make_dependencies.* to Protobuf 25.6 and Abseil 20230802.1 - Align Kokoro Windows CI batch scripts to Protobuf 25.6 - Update README.md and example project build files to Protobuf 3.25.9 - Exclude transitive protobuf 4.x dependencies to enforce strict 3.25.9 resolution --- README.md | 6 +++--- buildscripts/kokoro/windows32.bat | 2 +- buildscripts/kokoro/windows64.bat | 2 +- buildscripts/make_dependencies.bat | 4 ++-- buildscripts/make_dependencies.sh | 4 ++-- examples/example-alts/build.gradle | 2 +- examples/example-debug/build.gradle | 2 +- examples/example-debug/pom.xml | 2 +- examples/example-dualstack/build.gradle | 2 +- examples/example-dualstack/pom.xml | 2 +- examples/example-gauth/build.gradle | 2 +- examples/example-gauth/pom.xml | 2 +- examples/example-gcp-csm-observability/build.gradle | 2 +- examples/example-gcp-observability/build.gradle | 2 +- examples/example-hostname/build.gradle | 2 +- examples/example-hostname/pom.xml | 2 +- examples/example-jwt-auth/build.gradle | 2 +- examples/example-jwt-auth/pom.xml | 4 ++-- examples/example-oauth/build.gradle | 2 +- examples/example-oauth/pom.xml | 4 ++-- examples/example-opentelemetry/build.gradle | 2 +- examples/example-orca/build.gradle | 2 +- examples/example-reflection/build.gradle | 2 +- examples/example-servlet/build.gradle | 2 +- examples/example-tls/build.gradle | 2 +- examples/example-tls/pom.xml | 2 +- examples/example-xds/build.gradle | 2 +- interop-testing/build.gradle | 4 +++- xds/build.gradle | 4 +++- 29 files changed, 39 insertions(+), 35 deletions(-) diff --git a/README.md b/README.md index f12fa0e1986..b9abfe10ae1 100644 --- a/README.md +++ b/README.md @@ -121,7 +121,7 @@ For protobuf-based codegen integrated with the Maven build system, you can use protobuf-maven-plugin 0.6.1 - com.google.protobuf:protoc:3.25.8:exe:${os.detected.classifier} + com.google.protobuf:protoc:3.25.9:exe:${os.detected.classifier} grpc-java io.grpc:protoc-gen-grpc-java:1.82.1:exe:${os.detected.classifier} @@ -149,7 +149,7 @@ plugins { protobuf { protoc { - artifact = "com.google.protobuf:protoc:3.25.8" + artifact = "com.google.protobuf:protoc:3.25.9" } plugins { grpc { @@ -182,7 +182,7 @@ plugins { protobuf { protoc { - artifact = "com.google.protobuf:protoc:3.25.8" + artifact = "com.google.protobuf:protoc:3.25.9" } plugins { grpc { diff --git a/buildscripts/kokoro/windows32.bat b/buildscripts/kokoro/windows32.bat index 90c74a57f1a..c79b1f25f04 100644 --- a/buildscripts/kokoro/windows32.bat +++ b/buildscripts/kokoro/windows32.bat @@ -25,7 +25,7 @@ cd "%WORKSPACE%" SET TARGET_ARCH=x86_32 SET FAIL_ON_WARNINGS=true -SET PROTOBUF_VER=35.1 +SET PROTOBUF_VER=25.6 SET PKG_CONFIG_PATH=%ESCWORKSPACE%\\grpc-java-helper32\\protobuf-%PROTOBUF_VER%\\build\\protobuf-%PROTOBUF_VER%\\lib\\pkgconfig SET VC_PROTOBUF_LIBS=/LIBPATH:%ESCWORKSPACE%\\grpc-java-helper32\\protobuf-%PROTOBUF_VER%\\build\\protobuf-%PROTOBUF_VER%\\lib SET VC_PROTOBUF_INCLUDE=%ESCWORKSPACE%\\grpc-java-helper32\\protobuf-%PROTOBUF_VER%\\build\\protobuf-%PROTOBUF_VER%\\include diff --git a/buildscripts/kokoro/windows64.bat b/buildscripts/kokoro/windows64.bat index dba07807d03..cab87a03c4d 100644 --- a/buildscripts/kokoro/windows64.bat +++ b/buildscripts/kokoro/windows64.bat @@ -24,7 +24,7 @@ cd "%WORKSPACE%" SET TARGET_ARCH=x86_64 SET FAIL_ON_WARNINGS=true -SET PROTOBUF_VER=35.1 +SET PROTOBUF_VER=25.6 SET PKG_CONFIG_PATH=%ESCWORKSPACE%\\grpc-java-helper64\\protobuf-%PROTOBUF_VER%\\build\\protobuf-%PROTOBUF_VER%\\lib\\pkgconfig SET VC_PROTOBUF_LIBS=/LIBPATH:%ESCWORKSPACE%\\grpc-java-helper64\\protobuf-%PROTOBUF_VER%\\build\\protobuf-%PROTOBUF_VER%\\lib SET VC_PROTOBUF_INCLUDE=%ESCWORKSPACE%\\grpc-java-helper64\\protobuf-%PROTOBUF_VER%\\build\\protobuf-%PROTOBUF_VER%\\include diff --git a/buildscripts/make_dependencies.bat b/buildscripts/make_dependencies.bat index 4ff775347a5..cec5b3e71b2 100644 --- a/buildscripts/make_dependencies.bat +++ b/buildscripts/make_dependencies.bat @@ -1,8 +1,8 @@ choco install -y pkgconfiglite choco install -y openjdk --version=17.0 set PATH=%PATH%;"c:\Program Files\OpenJDK\jdk-17\bin" -set PROTOBUF_VER=35.1 -set ABSL_VERSION=20250127.1 +set PROTOBUF_VER=25.6 +set ABSL_VERSION=20230802.1 set CMAKE_NAME=cmake-3.26.3-windows-x86_64 if not exist "protobuf-%PROTOBUF_VER%\build\Release\" ( diff --git a/buildscripts/make_dependencies.sh b/buildscripts/make_dependencies.sh index 600e2d40a1b..bd003918b59 100755 --- a/buildscripts/make_dependencies.sh +++ b/buildscripts/make_dependencies.sh @@ -3,8 +3,8 @@ # Build protoc set -evux -o pipefail -PROTOBUF_VERSION=35.1 -ABSL_VERSION=20250127.1 +PROTOBUF_VERSION=25.6 +ABSL_VERSION=20230802.1 # ARCH is x86_64 bit unless otherwise specified. ARCH="${ARCH:-x86_64}" diff --git a/examples/example-alts/build.gradle b/examples/example-alts/build.gradle index 59963c7ca5f..2da10b0bb5d 100644 --- a/examples/example-alts/build.gradle +++ b/examples/example-alts/build.gradle @@ -22,7 +22,7 @@ java { // Feel free to delete the comment at the next line. It is just for safely // updating the version in our release process. def grpcVersion = '1.84.0-SNAPSHOT' // CURRENT_GRPC_VERSION -def protocVersion = '3.25.8' +def protocVersion = '3.25.9' dependencies { // grpc-alts transitively depends on grpc-netty-shaded, grpc-protobuf, and grpc-stub diff --git a/examples/example-debug/build.gradle b/examples/example-debug/build.gradle index 5df4432c518..141da213e5e 100644 --- a/examples/example-debug/build.gradle +++ b/examples/example-debug/build.gradle @@ -24,7 +24,7 @@ java { // Feel free to delete the comment at the next line. It is just for safely // updating the version in our release process. def grpcVersion = '1.84.0-SNAPSHOT' // CURRENT_GRPC_VERSION -def protobufVersion = '3.25.8' +def protobufVersion = '3.25.9' dependencies { implementation "io.grpc:grpc-protobuf:${grpcVersion}" diff --git a/examples/example-debug/pom.xml b/examples/example-debug/pom.xml index 9b4a24dcbc8..0690e59cd91 100644 --- a/examples/example-debug/pom.xml +++ b/examples/example-debug/pom.xml @@ -13,7 +13,7 @@ UTF-8 1.84.0-SNAPSHOT - 3.25.8 + 3.25.9 1.8 1.8 diff --git a/examples/example-dualstack/build.gradle b/examples/example-dualstack/build.gradle index f9ed301ad67..3f744f12077 100644 --- a/examples/example-dualstack/build.gradle +++ b/examples/example-dualstack/build.gradle @@ -24,7 +24,7 @@ java { // Feel free to delete the comment at the next line. It is just for safely // updating the version in our release process. def grpcVersion = '1.84.0-SNAPSHOT' // CURRENT_GRPC_VERSION -def protobufVersion = '3.25.8' +def protobufVersion = '3.25.9' dependencies { implementation "io.grpc:grpc-protobuf:${grpcVersion}" diff --git a/examples/example-dualstack/pom.xml b/examples/example-dualstack/pom.xml index 6c05aff9759..c40421c1c39 100644 --- a/examples/example-dualstack/pom.xml +++ b/examples/example-dualstack/pom.xml @@ -13,7 +13,7 @@ UTF-8 1.84.0-SNAPSHOT - 3.25.8 + 3.25.9 1.8 1.8 diff --git a/examples/example-gauth/build.gradle b/examples/example-gauth/build.gradle index 6106f30a981..5287819728d 100644 --- a/examples/example-gauth/build.gradle +++ b/examples/example-gauth/build.gradle @@ -22,7 +22,7 @@ java { // Feel free to delete the comment at the next line. It is just for safely // updating the version in our release process. def grpcVersion = '1.84.0-SNAPSHOT' // CURRENT_GRPC_VERSION -def protobufVersion = '3.25.8' +def protobufVersion = '3.25.9' def protocVersion = protobufVersion diff --git a/examples/example-gauth/pom.xml b/examples/example-gauth/pom.xml index cd0a395cdde..ebde5e22ca7 100644 --- a/examples/example-gauth/pom.xml +++ b/examples/example-gauth/pom.xml @@ -13,7 +13,7 @@ UTF-8 1.84.0-SNAPSHOT - 3.25.8 + 3.25.9 1.8 1.8 diff --git a/examples/example-gcp-csm-observability/build.gradle b/examples/example-gcp-csm-observability/build.gradle index 3e9051acd09..0084464d4f2 100644 --- a/examples/example-gcp-csm-observability/build.gradle +++ b/examples/example-gcp-csm-observability/build.gradle @@ -23,7 +23,7 @@ java { // Feel free to delete the comment at the next line. It is just for safely // updating the version in our release process. def grpcVersion = '1.84.0-SNAPSHOT' // CURRENT_GRPC_VERSION -def protocVersion = '3.25.8' +def protocVersion = '3.25.9' def openTelemetryVersion = '1.63.0' def openTelemetryPrometheusVersion = '1.63.0-alpha' diff --git a/examples/example-gcp-observability/build.gradle b/examples/example-gcp-observability/build.gradle index b81bcb6b762..ab73b99f891 100644 --- a/examples/example-gcp-observability/build.gradle +++ b/examples/example-gcp-observability/build.gradle @@ -23,7 +23,7 @@ java { // Feel free to delete the comment at the next line. It is just for safely // updating the version in our release process. def grpcVersion = '1.84.0-SNAPSHOT' // CURRENT_GRPC_VERSION -def protocVersion = '3.25.8' +def protocVersion = '3.25.9' dependencies { implementation "io.grpc:grpc-protobuf:${grpcVersion}" diff --git a/examples/example-hostname/build.gradle b/examples/example-hostname/build.gradle index 5926ac1ee08..cd11db311ef 100644 --- a/examples/example-hostname/build.gradle +++ b/examples/example-hostname/build.gradle @@ -22,7 +22,7 @@ java { // Feel free to delete the comment at the next line. It is just for safely // updating the version in our release process. def grpcVersion = '1.84.0-SNAPSHOT' // CURRENT_GRPC_VERSION -def protobufVersion = '3.25.8' +def protobufVersion = '3.25.9' dependencies { implementation "io.grpc:grpc-protobuf:${grpcVersion}" diff --git a/examples/example-hostname/pom.xml b/examples/example-hostname/pom.xml index 5f65084692a..c0156044153 100644 --- a/examples/example-hostname/pom.xml +++ b/examples/example-hostname/pom.xml @@ -13,7 +13,7 @@ UTF-8 1.84.0-SNAPSHOT - 3.25.8 + 3.25.9 1.8 1.8 diff --git a/examples/example-jwt-auth/build.gradle b/examples/example-jwt-auth/build.gradle index 436a17bb079..82ffd7c8add 100644 --- a/examples/example-jwt-auth/build.gradle +++ b/examples/example-jwt-auth/build.gradle @@ -22,7 +22,7 @@ java { // Feel free to delete the comment at the next line. It is just for safely // updating the version in our release process. def grpcVersion = '1.84.0-SNAPSHOT' // CURRENT_GRPC_VERSION -def protobufVersion = '3.25.8' +def protobufVersion = '3.25.9' def protocVersion = protobufVersion dependencies { diff --git a/examples/example-jwt-auth/pom.xml b/examples/example-jwt-auth/pom.xml index e198cbaf816..1d0ac563a9a 100644 --- a/examples/example-jwt-auth/pom.xml +++ b/examples/example-jwt-auth/pom.xml @@ -14,8 +14,8 @@ UTF-8 1.84.0-SNAPSHOT - 3.25.8 - 3.25.8 + 3.25.9 + 3.25.9 1.8 1.8 diff --git a/examples/example-oauth/build.gradle b/examples/example-oauth/build.gradle index 5232e0ace32..db5d043ec2f 100644 --- a/examples/example-oauth/build.gradle +++ b/examples/example-oauth/build.gradle @@ -22,7 +22,7 @@ java { // Feel free to delete the comment at the next line. It is just for safely // updating the version in our release process. def grpcVersion = '1.84.0-SNAPSHOT' // CURRENT_GRPC_VERSION -def protobufVersion = '3.25.8' +def protobufVersion = '3.25.9' def protocVersion = protobufVersion dependencies { diff --git a/examples/example-oauth/pom.xml b/examples/example-oauth/pom.xml index 0401fb38df7..d21f66a5dc6 100644 --- a/examples/example-oauth/pom.xml +++ b/examples/example-oauth/pom.xml @@ -14,8 +14,8 @@ UTF-8 1.84.0-SNAPSHOT - 3.25.8 - 3.25.8 + 3.25.9 + 3.25.9 1.8 1.8 diff --git a/examples/example-opentelemetry/build.gradle b/examples/example-opentelemetry/build.gradle index 842c9cafe7f..1173aa27a81 100644 --- a/examples/example-opentelemetry/build.gradle +++ b/examples/example-opentelemetry/build.gradle @@ -22,7 +22,7 @@ java { // Feel free to delete the comment at the next line. It is just for safely // updating the version in our release process. def grpcVersion = '1.84.0-SNAPSHOT' // CURRENT_GRPC_VERSION -def protocVersion = '3.25.8' +def protocVersion = '3.25.9' def openTelemetryVersion = '1.63.0' def openTelemetryPrometheusVersion = '1.63.0-alpha' diff --git a/examples/example-orca/build.gradle b/examples/example-orca/build.gradle index ffcd8dd3e99..0f9fd2d385f 100644 --- a/examples/example-orca/build.gradle +++ b/examples/example-orca/build.gradle @@ -17,7 +17,7 @@ java { } def grpcVersion = '1.84.0-SNAPSHOT' // CURRENT_GRPC_VERSION -def protocVersion = '3.25.8' +def protocVersion = '3.25.9' dependencies { implementation "io.grpc:grpc-protobuf:${grpcVersion}" diff --git a/examples/example-reflection/build.gradle b/examples/example-reflection/build.gradle index 5f729f534ed..450ba681046 100644 --- a/examples/example-reflection/build.gradle +++ b/examples/example-reflection/build.gradle @@ -17,7 +17,7 @@ java { } def grpcVersion = '1.84.0-SNAPSHOT' // CURRENT_GRPC_VERSION -def protocVersion = '3.25.8' +def protocVersion = '3.25.9' dependencies { implementation "io.grpc:grpc-protobuf:${grpcVersion}" diff --git a/examples/example-servlet/build.gradle b/examples/example-servlet/build.gradle index ce786c8f21e..3f7733015a2 100644 --- a/examples/example-servlet/build.gradle +++ b/examples/example-servlet/build.gradle @@ -16,7 +16,7 @@ java { } def grpcVersion = '1.84.0-SNAPSHOT' // CURRENT_GRPC_VERSION -def protocVersion = '3.25.8' +def protocVersion = '3.25.9' dependencies { implementation "io.grpc:grpc-protobuf:${grpcVersion}", diff --git a/examples/example-tls/build.gradle b/examples/example-tls/build.gradle index 57e9923e9ee..a9bc492832e 100644 --- a/examples/example-tls/build.gradle +++ b/examples/example-tls/build.gradle @@ -22,7 +22,7 @@ java { // Feel free to delete the comment at the next line. It is just for safely // updating the version in our release process. def grpcVersion = '1.84.0-SNAPSHOT' // CURRENT_GRPC_VERSION -def protocVersion = '3.25.8' +def protocVersion = '3.25.9' dependencies { implementation "io.grpc:grpc-protobuf:${grpcVersion}" diff --git a/examples/example-tls/pom.xml b/examples/example-tls/pom.xml index 74129e43b0b..5015e4037c7 100644 --- a/examples/example-tls/pom.xml +++ b/examples/example-tls/pom.xml @@ -13,7 +13,7 @@ UTF-8 1.84.0-SNAPSHOT - 3.25.8 + 3.25.9 1.8 1.8 diff --git a/examples/example-xds/build.gradle b/examples/example-xds/build.gradle index 2b894562204..30a8042ed29 100644 --- a/examples/example-xds/build.gradle +++ b/examples/example-xds/build.gradle @@ -22,7 +22,7 @@ java { // Feel free to delete the comment at the next line. It is just for safely // updating the version in our release process. def grpcVersion = '1.84.0-SNAPSHOT' // CURRENT_GRPC_VERSION -def protocVersion = '3.25.8' +def protocVersion = '3.25.9' dependencies { implementation "io.grpc:grpc-protobuf:${grpcVersion}" diff --git a/interop-testing/build.gradle b/interop-testing/build.gradle index eab52afff78..3f12e0e2c6d 100644 --- a/interop-testing/build.gradle +++ b/interop-testing/build.gradle @@ -42,10 +42,12 @@ dependencies { runtimeOnly libraries.opencensus.impl, libraries.netty.tcnative, libraries.netty.tcnative.classes, - libraries.opentelemetry.exporter.prometheus, // For xds interop client project(':grpc-googleapis'), project(':grpc-grpclb'), project(':grpc-rls') + runtimeOnly(libraries.opentelemetry.exporter.prometheus) { // For xds interop client + exclude group: 'com.google.protobuf', module: 'protobuf-java' + } testImplementation testFixtures(project(':grpc-api')), testFixtures(project(':grpc-core')), project(':grpc-inprocess'), diff --git a/xds/build.gradle b/xds/build.gradle index c6325f7fc2d..65d340bd123 100644 --- a/xds/build.gradle +++ b/xds/build.gradle @@ -70,7 +70,9 @@ dependencies { testImplementation project(':grpc-inprocess') testImplementation libraries.opentelemetry.api testImplementation libraries.opentelemetry.sdk.testing - testImplementation libraries.cel.compiler + testImplementation(libraries.cel.compiler) { + exclude group: 'com.google.protobuf', module: 'protobuf-java' + } testImplementation testFixtures(project(':grpc-core')), testFixtures(project(':grpc-api')), testFixtures(project(':grpc-util')) From 696df7d9f085ca2fb419828fcbecdd10dcd12bb8 Mon Sep 17 00:00:00 2001 From: agrawalabhi Date: Mon, 10 Aug 2026 15:09:08 +0000 Subject: [PATCH 8/8] Revert "Upgrade to protobuf 3.25.9 / 25.6" This reverts commit 625ce3975c008638cae3ac9566c343443f2ac1df. --- README.md | 6 +++--- buildscripts/kokoro/windows32.bat | 2 +- buildscripts/kokoro/windows64.bat | 2 +- buildscripts/make_dependencies.bat | 4 ++-- buildscripts/make_dependencies.sh | 4 ++-- examples/example-alts/build.gradle | 2 +- examples/example-debug/build.gradle | 2 +- examples/example-debug/pom.xml | 2 +- examples/example-dualstack/build.gradle | 2 +- examples/example-dualstack/pom.xml | 2 +- examples/example-gauth/build.gradle | 2 +- examples/example-gauth/pom.xml | 2 +- examples/example-gcp-csm-observability/build.gradle | 2 +- examples/example-gcp-observability/build.gradle | 2 +- examples/example-hostname/build.gradle | 2 +- examples/example-hostname/pom.xml | 2 +- examples/example-jwt-auth/build.gradle | 2 +- examples/example-jwt-auth/pom.xml | 4 ++-- examples/example-oauth/build.gradle | 2 +- examples/example-oauth/pom.xml | 4 ++-- examples/example-opentelemetry/build.gradle | 2 +- examples/example-orca/build.gradle | 2 +- examples/example-reflection/build.gradle | 2 +- examples/example-servlet/build.gradle | 2 +- examples/example-tls/build.gradle | 2 +- examples/example-tls/pom.xml | 2 +- examples/example-xds/build.gradle | 2 +- interop-testing/build.gradle | 4 +--- xds/build.gradle | 4 +--- 29 files changed, 35 insertions(+), 39 deletions(-) diff --git a/README.md b/README.md index b9abfe10ae1..f12fa0e1986 100644 --- a/README.md +++ b/README.md @@ -121,7 +121,7 @@ For protobuf-based codegen integrated with the Maven build system, you can use protobuf-maven-plugin 0.6.1 - com.google.protobuf:protoc:3.25.9:exe:${os.detected.classifier} + com.google.protobuf:protoc:3.25.8:exe:${os.detected.classifier} grpc-java io.grpc:protoc-gen-grpc-java:1.82.1:exe:${os.detected.classifier} @@ -149,7 +149,7 @@ plugins { protobuf { protoc { - artifact = "com.google.protobuf:protoc:3.25.9" + artifact = "com.google.protobuf:protoc:3.25.8" } plugins { grpc { @@ -182,7 +182,7 @@ plugins { protobuf { protoc { - artifact = "com.google.protobuf:protoc:3.25.9" + artifact = "com.google.protobuf:protoc:3.25.8" } plugins { grpc { diff --git a/buildscripts/kokoro/windows32.bat b/buildscripts/kokoro/windows32.bat index c79b1f25f04..90c74a57f1a 100644 --- a/buildscripts/kokoro/windows32.bat +++ b/buildscripts/kokoro/windows32.bat @@ -25,7 +25,7 @@ cd "%WORKSPACE%" SET TARGET_ARCH=x86_32 SET FAIL_ON_WARNINGS=true -SET PROTOBUF_VER=25.6 +SET PROTOBUF_VER=35.1 SET PKG_CONFIG_PATH=%ESCWORKSPACE%\\grpc-java-helper32\\protobuf-%PROTOBUF_VER%\\build\\protobuf-%PROTOBUF_VER%\\lib\\pkgconfig SET VC_PROTOBUF_LIBS=/LIBPATH:%ESCWORKSPACE%\\grpc-java-helper32\\protobuf-%PROTOBUF_VER%\\build\\protobuf-%PROTOBUF_VER%\\lib SET VC_PROTOBUF_INCLUDE=%ESCWORKSPACE%\\grpc-java-helper32\\protobuf-%PROTOBUF_VER%\\build\\protobuf-%PROTOBUF_VER%\\include diff --git a/buildscripts/kokoro/windows64.bat b/buildscripts/kokoro/windows64.bat index cab87a03c4d..dba07807d03 100644 --- a/buildscripts/kokoro/windows64.bat +++ b/buildscripts/kokoro/windows64.bat @@ -24,7 +24,7 @@ cd "%WORKSPACE%" SET TARGET_ARCH=x86_64 SET FAIL_ON_WARNINGS=true -SET PROTOBUF_VER=25.6 +SET PROTOBUF_VER=35.1 SET PKG_CONFIG_PATH=%ESCWORKSPACE%\\grpc-java-helper64\\protobuf-%PROTOBUF_VER%\\build\\protobuf-%PROTOBUF_VER%\\lib\\pkgconfig SET VC_PROTOBUF_LIBS=/LIBPATH:%ESCWORKSPACE%\\grpc-java-helper64\\protobuf-%PROTOBUF_VER%\\build\\protobuf-%PROTOBUF_VER%\\lib SET VC_PROTOBUF_INCLUDE=%ESCWORKSPACE%\\grpc-java-helper64\\protobuf-%PROTOBUF_VER%\\build\\protobuf-%PROTOBUF_VER%\\include diff --git a/buildscripts/make_dependencies.bat b/buildscripts/make_dependencies.bat index cec5b3e71b2..4ff775347a5 100644 --- a/buildscripts/make_dependencies.bat +++ b/buildscripts/make_dependencies.bat @@ -1,8 +1,8 @@ choco install -y pkgconfiglite choco install -y openjdk --version=17.0 set PATH=%PATH%;"c:\Program Files\OpenJDK\jdk-17\bin" -set PROTOBUF_VER=25.6 -set ABSL_VERSION=20230802.1 +set PROTOBUF_VER=35.1 +set ABSL_VERSION=20250127.1 set CMAKE_NAME=cmake-3.26.3-windows-x86_64 if not exist "protobuf-%PROTOBUF_VER%\build\Release\" ( diff --git a/buildscripts/make_dependencies.sh b/buildscripts/make_dependencies.sh index bd003918b59..600e2d40a1b 100755 --- a/buildscripts/make_dependencies.sh +++ b/buildscripts/make_dependencies.sh @@ -3,8 +3,8 @@ # Build protoc set -evux -o pipefail -PROTOBUF_VERSION=25.6 -ABSL_VERSION=20230802.1 +PROTOBUF_VERSION=35.1 +ABSL_VERSION=20250127.1 # ARCH is x86_64 bit unless otherwise specified. ARCH="${ARCH:-x86_64}" diff --git a/examples/example-alts/build.gradle b/examples/example-alts/build.gradle index 2da10b0bb5d..59963c7ca5f 100644 --- a/examples/example-alts/build.gradle +++ b/examples/example-alts/build.gradle @@ -22,7 +22,7 @@ java { // Feel free to delete the comment at the next line. It is just for safely // updating the version in our release process. def grpcVersion = '1.84.0-SNAPSHOT' // CURRENT_GRPC_VERSION -def protocVersion = '3.25.9' +def protocVersion = '3.25.8' dependencies { // grpc-alts transitively depends on grpc-netty-shaded, grpc-protobuf, and grpc-stub diff --git a/examples/example-debug/build.gradle b/examples/example-debug/build.gradle index 141da213e5e..5df4432c518 100644 --- a/examples/example-debug/build.gradle +++ b/examples/example-debug/build.gradle @@ -24,7 +24,7 @@ java { // Feel free to delete the comment at the next line. It is just for safely // updating the version in our release process. def grpcVersion = '1.84.0-SNAPSHOT' // CURRENT_GRPC_VERSION -def protobufVersion = '3.25.9' +def protobufVersion = '3.25.8' dependencies { implementation "io.grpc:grpc-protobuf:${grpcVersion}" diff --git a/examples/example-debug/pom.xml b/examples/example-debug/pom.xml index 0690e59cd91..9b4a24dcbc8 100644 --- a/examples/example-debug/pom.xml +++ b/examples/example-debug/pom.xml @@ -13,7 +13,7 @@ UTF-8 1.84.0-SNAPSHOT - 3.25.9 + 3.25.8 1.8 1.8 diff --git a/examples/example-dualstack/build.gradle b/examples/example-dualstack/build.gradle index 3f744f12077..f9ed301ad67 100644 --- a/examples/example-dualstack/build.gradle +++ b/examples/example-dualstack/build.gradle @@ -24,7 +24,7 @@ java { // Feel free to delete the comment at the next line. It is just for safely // updating the version in our release process. def grpcVersion = '1.84.0-SNAPSHOT' // CURRENT_GRPC_VERSION -def protobufVersion = '3.25.9' +def protobufVersion = '3.25.8' dependencies { implementation "io.grpc:grpc-protobuf:${grpcVersion}" diff --git a/examples/example-dualstack/pom.xml b/examples/example-dualstack/pom.xml index c40421c1c39..6c05aff9759 100644 --- a/examples/example-dualstack/pom.xml +++ b/examples/example-dualstack/pom.xml @@ -13,7 +13,7 @@ UTF-8 1.84.0-SNAPSHOT - 3.25.9 + 3.25.8 1.8 1.8 diff --git a/examples/example-gauth/build.gradle b/examples/example-gauth/build.gradle index 5287819728d..6106f30a981 100644 --- a/examples/example-gauth/build.gradle +++ b/examples/example-gauth/build.gradle @@ -22,7 +22,7 @@ java { // Feel free to delete the comment at the next line. It is just for safely // updating the version in our release process. def grpcVersion = '1.84.0-SNAPSHOT' // CURRENT_GRPC_VERSION -def protobufVersion = '3.25.9' +def protobufVersion = '3.25.8' def protocVersion = protobufVersion diff --git a/examples/example-gauth/pom.xml b/examples/example-gauth/pom.xml index ebde5e22ca7..cd0a395cdde 100644 --- a/examples/example-gauth/pom.xml +++ b/examples/example-gauth/pom.xml @@ -13,7 +13,7 @@ UTF-8 1.84.0-SNAPSHOT - 3.25.9 + 3.25.8 1.8 1.8 diff --git a/examples/example-gcp-csm-observability/build.gradle b/examples/example-gcp-csm-observability/build.gradle index 0084464d4f2..3e9051acd09 100644 --- a/examples/example-gcp-csm-observability/build.gradle +++ b/examples/example-gcp-csm-observability/build.gradle @@ -23,7 +23,7 @@ java { // Feel free to delete the comment at the next line. It is just for safely // updating the version in our release process. def grpcVersion = '1.84.0-SNAPSHOT' // CURRENT_GRPC_VERSION -def protocVersion = '3.25.9' +def protocVersion = '3.25.8' def openTelemetryVersion = '1.63.0' def openTelemetryPrometheusVersion = '1.63.0-alpha' diff --git a/examples/example-gcp-observability/build.gradle b/examples/example-gcp-observability/build.gradle index ab73b99f891..b81bcb6b762 100644 --- a/examples/example-gcp-observability/build.gradle +++ b/examples/example-gcp-observability/build.gradle @@ -23,7 +23,7 @@ java { // Feel free to delete the comment at the next line. It is just for safely // updating the version in our release process. def grpcVersion = '1.84.0-SNAPSHOT' // CURRENT_GRPC_VERSION -def protocVersion = '3.25.9' +def protocVersion = '3.25.8' dependencies { implementation "io.grpc:grpc-protobuf:${grpcVersion}" diff --git a/examples/example-hostname/build.gradle b/examples/example-hostname/build.gradle index cd11db311ef..5926ac1ee08 100644 --- a/examples/example-hostname/build.gradle +++ b/examples/example-hostname/build.gradle @@ -22,7 +22,7 @@ java { // Feel free to delete the comment at the next line. It is just for safely // updating the version in our release process. def grpcVersion = '1.84.0-SNAPSHOT' // CURRENT_GRPC_VERSION -def protobufVersion = '3.25.9' +def protobufVersion = '3.25.8' dependencies { implementation "io.grpc:grpc-protobuf:${grpcVersion}" diff --git a/examples/example-hostname/pom.xml b/examples/example-hostname/pom.xml index c0156044153..5f65084692a 100644 --- a/examples/example-hostname/pom.xml +++ b/examples/example-hostname/pom.xml @@ -13,7 +13,7 @@ UTF-8 1.84.0-SNAPSHOT - 3.25.9 + 3.25.8 1.8 1.8 diff --git a/examples/example-jwt-auth/build.gradle b/examples/example-jwt-auth/build.gradle index 82ffd7c8add..436a17bb079 100644 --- a/examples/example-jwt-auth/build.gradle +++ b/examples/example-jwt-auth/build.gradle @@ -22,7 +22,7 @@ java { // Feel free to delete the comment at the next line. It is just for safely // updating the version in our release process. def grpcVersion = '1.84.0-SNAPSHOT' // CURRENT_GRPC_VERSION -def protobufVersion = '3.25.9' +def protobufVersion = '3.25.8' def protocVersion = protobufVersion dependencies { diff --git a/examples/example-jwt-auth/pom.xml b/examples/example-jwt-auth/pom.xml index 1d0ac563a9a..e198cbaf816 100644 --- a/examples/example-jwt-auth/pom.xml +++ b/examples/example-jwt-auth/pom.xml @@ -14,8 +14,8 @@ UTF-8 1.84.0-SNAPSHOT - 3.25.9 - 3.25.9 + 3.25.8 + 3.25.8 1.8 1.8 diff --git a/examples/example-oauth/build.gradle b/examples/example-oauth/build.gradle index db5d043ec2f..5232e0ace32 100644 --- a/examples/example-oauth/build.gradle +++ b/examples/example-oauth/build.gradle @@ -22,7 +22,7 @@ java { // Feel free to delete the comment at the next line. It is just for safely // updating the version in our release process. def grpcVersion = '1.84.0-SNAPSHOT' // CURRENT_GRPC_VERSION -def protobufVersion = '3.25.9' +def protobufVersion = '3.25.8' def protocVersion = protobufVersion dependencies { diff --git a/examples/example-oauth/pom.xml b/examples/example-oauth/pom.xml index d21f66a5dc6..0401fb38df7 100644 --- a/examples/example-oauth/pom.xml +++ b/examples/example-oauth/pom.xml @@ -14,8 +14,8 @@ UTF-8 1.84.0-SNAPSHOT - 3.25.9 - 3.25.9 + 3.25.8 + 3.25.8 1.8 1.8 diff --git a/examples/example-opentelemetry/build.gradle b/examples/example-opentelemetry/build.gradle index 1173aa27a81..842c9cafe7f 100644 --- a/examples/example-opentelemetry/build.gradle +++ b/examples/example-opentelemetry/build.gradle @@ -22,7 +22,7 @@ java { // Feel free to delete the comment at the next line. It is just for safely // updating the version in our release process. def grpcVersion = '1.84.0-SNAPSHOT' // CURRENT_GRPC_VERSION -def protocVersion = '3.25.9' +def protocVersion = '3.25.8' def openTelemetryVersion = '1.63.0' def openTelemetryPrometheusVersion = '1.63.0-alpha' diff --git a/examples/example-orca/build.gradle b/examples/example-orca/build.gradle index 0f9fd2d385f..ffcd8dd3e99 100644 --- a/examples/example-orca/build.gradle +++ b/examples/example-orca/build.gradle @@ -17,7 +17,7 @@ java { } def grpcVersion = '1.84.0-SNAPSHOT' // CURRENT_GRPC_VERSION -def protocVersion = '3.25.9' +def protocVersion = '3.25.8' dependencies { implementation "io.grpc:grpc-protobuf:${grpcVersion}" diff --git a/examples/example-reflection/build.gradle b/examples/example-reflection/build.gradle index 450ba681046..5f729f534ed 100644 --- a/examples/example-reflection/build.gradle +++ b/examples/example-reflection/build.gradle @@ -17,7 +17,7 @@ java { } def grpcVersion = '1.84.0-SNAPSHOT' // CURRENT_GRPC_VERSION -def protocVersion = '3.25.9' +def protocVersion = '3.25.8' dependencies { implementation "io.grpc:grpc-protobuf:${grpcVersion}" diff --git a/examples/example-servlet/build.gradle b/examples/example-servlet/build.gradle index 3f7733015a2..ce786c8f21e 100644 --- a/examples/example-servlet/build.gradle +++ b/examples/example-servlet/build.gradle @@ -16,7 +16,7 @@ java { } def grpcVersion = '1.84.0-SNAPSHOT' // CURRENT_GRPC_VERSION -def protocVersion = '3.25.9' +def protocVersion = '3.25.8' dependencies { implementation "io.grpc:grpc-protobuf:${grpcVersion}", diff --git a/examples/example-tls/build.gradle b/examples/example-tls/build.gradle index a9bc492832e..57e9923e9ee 100644 --- a/examples/example-tls/build.gradle +++ b/examples/example-tls/build.gradle @@ -22,7 +22,7 @@ java { // Feel free to delete the comment at the next line. It is just for safely // updating the version in our release process. def grpcVersion = '1.84.0-SNAPSHOT' // CURRENT_GRPC_VERSION -def protocVersion = '3.25.9' +def protocVersion = '3.25.8' dependencies { implementation "io.grpc:grpc-protobuf:${grpcVersion}" diff --git a/examples/example-tls/pom.xml b/examples/example-tls/pom.xml index 5015e4037c7..74129e43b0b 100644 --- a/examples/example-tls/pom.xml +++ b/examples/example-tls/pom.xml @@ -13,7 +13,7 @@ UTF-8 1.84.0-SNAPSHOT - 3.25.9 + 3.25.8 1.8 1.8 diff --git a/examples/example-xds/build.gradle b/examples/example-xds/build.gradle index 30a8042ed29..2b894562204 100644 --- a/examples/example-xds/build.gradle +++ b/examples/example-xds/build.gradle @@ -22,7 +22,7 @@ java { // Feel free to delete the comment at the next line. It is just for safely // updating the version in our release process. def grpcVersion = '1.84.0-SNAPSHOT' // CURRENT_GRPC_VERSION -def protocVersion = '3.25.9' +def protocVersion = '3.25.8' dependencies { implementation "io.grpc:grpc-protobuf:${grpcVersion}" diff --git a/interop-testing/build.gradle b/interop-testing/build.gradle index 3f12e0e2c6d..eab52afff78 100644 --- a/interop-testing/build.gradle +++ b/interop-testing/build.gradle @@ -42,12 +42,10 @@ dependencies { runtimeOnly libraries.opencensus.impl, libraries.netty.tcnative, libraries.netty.tcnative.classes, + libraries.opentelemetry.exporter.prometheus, // For xds interop client project(':grpc-googleapis'), project(':grpc-grpclb'), project(':grpc-rls') - runtimeOnly(libraries.opentelemetry.exporter.prometheus) { // For xds interop client - exclude group: 'com.google.protobuf', module: 'protobuf-java' - } testImplementation testFixtures(project(':grpc-api')), testFixtures(project(':grpc-core')), project(':grpc-inprocess'), diff --git a/xds/build.gradle b/xds/build.gradle index 65d340bd123..c6325f7fc2d 100644 --- a/xds/build.gradle +++ b/xds/build.gradle @@ -70,9 +70,7 @@ dependencies { testImplementation project(':grpc-inprocess') testImplementation libraries.opentelemetry.api testImplementation libraries.opentelemetry.sdk.testing - testImplementation(libraries.cel.compiler) { - exclude group: 'com.google.protobuf', module: 'protobuf-java' - } + testImplementation libraries.cel.compiler testImplementation testFixtures(project(':grpc-core')), testFixtures(project(':grpc-api')), testFixtures(project(':grpc-util'))