diff --git a/sdk-extensions/autoconfigure/build.gradle.kts b/sdk-extensions/autoconfigure/build.gradle.kts index 2a9fa1592a..9fb2ef5d01 100644 --- a/sdk-extensions/autoconfigure/build.gradle.kts +++ b/sdk-extensions/autoconfigure/build.gradle.kts @@ -71,6 +71,7 @@ testing { implementation(project(":exporters:zipkin")) implementation(project(":sdk:testing")) implementation(project(":sdk:trace-shaded-deps")) + implementation(project(":sdk-extensions:jaeger-remote-sampler")) implementation(project(":semconv")) implementation("com.google.guava:guava") diff --git a/sdk-extensions/autoconfigure/src/main/java/io/opentelemetry/sdk/autoconfigure/TracerProviderConfiguration.java b/sdk-extensions/autoconfigure/src/main/java/io/opentelemetry/sdk/autoconfigure/TracerProviderConfiguration.java index 8493fe1361..28d7be1741 100644 --- a/sdk-extensions/autoconfigure/src/main/java/io/opentelemetry/sdk/autoconfigure/TracerProviderConfiguration.java +++ b/sdk-extensions/autoconfigure/src/main/java/io/opentelemetry/sdk/autoconfigure/TracerProviderConfiguration.java @@ -171,6 +171,13 @@ final class TracerProviderConfiguration { config.getDouble("otel.traces.sampler.arg", DEFAULT_TRACEIDRATIO_SAMPLE_RATIO); return Sampler.parentBased(Sampler.traceIdRatioBased(ratio)); } + case "parentbased_jaeger_remote": + Sampler jaegerRemote = spiSamplersManager.getByName("jaeger_remote"); + if (jaegerRemote == null) { + throw new ConfigurationException( + "parentbased_jaeger_remote configured but opentelemetry-sdk-extension-jaeger-remote-sampler not on classpath"); + } + return Sampler.parentBased(jaegerRemote); default: Sampler spiSampler = spiSamplersManager.getByName(sampler); if (spiSampler == null) { diff --git a/sdk-extensions/autoconfigure/src/test/java/io/opentelemetry/sdk/autoconfigure/TracerProviderConfigurationTest.java b/sdk-extensions/autoconfigure/src/test/java/io/opentelemetry/sdk/autoconfigure/TracerProviderConfigurationTest.java index db56602d21..9d082b0b26 100644 --- a/sdk-extensions/autoconfigure/src/test/java/io/opentelemetry/sdk/autoconfigure/TracerProviderConfigurationTest.java +++ b/sdk-extensions/autoconfigure/src/test/java/io/opentelemetry/sdk/autoconfigure/TracerProviderConfigurationTest.java @@ -246,5 +246,14 @@ class TracerProviderConfigurationTest { "catsampler", EMPTY, TracerProviderConfiguration.class.getClassLoader())) .isInstanceOf(ConfigurationException.class) .hasMessage("Unrecognized value for otel.traces.sampler: catsampler"); + assertThatThrownBy( + () -> + TracerProviderConfiguration.configureSampler( + "parentbased_jaeger_remote", + EMPTY, + TracerProviderConfiguration.class.getClassLoader())) + .isInstanceOf(ConfigurationException.class) + .hasMessage( + "parentbased_jaeger_remote configured but opentelemetry-sdk-extension-jaeger-remote-sampler not on classpath"); } } diff --git a/sdk-extensions/autoconfigure/src/testFullConfig/java/io/opentelemetry/sdk/autoconfigure/ConfigurableSamplerTest.java b/sdk-extensions/autoconfigure/src/testFullConfig/java/io/opentelemetry/sdk/autoconfigure/TracerProviderConfigurationTest.java similarity index 75% rename from sdk-extensions/autoconfigure/src/testFullConfig/java/io/opentelemetry/sdk/autoconfigure/ConfigurableSamplerTest.java rename to sdk-extensions/autoconfigure/src/testFullConfig/java/io/opentelemetry/sdk/autoconfigure/TracerProviderConfigurationTest.java index 43520c9ff8..7ae855b9d9 100644 --- a/sdk-extensions/autoconfigure/src/testFullConfig/java/io/opentelemetry/sdk/autoconfigure/ConfigurableSamplerTest.java +++ b/sdk-extensions/autoconfigure/src/testFullConfig/java/io/opentelemetry/sdk/autoconfigure/TracerProviderConfigurationTest.java @@ -13,13 +13,14 @@ import io.opentelemetry.sdk.autoconfigure.provider.TestConfigurableSamplerProvid import io.opentelemetry.sdk.autoconfigure.spi.ConfigProperties; import io.opentelemetry.sdk.autoconfigure.spi.ConfigurationException; import io.opentelemetry.sdk.autoconfigure.spi.internal.DefaultConfigProperties; +import io.opentelemetry.sdk.extension.trace.jaeger.sampler.JaegerRemoteSampler; import io.opentelemetry.sdk.trace.samplers.Sampler; import java.net.URL; import java.net.URLClassLoader; import java.util.Collections; import org.junit.jupiter.api.Test; -public class ConfigurableSamplerTest { +public class TracerProviderConfigurationTest { @Test void configuration() { @@ -58,4 +59,18 @@ public class ConfigurableSamplerTest { .isInstanceOf(ConfigurationException.class) .hasMessageContaining("catSampler"); } + + @Test + void configureSampler_JaegerRemoteSampler() { + assertThat( + TracerProviderConfiguration.configureSampler( + "parentbased_jaeger_remote", + DefaultConfigProperties.createForTest(Collections.emptyMap()), + TracerProviderConfigurationTest.class.getClassLoader())) + .satisfies( + sampler -> { + assertThat(sampler.getClass().getSimpleName()).isEqualTo("ParentBasedSampler"); + assertThat(sampler).extracting("root").isInstanceOf(JaegerRemoteSampler.class); + }); + } }