diff --git a/dynamic-control/src/main/java/io/opentelemetry/contrib/dynamic/policy/registry/PolicyInit.java b/dynamic-control/src/main/java/io/opentelemetry/contrib/dynamic/policy/registry/PolicyInit.java index 62e21f8a3..6d1b15247 100644 --- a/dynamic-control/src/main/java/io/opentelemetry/contrib/dynamic/policy/registry/PolicyInit.java +++ b/dynamic-control/src/main/java/io/opentelemetry/contrib/dynamic/policy/registry/PolicyInit.java @@ -13,6 +13,7 @@ import io.opentelemetry.contrib.dynamic.policy.PolicyTypeInitializer; import io.opentelemetry.contrib.dynamic.policy.PolicyValidator; import io.opentelemetry.contrib.dynamic.policy.TelemetryPolicy; +import io.opentelemetry.contrib.dynamic.policy.tracesampling.TraceSamplingRatePolicy; import io.opentelemetry.sdk.autoconfigure.spi.AutoConfigurationCustomizer; import io.opentelemetry.sdk.autoconfigure.spi.ConfigProperties; import java.io.Closeable; @@ -65,9 +66,8 @@ public final class PolicyInit { private static final PolicyStore policyStore = new PolicyStore(); static { - // For now, policies will be registered here. - // TODO: register TraceSamplingRatePolicy when registerPolicyType implemented - // TraceSamplingRatePolicy.registerPolicyType(); + // For now, policies will be registered here. TODO: move to a more dynamic way. + TraceSamplingRatePolicy.registerPolicyType(); } /** diff --git a/dynamic-control/src/main/java/io/opentelemetry/contrib/dynamic/policy/tracesampling/TraceSamplingRatePolicy.java b/dynamic-control/src/main/java/io/opentelemetry/contrib/dynamic/policy/tracesampling/TraceSamplingRatePolicy.java index 525b445dd..5840a31ff 100644 --- a/dynamic-control/src/main/java/io/opentelemetry/contrib/dynamic/policy/tracesampling/TraceSamplingRatePolicy.java +++ b/dynamic-control/src/main/java/io/opentelemetry/contrib/dynamic/policy/tracesampling/TraceSamplingRatePolicy.java @@ -5,7 +5,9 @@ package io.opentelemetry.contrib.dynamic.policy.tracesampling; +import io.opentelemetry.contrib.dynamic.policy.PolicyImplementer; import io.opentelemetry.contrib.dynamic.policy.TelemetryPolicy; +import io.opentelemetry.contrib.dynamic.policy.registry.PolicyInit; import io.opentelemetry.sdk.autoconfigure.spi.AutoConfigurationCustomizer; import io.opentelemetry.sdk.extension.incubator.trace.samplers.ComposableSampler; import io.opentelemetry.sdk.extension.incubator.trace.samplers.CompositeSampler; @@ -35,12 +37,18 @@ public double getProbability() { *
If the extension is configured to use this policy, this installs an opinionated sampler that
* overrides any other sampler
*/
- public static void initialize(AutoConfigurationCustomizer autoConfiguration) {
+ public static PolicyImplementer initialize(AutoConfigurationCustomizer autoConfiguration) {
Objects.requireNonNull(autoConfiguration, "autoConfiguration cannot be null");
Sampler initialDelegate = createSampler(1.0);
DelegatingSampler delegatingSampler = new DelegatingSampler(initialDelegate);
initializedSampler = delegatingSampler;
autoConfiguration.addSamplerCustomizer((sampler, config) -> delegatingSampler);
+ return new TraceSamplingRatePolicyImplementer(delegatingSampler);
+ }
+
+ public static void registerPolicyType() {
+ PolicyInit.registerPolicyType(
+ POLICY_TYPE, TraceSamplingRatePolicy.class, TraceSamplingRatePolicy::initialize);
}
/**
@@ -69,6 +77,10 @@ public static DelegatingSampler getInitializedSampler() {
return initializedSampler;
}
+ static void resetForTest() {
+ initializedSampler = null;
+ }
+
@Override
public boolean equals(Object obj) {
if (this == obj) {
diff --git a/dynamic-control/src/test/java/io/opentelemetry/contrib/dynamic/policy/registry/PolicyInitConfigTest.java b/dynamic-control/src/test/java/io/opentelemetry/contrib/dynamic/policy/registry/PolicyInitConfigTest.java
index c82254aa7..e18ff67bb 100644
--- a/dynamic-control/src/test/java/io/opentelemetry/contrib/dynamic/policy/registry/PolicyInitConfigTest.java
+++ b/dynamic-control/src/test/java/io/opentelemetry/contrib/dynamic/policy/registry/PolicyInitConfigTest.java
@@ -89,7 +89,7 @@ void readFromConfigPropertiesReadsJsonWhenYamlPathMissing() throws Exception {
assertThat(source.getLocation()).isEqualTo("vendor");
assertThat(source.getMappings()).hasSize(1);
assertThat(source.getMappings().get(0).getSourceKey()).isEqualTo("sampling_rate");
- assertThat(source.getMappings().get(0).getPolicyType()).isEqualTo("trace_sampling_rate_policy");
+ assertThat(source.getMappings().get(0).getPolicyType()).isEqualTo("trace-sampling");
}
@Test
@@ -191,7 +191,7 @@ void readFromDeclarativeConfigPropertiesReadsTelemetryPolicySources() {
assertThat(source.getLocation()).isEqualTo("from-declarative");
assertThat(source.getMappings()).hasSize(1);
assertThat(source.getMappings().get(0).getSourceKey()).isEqualTo("sampling_rate");
- assertThat(source.getMappings().get(0).getPolicyType()).isEqualTo("trace_sampling_rate_policy");
+ assertThat(source.getMappings().get(0).getPolicyType()).isEqualTo("trace-sampling");
}
@Test
@@ -428,7 +428,7 @@ private static DeclarativeConfigProperties mappingConfig() {
when(mapping.getString(PolicyInitConfig.SOURCE_KEY_DECLARATIVE_KEY))
.thenReturn("sampling_rate");
when(mapping.getString(PolicyInitConfig.POLICY_TYPE_DECLARATIVE_KEY))
- .thenReturn("trace_sampling_rate_policy");
+ .thenReturn("trace-sampling");
return mapping;
}
@@ -453,13 +453,13 @@ public DeclarativeConfigProperties getGeneralConfig() {
private static String minimalJsonConfig() {
return "{\"sources\":[{\"kind\":\"opamp\",\"format\":\"jsonkeyvalue\",\"location\":\"vendor\","
- + "\"mappings\":[{\"sourceKey\":\"sampling_rate\",\"policyType\":\"trace_sampling_rate_policy\"}]}]}";
+ + "\"mappings\":[{\"sourceKey\":\"sampling_rate\",\"policyType\":\"trace-sampling\"}]}]}";
}
private static String jsonWithLocation(String location) {
return "{\"sources\":[{\"kind\":\"opamp\",\"format\":\"jsonkeyvalue\",\"location\":\""
+ location
- + "\",\"mappings\":[{\"sourceKey\":\"sampling_rate\",\"policyType\":\"trace_sampling_rate_policy\"}]}]}";
+ + "\",\"mappings\":[{\"sourceKey\":\"sampling_rate\",\"policyType\":\"trace-sampling\"}]}]}";
}
private static String minimalYamlConfig() {
@@ -469,7 +469,7 @@ private static String minimalYamlConfig() {
+ " location: vendor\n"
+ " mappings:\n"
+ " - sourceKey: sampling_rate\n"
- + " policyType: trace_sampling_rate_policy\n";
+ + " policyType: trace-sampling\n";
}
private static String yamlWithLocation(String location) {
@@ -481,6 +481,6 @@ private static String yamlWithLocation(String location) {
+ "\n"
+ " mappings:\n"
+ " - sourceKey: sampling_rate\n"
- + " policyType: trace_sampling_rate_policy\n";
+ + " policyType: trace-sampling\n";
}
}
diff --git a/dynamic-control/src/test/java/io/opentelemetry/contrib/dynamic/policy/registry/PolicyInitTest.java b/dynamic-control/src/test/java/io/opentelemetry/contrib/dynamic/policy/registry/PolicyInitTest.java
new file mode 100644
index 000000000..da0331c88
--- /dev/null
+++ b/dynamic-control/src/test/java/io/opentelemetry/contrib/dynamic/policy/registry/PolicyInitTest.java
@@ -0,0 +1,137 @@
+/*
+ * Copyright The OpenTelemetry Authors
+ * SPDX-License-Identifier: Apache-2.0
+ */
+
+package io.opentelemetry.contrib.dynamic.policy.registry;
+
+import static org.assertj.core.api.Assertions.assertThat;
+import static org.assertj.core.api.Assertions.assertThatThrownBy;
+import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.verify;
+import static org.mockito.Mockito.when;
+
+import io.opentelemetry.api.incubator.config.DeclarativeConfigProperties;
+import io.opentelemetry.contrib.dynamic.policy.tracesampling.TraceSamplingRatePolicy;
+import io.opentelemetry.sdk.autoconfigure.spi.AutoConfigurationCustomizer;
+import io.opentelemetry.sdk.autoconfigure.spi.ConfigProperties;
+import java.lang.reflect.Method;
+import java.nio.charset.StandardCharsets;
+import java.nio.file.Files;
+import java.nio.file.Path;
+import java.util.Collections;
+import java.util.Map;
+import java.util.function.Function;
+import org.junit.jupiter.api.AfterEach;
+import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.io.TempDir;
+import org.mockito.ArgumentCaptor;
+
+class PolicyInitTest {
+ @TempDir Path tempDir;
+
+ @AfterEach
+ void tearDown() throws Exception {
+ PolicyInit.resetForTest();
+ invokeStaticNoArg(TraceSamplingRatePolicy.class, "resetForTest");
+ }
+
+ @Test
+ void doesNotInitializePolicyFromDeclarativeOnlyConfigInAutoConfigurationMode() {
+ AutoConfigurationCustomizer customizer = mock(AutoConfigurationCustomizer.class);
+ PolicyInit.init(customizer);
+ Function