From 9ee41bfab0e927df1c36da0c57ff6faf54476b17 Mon Sep 17 00:00:00 2001 From: Trask Stalnaker Date: Tue, 19 Aug 2025 10:04:27 -0700 Subject: [PATCH 1/3] Add setComponentLoader to testing infra --- .../internal/GrpcLogRecordExporterBuilderWrapper.java | 8 ++++++++ .../internal/GrpcMetricExporterBuilderWrapper.java | 7 +++++++ .../internal/GrpcProfilesExporterBuilderWrapper.java | 7 +++++++ .../testing/internal/GrpcSpanExporterBuilderWrapper.java | 7 +++++++ .../internal/HttpLogRecordExporterBuilderWrapper.java | 8 ++++++++ .../internal/HttpMetricExporterBuilderWrapper.java | 7 +++++++ .../testing/internal/HttpSpanExporterBuilderWrapper.java | 7 +++++++ .../internal/ManagedChannelTelemetryExporterBuilder.java | 7 +++++++ .../otlp/testing/internal/TelemetryExporterBuilder.java | 3 +++ 9 files changed, 61 insertions(+) diff --git a/exporters/otlp/testing-internal/src/main/java/io/opentelemetry/exporter/otlp/testing/internal/GrpcLogRecordExporterBuilderWrapper.java b/exporters/otlp/testing-internal/src/main/java/io/opentelemetry/exporter/otlp/testing/internal/GrpcLogRecordExporterBuilderWrapper.java index 4ec4f920184..87165e2467d 100644 --- a/exporters/otlp/testing-internal/src/main/java/io/opentelemetry/exporter/otlp/testing/internal/GrpcLogRecordExporterBuilderWrapper.java +++ b/exporters/otlp/testing-internal/src/main/java/io/opentelemetry/exporter/otlp/testing/internal/GrpcLogRecordExporterBuilderWrapper.java @@ -7,6 +7,7 @@ import io.grpc.ManagedChannel; import io.opentelemetry.api.metrics.MeterProvider; +import io.opentelemetry.common.ComponentLoader; import io.opentelemetry.exporter.otlp.logs.OtlpGrpcLogRecordExporterBuilder; import io.opentelemetry.sdk.common.InternalTelemetryVersion; import io.opentelemetry.sdk.common.export.ProxyOptions; @@ -122,6 +123,13 @@ public TelemetryExporterBuilder setServiceClassLoader( return this; } + @Override + public TelemetryExporterBuilder setComponentLoader( + ComponentLoader componentLoader) { + builder.setComponentLoader(componentLoader); + return this; + } + @Override public TelemetryExporterBuilder setExecutorService( ExecutorService executorService) { diff --git a/exporters/otlp/testing-internal/src/main/java/io/opentelemetry/exporter/otlp/testing/internal/GrpcMetricExporterBuilderWrapper.java b/exporters/otlp/testing-internal/src/main/java/io/opentelemetry/exporter/otlp/testing/internal/GrpcMetricExporterBuilderWrapper.java index 873c1e511b8..f0bda1c9ac4 100644 --- a/exporters/otlp/testing-internal/src/main/java/io/opentelemetry/exporter/otlp/testing/internal/GrpcMetricExporterBuilderWrapper.java +++ b/exporters/otlp/testing-internal/src/main/java/io/opentelemetry/exporter/otlp/testing/internal/GrpcMetricExporterBuilderWrapper.java @@ -7,6 +7,7 @@ import io.grpc.ManagedChannel; import io.opentelemetry.api.metrics.MeterProvider; +import io.opentelemetry.common.ComponentLoader; import io.opentelemetry.exporter.otlp.metrics.OtlpGrpcMetricExporterBuilder; import io.opentelemetry.sdk.common.InternalTelemetryVersion; import io.opentelemetry.sdk.common.export.ProxyOptions; @@ -122,6 +123,12 @@ public TelemetryExporterBuilder setServiceClassLoader( return this; } + @Override + public TelemetryExporterBuilder setComponentLoader(ComponentLoader componentLoader) { + builder.setComponentLoader(componentLoader); + return this; + } + @Override public TelemetryExporterBuilder setExecutorService(ExecutorService executorService) { builder.setExecutorService(executorService); diff --git a/exporters/otlp/testing-internal/src/main/java/io/opentelemetry/exporter/otlp/testing/internal/GrpcProfilesExporterBuilderWrapper.java b/exporters/otlp/testing-internal/src/main/java/io/opentelemetry/exporter/otlp/testing/internal/GrpcProfilesExporterBuilderWrapper.java index f5f47692bde..21364ad882e 100644 --- a/exporters/otlp/testing-internal/src/main/java/io/opentelemetry/exporter/otlp/testing/internal/GrpcProfilesExporterBuilderWrapper.java +++ b/exporters/otlp/testing-internal/src/main/java/io/opentelemetry/exporter/otlp/testing/internal/GrpcProfilesExporterBuilderWrapper.java @@ -7,6 +7,7 @@ import io.grpc.ManagedChannel; import io.opentelemetry.api.metrics.MeterProvider; +import io.opentelemetry.common.ComponentLoader; import io.opentelemetry.exporter.otlp.profiles.OtlpGrpcProfilesExporterBuilder; import io.opentelemetry.exporter.otlp.profiles.ProfileData; import io.opentelemetry.sdk.common.InternalTelemetryVersion; @@ -122,6 +123,12 @@ public TelemetryExporterBuilder setServiceClassLoader( return this; } + @Override + public TelemetryExporterBuilder setComponentLoader(ComponentLoader componentLoader) { + builder.setComponentLoader(componentLoader); + return this; + } + @Override public TelemetryExporterBuilder setExecutorService(ExecutorService executorService) { builder.setExecutorService(executorService); diff --git a/exporters/otlp/testing-internal/src/main/java/io/opentelemetry/exporter/otlp/testing/internal/GrpcSpanExporterBuilderWrapper.java b/exporters/otlp/testing-internal/src/main/java/io/opentelemetry/exporter/otlp/testing/internal/GrpcSpanExporterBuilderWrapper.java index 8a1afe962f7..06eb21c5850 100644 --- a/exporters/otlp/testing-internal/src/main/java/io/opentelemetry/exporter/otlp/testing/internal/GrpcSpanExporterBuilderWrapper.java +++ b/exporters/otlp/testing-internal/src/main/java/io/opentelemetry/exporter/otlp/testing/internal/GrpcSpanExporterBuilderWrapper.java @@ -7,6 +7,7 @@ import io.grpc.ManagedChannel; import io.opentelemetry.api.metrics.MeterProvider; +import io.opentelemetry.common.ComponentLoader; import io.opentelemetry.exporter.otlp.trace.OtlpGrpcSpanExporterBuilder; import io.opentelemetry.sdk.common.InternalTelemetryVersion; import io.opentelemetry.sdk.common.export.ProxyOptions; @@ -122,6 +123,12 @@ public TelemetryExporterBuilder setServiceClassLoader(ClassLoader serv return this; } + @Override + public TelemetryExporterBuilder setComponentLoader(ComponentLoader componentLoader) { + builder.setComponentLoader(componentLoader); + return this; + } + @Override public TelemetryExporterBuilder setExecutorService(ExecutorService executorService) { builder.setExecutorService(executorService); diff --git a/exporters/otlp/testing-internal/src/main/java/io/opentelemetry/exporter/otlp/testing/internal/HttpLogRecordExporterBuilderWrapper.java b/exporters/otlp/testing-internal/src/main/java/io/opentelemetry/exporter/otlp/testing/internal/HttpLogRecordExporterBuilderWrapper.java index cfd9655843d..8963b2c21b0 100644 --- a/exporters/otlp/testing-internal/src/main/java/io/opentelemetry/exporter/otlp/testing/internal/HttpLogRecordExporterBuilderWrapper.java +++ b/exporters/otlp/testing-internal/src/main/java/io/opentelemetry/exporter/otlp/testing/internal/HttpLogRecordExporterBuilderWrapper.java @@ -6,6 +6,7 @@ package io.opentelemetry.exporter.otlp.testing.internal; import io.opentelemetry.api.metrics.MeterProvider; +import io.opentelemetry.common.ComponentLoader; import io.opentelemetry.exporter.otlp.http.logs.OtlpHttpLogRecordExporterBuilder; import io.opentelemetry.sdk.common.InternalTelemetryVersion; import io.opentelemetry.sdk.common.export.ProxyOptions; @@ -122,6 +123,13 @@ public TelemetryExporterBuilder setServiceClassLoader( return this; } + @Override + public TelemetryExporterBuilder setComponentLoader( + ComponentLoader componentLoader) { + builder.setComponentLoader(componentLoader); + return this; + } + @Override public TelemetryExporterBuilder setExecutorService( ExecutorService executorService) { diff --git a/exporters/otlp/testing-internal/src/main/java/io/opentelemetry/exporter/otlp/testing/internal/HttpMetricExporterBuilderWrapper.java b/exporters/otlp/testing-internal/src/main/java/io/opentelemetry/exporter/otlp/testing/internal/HttpMetricExporterBuilderWrapper.java index f30c1068d4c..e9152cfac0c 100644 --- a/exporters/otlp/testing-internal/src/main/java/io/opentelemetry/exporter/otlp/testing/internal/HttpMetricExporterBuilderWrapper.java +++ b/exporters/otlp/testing-internal/src/main/java/io/opentelemetry/exporter/otlp/testing/internal/HttpMetricExporterBuilderWrapper.java @@ -6,6 +6,7 @@ package io.opentelemetry.exporter.otlp.testing.internal; import io.opentelemetry.api.metrics.MeterProvider; +import io.opentelemetry.common.ComponentLoader; import io.opentelemetry.exporter.otlp.http.metrics.OtlpHttpMetricExporterBuilder; import io.opentelemetry.sdk.common.InternalTelemetryVersion; import io.opentelemetry.sdk.common.export.ProxyOptions; @@ -121,6 +122,12 @@ public TelemetryExporterBuilder setServiceClassLoader( return this; } + @Override + public TelemetryExporterBuilder setComponentLoader(ComponentLoader componentLoader) { + builder.setComponentLoader(componentLoader); + return this; + } + @Override public TelemetryExporterBuilder setExecutorService(ExecutorService executorService) { builder.setExecutorService(executorService); diff --git a/exporters/otlp/testing-internal/src/main/java/io/opentelemetry/exporter/otlp/testing/internal/HttpSpanExporterBuilderWrapper.java b/exporters/otlp/testing-internal/src/main/java/io/opentelemetry/exporter/otlp/testing/internal/HttpSpanExporterBuilderWrapper.java index 82c64f9451f..d3a51130ff6 100644 --- a/exporters/otlp/testing-internal/src/main/java/io/opentelemetry/exporter/otlp/testing/internal/HttpSpanExporterBuilderWrapper.java +++ b/exporters/otlp/testing-internal/src/main/java/io/opentelemetry/exporter/otlp/testing/internal/HttpSpanExporterBuilderWrapper.java @@ -6,6 +6,7 @@ package io.opentelemetry.exporter.otlp.testing.internal; import io.opentelemetry.api.metrics.MeterProvider; +import io.opentelemetry.common.ComponentLoader; import io.opentelemetry.exporter.otlp.http.trace.OtlpHttpSpanExporterBuilder; import io.opentelemetry.sdk.common.InternalTelemetryVersion; import io.opentelemetry.sdk.common.export.ProxyOptions; @@ -120,6 +121,12 @@ public TelemetryExporterBuilder setServiceClassLoader(ClassLoader serv return this; } + @Override + public TelemetryExporterBuilder setComponentLoader(ComponentLoader componentLoader) { + builder.setComponentLoader(componentLoader); + return this; + } + @Override public TelemetryExporterBuilder setExecutorService(ExecutorService executorService) { builder.setExecutorService(executorService); diff --git a/exporters/otlp/testing-internal/src/main/java/io/opentelemetry/exporter/otlp/testing/internal/ManagedChannelTelemetryExporterBuilder.java b/exporters/otlp/testing-internal/src/main/java/io/opentelemetry/exporter/otlp/testing/internal/ManagedChannelTelemetryExporterBuilder.java index 5e37fa7df2a..f8b89a0ed36 100644 --- a/exporters/otlp/testing-internal/src/main/java/io/opentelemetry/exporter/otlp/testing/internal/ManagedChannelTelemetryExporterBuilder.java +++ b/exporters/otlp/testing-internal/src/main/java/io/opentelemetry/exporter/otlp/testing/internal/ManagedChannelTelemetryExporterBuilder.java @@ -13,6 +13,7 @@ import io.grpc.netty.NettyChannelBuilder; import io.netty.handler.ssl.SslContext; import io.opentelemetry.api.metrics.MeterProvider; +import io.opentelemetry.common.ComponentLoader; import io.opentelemetry.exporter.internal.TlsConfigHelper; import io.opentelemetry.exporter.internal.grpc.ManagedChannelUtil; import io.opentelemetry.exporter.otlp.internal.OtlpUserAgent; @@ -168,6 +169,12 @@ public TelemetryExporterBuilder setServiceClassLoader(ClassLoader serviceClas return this; } + @Override + public TelemetryExporterBuilder setComponentLoader(ComponentLoader componentLoader) { + delegate.setComponentLoader(componentLoader); + return this; + } + @Override public TelemetryExporterBuilder setExecutorService(ExecutorService executorService) { delegate.setExecutorService(executorService); diff --git a/exporters/otlp/testing-internal/src/main/java/io/opentelemetry/exporter/otlp/testing/internal/TelemetryExporterBuilder.java b/exporters/otlp/testing-internal/src/main/java/io/opentelemetry/exporter/otlp/testing/internal/TelemetryExporterBuilder.java index c00886e9127..0ecac66d031 100644 --- a/exporters/otlp/testing-internal/src/main/java/io/opentelemetry/exporter/otlp/testing/internal/TelemetryExporterBuilder.java +++ b/exporters/otlp/testing-internal/src/main/java/io/opentelemetry/exporter/otlp/testing/internal/TelemetryExporterBuilder.java @@ -6,6 +6,7 @@ package io.opentelemetry.exporter.otlp.testing.internal; import io.opentelemetry.api.metrics.MeterProvider; +import io.opentelemetry.common.ComponentLoader; import io.opentelemetry.exporter.otlp.logs.OtlpGrpcLogRecordExporterBuilder; import io.opentelemetry.exporter.otlp.metrics.OtlpGrpcMetricExporterBuilder; import io.opentelemetry.exporter.otlp.profiles.OtlpGrpcProfilesExporterBuilder; @@ -74,6 +75,8 @@ static TelemetryExporterBuilder wrap(OtlpGrpcProfilesExporterBuilde TelemetryExporterBuilder setServiceClassLoader(ClassLoader serviceClassLoader); + TelemetryExporterBuilder setComponentLoader(ComponentLoader componentLoader); + TelemetryExporterBuilder setExecutorService(ExecutorService executorService); TelemetryExporterBuilder setMeterProvider(Supplier meterProviderSupplier); From d347810ab5fd651b4f6edcb632fceb104b7541f3 Mon Sep 17 00:00:00 2001 From: Trask Stalnaker Date: Tue, 19 Aug 2025 10:32:51 -0700 Subject: [PATCH 2/3] Make the test fail --- .../testing/internal/AbstractHttpTelemetryExporterTest.java | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/exporters/otlp/testing-internal/src/main/java/io/opentelemetry/exporter/otlp/testing/internal/AbstractHttpTelemetryExporterTest.java b/exporters/otlp/testing-internal/src/main/java/io/opentelemetry/exporter/otlp/testing/internal/AbstractHttpTelemetryExporterTest.java index e73fb3683f8..4714ea5a542 100644 --- a/exporters/otlp/testing-internal/src/main/java/io/opentelemetry/exporter/otlp/testing/internal/AbstractHttpTelemetryExporterTest.java +++ b/exporters/otlp/testing-internal/src/main/java/io/opentelemetry/exporter/otlp/testing/internal/AbstractHttpTelemetryExporterTest.java @@ -27,6 +27,7 @@ import com.linecorp.armeria.testing.junit5.server.SelfSignedCertificateExtension; import com.linecorp.armeria.testing.junit5.server.ServerExtension; import io.github.netmikey.logunit.api.LogCapturer; +import io.opentelemetry.common.ComponentLoader; import io.opentelemetry.exporter.internal.FailedExportException; import io.opentelemetry.exporter.internal.TlsUtil; import io.opentelemetry.exporter.internal.compression.GzipCompressor; @@ -839,6 +840,7 @@ void toBuilderEquality() .setInitialBackoff(Duration.ofMillis(50)) .setBackoffMultiplier(1.3) .build()) + .setComponentLoader(ComponentLoader.forClassLoader(new ClassLoader() {})) .build()) { Object unwrapped = exporter.unwrap(); Field builderField = unwrapped.getClass().getDeclaredField("builder"); @@ -850,6 +852,7 @@ void toBuilderEquality() assertThat(copy.unwrap()) .extracting("builder") .usingRecursiveComparison() + .withStrictTypeChecking() .ignoringFields("tlsConfigHelper") .isEqualTo(builderField.get(unwrapped)); } finally { @@ -862,6 +865,7 @@ void toBuilderEquality() assertThat(copy.unwrap()) .extracting("builder") .usingRecursiveComparison() + .withStrictTypeChecking() .ignoringFields("tlsConfigHelper") .isNotEqualTo(builderField.get(unwrapped)); } finally { From f86ede70b65a8d1d2b523e3cc4c4811bef54bcb4 Mon Sep 17 00:00:00 2001 From: Trask Stalnaker Date: Tue, 19 Aug 2025 11:21:07 -0700 Subject: [PATCH 3/3] Fix --- .../exporter/internal/grpc/GrpcExporterBuilder.java | 1 + .../exporter/internal/http/HttpExporterBuilder.java | 1 + 2 files changed, 2 insertions(+) diff --git a/exporters/common/src/main/java/io/opentelemetry/exporter/internal/grpc/GrpcExporterBuilder.java b/exporters/common/src/main/java/io/opentelemetry/exporter/internal/grpc/GrpcExporterBuilder.java index 27d06b7116b..499839d7a0b 100644 --- a/exporters/common/src/main/java/io/opentelemetry/exporter/internal/grpc/GrpcExporterBuilder.java +++ b/exporters/common/src/main/java/io/opentelemetry/exporter/internal/grpc/GrpcExporterBuilder.java @@ -205,6 +205,7 @@ public GrpcExporterBuilder copy() { copy.meterProviderSupplier = meterProviderSupplier; copy.internalTelemetryVersion = internalTelemetryVersion; copy.grpcChannel = grpcChannel; + copy.componentLoader = componentLoader; return copy; } diff --git a/exporters/common/src/main/java/io/opentelemetry/exporter/internal/http/HttpExporterBuilder.java b/exporters/common/src/main/java/io/opentelemetry/exporter/internal/http/HttpExporterBuilder.java index 42d55cb0a2c..3d9a6238e01 100644 --- a/exporters/common/src/main/java/io/opentelemetry/exporter/internal/http/HttpExporterBuilder.java +++ b/exporters/common/src/main/java/io/opentelemetry/exporter/internal/http/HttpExporterBuilder.java @@ -204,6 +204,7 @@ public HttpExporterBuilder copy() { copy.meterProviderSupplier = meterProviderSupplier; copy.internalTelemetryVersion = internalTelemetryVersion; copy.proxyOptions = proxyOptions; + copy.componentLoader = componentLoader; return copy; }