diff --git a/instrumentation-api/src/main/java/io/opentelemetry/instrumentation/api/instrumenter/InstrumenterBuilder.java b/instrumentation-api/src/main/java/io/opentelemetry/instrumentation/api/instrumenter/InstrumenterBuilder.java
index 88e90510e91a..fac25b75c85c 100644
--- a/instrumentation-api/src/main/java/io/opentelemetry/instrumentation/api/instrumenter/InstrumenterBuilder.java
+++ b/instrumentation-api/src/main/java/io/opentelemetry/instrumentation/api/instrumenter/InstrumenterBuilder.java
@@ -22,7 +22,7 @@
import io.opentelemetry.context.Context;
import io.opentelemetry.context.propagation.TextMapGetter;
import io.opentelemetry.context.propagation.TextMapSetter;
-import io.opentelemetry.instrumentation.api.internal.ConfigPropertiesUtil;
+import io.opentelemetry.instrumentation.api.internal.DeprecatedLibraryConfigPropertiesUtil;
import io.opentelemetry.instrumentation.api.internal.EmbeddedInstrumentationProperties;
import io.opentelemetry.instrumentation.api.internal.Experimental;
import io.opentelemetry.instrumentation.api.internal.InstrumenterBuilderAccess;
@@ -386,10 +386,12 @@ private String getSpanSuppressionStrategy() {
.getConfigProvider()
.getInstrumentationConfig("common");
}
+
+ @SuppressWarnings("deprecation") // using deprecated config property
String result =
commonConfig.getString(
"span_suppression_strategy/development",
- ConfigPropertiesUtil.getString(
+ DeprecatedLibraryConfigPropertiesUtil.getString(
"otel.instrumentation.experimental.span-suppression-strategy", ""));
return result.isEmpty() ? null : result;
}
diff --git a/instrumentation-api/src/main/java/io/opentelemetry/instrumentation/api/internal/ContextPropagationDebug.java b/instrumentation-api/src/main/java/io/opentelemetry/instrumentation/api/internal/ContextPropagationDebug.java
index cf698069fc05..ebe1fa48db84 100644
--- a/instrumentation-api/src/main/java/io/opentelemetry/instrumentation/api/internal/ContextPropagationDebug.java
+++ b/instrumentation-api/src/main/java/io/opentelemetry/instrumentation/api/internal/ContextPropagationDebug.java
@@ -32,13 +32,17 @@ public final class ContextPropagationDebug {
private static final boolean FAIL_ON_CONTEXT_LEAK;
static {
- boolean agentDebugEnabled = ConfigPropertiesUtil.getBoolean("otel.javaagent.debug", false);
+ THREAD_PROPAGATION_DEBUGGER = isDebuggerEnabled();
+ FAIL_ON_CONTEXT_LEAK = Boolean.getBoolean("otel.javaagent.testing.fail-on-context-leak");
+ }
- THREAD_PROPAGATION_DEBUGGER =
- ConfigPropertiesUtil.getBoolean(
- "otel.javaagent.experimental.thread-propagation-debugger.enabled", agentDebugEnabled);
- FAIL_ON_CONTEXT_LEAK =
- ConfigPropertiesUtil.getBoolean("otel.javaagent.testing.fail-on-context-leak", false);
+ private static boolean isDebuggerEnabled() {
+ String enabled =
+ System.getProperty("otel.javaagent.testing.thread-propagation-debugger.enabled");
+ if (enabled != null) {
+ return Boolean.parseBoolean(enabled);
+ }
+ return DebugUtil.isAgentDebugEnabled();
}
// context to which debug locations were added
diff --git a/instrumentation-api/src/main/java/io/opentelemetry/instrumentation/api/internal/DebugUtil.java b/instrumentation-api/src/main/java/io/opentelemetry/instrumentation/api/internal/DebugUtil.java
new file mode 100644
index 000000000000..615b046868e8
--- /dev/null
+++ b/instrumentation-api/src/main/java/io/opentelemetry/instrumentation/api/internal/DebugUtil.java
@@ -0,0 +1,19 @@
+/*
+ * Copyright The OpenTelemetry Authors
+ * SPDX-License-Identifier: Apache-2.0
+ */
+
+package io.opentelemetry.instrumentation.api.internal;
+
+/**
+ * This class is internal and is hence not for public use. Its APIs are unstable and can change at
+ * any time.
+ */
+public class DebugUtil {
+
+ static boolean isAgentDebugEnabled() {
+ return Boolean.parseBoolean(SemconvStability.getString("otel.javaagent.debug"));
+ }
+
+ private DebugUtil() {}
+}
diff --git a/instrumentation-api/src/main/java/io/opentelemetry/instrumentation/api/internal/ConfigPropertiesUtil.java b/instrumentation-api/src/main/java/io/opentelemetry/instrumentation/api/internal/DeprecatedLibraryConfigPropertiesUtil.java
similarity index 64%
rename from instrumentation-api/src/main/java/io/opentelemetry/instrumentation/api/internal/ConfigPropertiesUtil.java
rename to instrumentation-api/src/main/java/io/opentelemetry/instrumentation/api/internal/DeprecatedLibraryConfigPropertiesUtil.java
index 81962afbf656..34347674eb3a 100644
--- a/instrumentation-api/src/main/java/io/opentelemetry/instrumentation/api/internal/ConfigPropertiesUtil.java
+++ b/instrumentation-api/src/main/java/io/opentelemetry/instrumentation/api/internal/DeprecatedLibraryConfigPropertiesUtil.java
@@ -15,15 +15,16 @@
* This class is internal and is hence not for public use. Its APIs are unstable and can change at
* any time.
*/
-public final class ConfigPropertiesUtil {
+public final class DeprecatedLibraryConfigPropertiesUtil {
/**
* Returns the boolean value of the given property name from system properties and environment
* variables.
*
- *
It's recommended to use {@link io.opentelemetry.api.incubator.config.ConfigProvider} instead
- * to support Declarative Config.
+ * @deprecated allows library configuration via system properties and environment variables, which
+ * will be removed in 3.0.
*/
+ @Deprecated
public static boolean getBoolean(String propertyName, boolean defaultValue) {
Boolean value = getBoolean(propertyName);
return value == null ? defaultValue : value;
@@ -33,43 +34,26 @@ public static boolean getBoolean(String propertyName, boolean defaultValue) {
* Returns the boolean value of the given property name from system properties and environment
* variables.
*
- *
It's recommended to use {@link io.opentelemetry.api.incubator.config.ConfigProvider} instead
- * to support Declarative Config.
+ * @deprecated allows library configuration via system properties and environment variables, which
+ * will be removed in 3.0.
*/
@Nullable
+ @Deprecated
public static Boolean getBoolean(String propertyName) {
String strValue = getString(propertyName);
return strValue == null ? null : Boolean.parseBoolean(strValue);
}
- /**
- * Returns the int value of the given property name from system properties and environment
- * variables.
- *
- *
It's recommended to use {@link io.opentelemetry.api.incubator.config.ConfigProvider} instead
- * to support Declarative Config.
- */
- public static int getInt(String propertyName, int defaultValue) {
- String strValue = getString(propertyName);
- if (strValue == null) {
- return defaultValue;
- }
- try {
- return Integer.parseInt(strValue);
- } catch (NumberFormatException ignored) {
- return defaultValue;
- }
- }
-
/**
* Returns the string value of the given property name from system properties and environment
* variables.
*
- *
It's recommended to use {@link io.opentelemetry.api.incubator.config.ConfigProvider} instead
- * to support Declarative Config.
+ * @deprecated allows library configuration via system properties and environment variables, which
+ * will be removed in 3.0.
*/
@Nullable
- public static String getString(String propertyName) {
+ @Deprecated
+ private static String getString(String propertyName) {
String value = System.getProperty(propertyName);
if (value != null) {
return value;
@@ -81,9 +65,10 @@ public static String getString(String propertyName) {
* Returns the string value of the given property name from system properties and environment
* variables, or the default value if not found.
*
- *
It's recommended to use {@link io.opentelemetry.api.incubator.config.ConfigProvider} instead
- * to support Declarative Config.
+ * @deprecated allows library configuration via system properties and environment variables, which
+ * will be removed in 3.0.
*/
+ @Deprecated
public static String getString(String propertyName, String defaultValue) {
String strValue = getString(propertyName);
return strValue == null ? defaultValue : strValue;
@@ -94,9 +79,10 @@ public static String getString(String propertyName, String defaultValue) {
* environment variables, or the default value if not found. The property value is expected to be
* a comma-separated list.
*
- *
It's recommended to use {@link io.opentelemetry.api.incubator.config.ConfigProvider} instead
- * to support Declarative Config.
+ * @deprecated allows library configuration via system properties and environment variables, which
+ * will be removed in 3.0.
*/
+ @Deprecated
public static List getList(String propertyName, List defaultValue) {
String value = getString(propertyName);
if (value == null) {
@@ -116,5 +102,5 @@ private static String toEnvVarName(String propertyName) {
return propertyName.toUpperCase(Locale.ROOT).replace('-', '_').replace('.', '_');
}
- private ConfigPropertiesUtil() {}
+ private DeprecatedLibraryConfigPropertiesUtil() {}
}
diff --git a/instrumentation-api/src/main/java/io/opentelemetry/instrumentation/api/internal/SemconvStability.java b/instrumentation-api/src/main/java/io/opentelemetry/instrumentation/api/internal/SemconvStability.java
index e54a62530b67..63c5994a2122 100644
--- a/instrumentation-api/src/main/java/io/opentelemetry/instrumentation/api/internal/SemconvStability.java
+++ b/instrumentation-api/src/main/java/io/opentelemetry/instrumentation/api/internal/SemconvStability.java
@@ -9,6 +9,7 @@
import java.util.HashMap;
import java.util.HashSet;
+import java.util.Locale;
import java.util.Map;
import java.util.Set;
@@ -31,7 +32,7 @@ public final class SemconvStability {
boolean oldCode = true;
boolean stableCode = false;
- String value = ConfigPropertiesUtil.getString("otel.semconv-stability.opt-in");
+ String value = getString("otel.semconv-stability.opt-in");
if (value != null) {
Set values = new HashSet<>(asList(value.split(",")));
@@ -64,6 +65,18 @@ public final class SemconvStability {
emitStableCodeSemconv = stableCode;
}
+ static String getString(String propertyName) {
+ String value = System.getProperty(propertyName);
+ if (value != null) {
+ return value;
+ }
+ return System.getenv(toEnvVarName(propertyName));
+ }
+
+ private static String toEnvVarName(String propertyName) {
+ return propertyName.toUpperCase(Locale.ROOT).replace('-', '_').replace('.', '_');
+ }
+
public static boolean emitOldDatabaseSemconv() {
return emitOldDatabaseSemconv;
}
diff --git a/instrumentation-api/src/main/java/io/opentelemetry/instrumentation/api/internal/SupportabilityMetrics.java b/instrumentation-api/src/main/java/io/opentelemetry/instrumentation/api/internal/SupportabilityMetrics.java
index cf91c4274c32..6602e4f74399 100644
--- a/instrumentation-api/src/main/java/io/opentelemetry/instrumentation/api/internal/SupportabilityMetrics.java
+++ b/instrumentation-api/src/main/java/io/opentelemetry/instrumentation/api/internal/SupportabilityMetrics.java
@@ -29,9 +29,7 @@ public final class SupportabilityMetrics {
private final ConcurrentMap counters = new ConcurrentHashMap<>();
private static final SupportabilityMetrics INSTANCE =
- new SupportabilityMetrics(
- ConfigPropertiesUtil.getBoolean("otel.javaagent.debug", false), logger::fine)
- .start();
+ new SupportabilityMetrics(DebugUtil.isAgentDebugEnabled(), logger::fine).start();
public static SupportabilityMetrics instance() {
return INSTANCE;
diff --git a/instrumentation-api/src/test/java/io/opentelemetry/instrumentation/api/internal/DeprecatedLibraryConfigPropertiesUtilTest.java b/instrumentation-api/src/test/java/io/opentelemetry/instrumentation/api/internal/DeprecatedLibraryConfigPropertiesUtilTest.java
new file mode 100644
index 000000000000..5933a00af04c
--- /dev/null
+++ b/instrumentation-api/src/test/java/io/opentelemetry/instrumentation/api/internal/DeprecatedLibraryConfigPropertiesUtilTest.java
@@ -0,0 +1,37 @@
+/*
+ * Copyright The OpenTelemetry Authors
+ * SPDX-License-Identifier: Apache-2.0
+ */
+
+package io.opentelemetry.instrumentation.api.internal;
+
+import static org.assertj.core.api.Assertions.assertThat;
+
+import org.junit.jupiter.api.Test;
+import org.junitpioneer.jupiter.SetEnvironmentVariable;
+import org.junitpioneer.jupiter.SetSystemProperty;
+
+@SuppressWarnings("deprecation") // using deprecated config property
+class DeprecatedLibraryConfigPropertiesUtilTest {
+
+ @SetEnvironmentVariable(key = "TEST_PROPERTY_BOOLEAN", value = "false")
+ @SetSystemProperty(key = "test.property.boolean", value = "true")
+ @Test
+ void getBoolean_systemProperty() {
+ assertThat(DeprecatedLibraryConfigPropertiesUtil.getBoolean("test.property.boolean", false))
+ .isTrue();
+ }
+
+ @SetEnvironmentVariable(key = "TEST_PROPERTY_BOOLEAN", value = "true")
+ @Test
+ void getBoolean_environmentVariable() {
+ assertThat(DeprecatedLibraryConfigPropertiesUtil.getBoolean("test.property.boolean", false))
+ .isTrue();
+ }
+
+ @Test
+ void getBoolean_none() {
+ assertThat(DeprecatedLibraryConfigPropertiesUtil.getBoolean("test.property.boolean", false))
+ .isFalse();
+ }
+}
diff --git a/instrumentation/aws-sdk/aws-sdk-1.11/library-autoconfigure/src/main/java/io/opentelemetry/instrumentation/awssdk/v1_11/autoconfigure/TracingRequestHandler.java b/instrumentation/aws-sdk/aws-sdk-1.11/library-autoconfigure/src/main/java/io/opentelemetry/instrumentation/awssdk/v1_11/autoconfigure/TracingRequestHandler.java
index c08e316e8eaf..335bc6cc990a 100644
--- a/instrumentation/aws-sdk/aws-sdk-1.11/library-autoconfigure/src/main/java/io/opentelemetry/instrumentation/awssdk/v1_11/autoconfigure/TracingRequestHandler.java
+++ b/instrumentation/aws-sdk/aws-sdk-1.11/library-autoconfigure/src/main/java/io/opentelemetry/instrumentation/awssdk/v1_11/autoconfigure/TracingRequestHandler.java
@@ -15,7 +15,7 @@
import io.opentelemetry.api.OpenTelemetry;
import io.opentelemetry.api.incubator.config.DeclarativeConfigProperties;
import io.opentelemetry.instrumentation.api.incubator.config.internal.DeclarativeConfigUtil;
-import io.opentelemetry.instrumentation.api.internal.ConfigPropertiesUtil;
+import io.opentelemetry.instrumentation.api.internal.DeprecatedLibraryConfigPropertiesUtil;
import io.opentelemetry.instrumentation.awssdk.v1_11.AwsSdkTelemetry;
/**
@@ -25,6 +25,7 @@ public class TracingRequestHandler extends RequestHandler2 {
private static final RequestHandler2 DELEGATE = buildDelegate(GlobalOpenTelemetry.get());
+ @SuppressWarnings("deprecation") // using deprecated config property
private static RequestHandler2 buildDelegate(OpenTelemetry openTelemetry) {
DeclarativeConfigProperties messaging =
DeclarativeConfigUtil.getInstrumentationConfig(openTelemetry, "common").get("messaging");
@@ -33,21 +34,21 @@ private static RequestHandler2 buildDelegate(OpenTelemetry openTelemetry) {
DeclarativeConfigUtil.getInstrumentationConfig(openTelemetry, "aws_sdk")
.getBoolean(
"experimental_span_attributes/development",
- ConfigPropertiesUtil.getBoolean(
+ DeprecatedLibraryConfigPropertiesUtil.getBoolean(
"otel.instrumentation.aws-sdk.experimental-span-attributes", false)))
.setMessagingReceiveTelemetryEnabled(
messaging
.get("receive_telemetry/development")
.getBoolean(
"enabled",
- ConfigPropertiesUtil.getBoolean(
+ DeprecatedLibraryConfigPropertiesUtil.getBoolean(
"otel.instrumentation.messaging.experimental.receive-telemetry.enabled",
false)))
.setCapturedHeaders(
messaging.getScalarList(
"capture_headers/development",
String.class,
- ConfigPropertiesUtil.getList(
+ DeprecatedLibraryConfigPropertiesUtil.getList(
"otel.instrumentation.messaging.experimental.capture-headers", emptyList())))
.build()
.createRequestHandler();
diff --git a/instrumentation/aws-sdk/aws-sdk-2.2/library/src/main/java/io/opentelemetry/instrumentation/awssdk/v2_2/internal/AwsSdkTelemetryFactory.java b/instrumentation/aws-sdk/aws-sdk-2.2/library/src/main/java/io/opentelemetry/instrumentation/awssdk/v2_2/internal/AwsSdkTelemetryFactory.java
index 4f9b421d61cb..11e0f02b2571 100644
--- a/instrumentation/aws-sdk/aws-sdk-2.2/library/src/main/java/io/opentelemetry/instrumentation/awssdk/v2_2/internal/AwsSdkTelemetryFactory.java
+++ b/instrumentation/aws-sdk/aws-sdk-2.2/library/src/main/java/io/opentelemetry/instrumentation/awssdk/v2_2/internal/AwsSdkTelemetryFactory.java
@@ -11,7 +11,7 @@
import io.opentelemetry.api.OpenTelemetry;
import io.opentelemetry.api.incubator.config.DeclarativeConfigProperties;
import io.opentelemetry.instrumentation.api.incubator.config.internal.DeclarativeConfigUtil;
-import io.opentelemetry.instrumentation.api.internal.ConfigPropertiesUtil;
+import io.opentelemetry.instrumentation.api.internal.DeprecatedLibraryConfigPropertiesUtil;
import io.opentelemetry.instrumentation.awssdk.v2_2.AwsSdkTelemetry;
import java.util.List;
@@ -81,12 +81,16 @@ private static AwsSdkTelemetry telemetry(boolean useLegacyLibraryConfig) {
.build();
}
+ @SuppressWarnings("deprecation") // using deprecated config property
private List legacyListValue(String key) {
- return useLegacyLibraryConfig ? ConfigPropertiesUtil.getList(key, emptyList()) : emptyList();
+ return useLegacyLibraryConfig
+ ? DeprecatedLibraryConfigPropertiesUtil.getList(key, emptyList())
+ : emptyList();
}
+ @SuppressWarnings("deprecation") // using deprecated config property
private boolean legacyBooleanValue(String key) {
- return useLegacyLibraryConfig && ConfigPropertiesUtil.getBoolean(key, false);
+ return useLegacyLibraryConfig && DeprecatedLibraryConfigPropertiesUtil.getBoolean(key, false);
}
private AwsSdkTelemetryFactory(boolean useLegacyLibraryConfig) {
diff --git a/instrumentation/aws-sdk/aws-sdk-2.2/testing/src/main/java/io/opentelemetry/instrumentation/awssdk/v2_2/AbstractAws2ClientCoreTest.java b/instrumentation/aws-sdk/aws-sdk-2.2/testing/src/main/java/io/opentelemetry/instrumentation/awssdk/v2_2/AbstractAws2ClientCoreTest.java
index f34767d4a771..32fc75b5f360 100644
--- a/instrumentation/aws-sdk/aws-sdk-2.2/testing/src/main/java/io/opentelemetry/instrumentation/awssdk/v2_2/AbstractAws2ClientCoreTest.java
+++ b/instrumentation/aws-sdk/aws-sdk-2.2/testing/src/main/java/io/opentelemetry/instrumentation/awssdk/v2_2/AbstractAws2ClientCoreTest.java
@@ -41,7 +41,6 @@
import com.google.common.collect.ImmutableMap;
import io.opentelemetry.api.trace.SpanKind;
-import io.opentelemetry.instrumentation.api.internal.ConfigPropertiesUtil;
import io.opentelemetry.instrumentation.testing.junit.InstrumentationExtension;
import io.opentelemetry.sdk.testing.assertj.AttributeAssertion;
import io.opentelemetry.sdk.testing.assertj.SpanDataAssert;
@@ -99,9 +98,9 @@ public abstract class AbstractAws2ClientCoreTest {
protected abstract ClientOverrideConfiguration.Builder createOverrideConfigurationBuilder();
protected static boolean isSqsAttributeInjectionEnabled() {
- // See io.opentelemetry.instrumentation.awssdk.v2_2.autoconfigure.TracingExecutionInterceptor
- return ConfigPropertiesUtil.getBoolean(
- "otel.instrumentation.aws-sdk.experimental-use-propagator-for-messaging", false);
+ // See io.opentelemetry.instrumentation.awssdk.v2_2.internal.AwsSdkTelemetryFactory
+ return Boolean.getBoolean(
+ "otel.instrumentation.aws-sdk.experimental-use-propagator-for-messaging");
}
protected void configureSdkClient(SdkClientBuilder, ?> builder) {
diff --git a/instrumentation/aws-sdk/aws-sdk-2.2/testing/src/main/java/io/opentelemetry/instrumentation/awssdk/v2_2/AbstractAws2ClientRecordHttpErrorTest.java b/instrumentation/aws-sdk/aws-sdk-2.2/testing/src/main/java/io/opentelemetry/instrumentation/awssdk/v2_2/AbstractAws2ClientRecordHttpErrorTest.java
index 582af3e4a941..f3e5ce47c4fe 100644
--- a/instrumentation/aws-sdk/aws-sdk-2.2/testing/src/main/java/io/opentelemetry/instrumentation/awssdk/v2_2/AbstractAws2ClientRecordHttpErrorTest.java
+++ b/instrumentation/aws-sdk/aws-sdk-2.2/testing/src/main/java/io/opentelemetry/instrumentation/awssdk/v2_2/AbstractAws2ClientRecordHttpErrorTest.java
@@ -24,7 +24,6 @@
import static java.util.Collections.singletonList;
import io.opentelemetry.api.trace.SpanKind;
-import io.opentelemetry.instrumentation.api.internal.ConfigPropertiesUtil;
import io.opentelemetry.instrumentation.testing.junit.InstrumentationExtension;
import io.opentelemetry.testing.internal.armeria.common.HttpResponse;
import io.opentelemetry.testing.internal.armeria.common.HttpStatus;
@@ -124,9 +123,9 @@ private static void cleanResponses() {
}
public boolean isRecordIndividualHttpErrorEnabled() {
- // See io.opentelemetry.instrumentation.awssdk.v2_2.autoconfigure.TracingExecutionInterceptor
- return ConfigPropertiesUtil.getBoolean(
- "otel.instrumentation.aws-sdk.experimental-record-individual-http-error", false);
+ // See io.opentelemetry.instrumentation.awssdk.v2_2.internal.AwsSdkTelemetryFactory
+ return Boolean.getBoolean(
+ "otel.instrumentation.aws-sdk.experimental-record-individual-http-error");
}
@SuppressWarnings("deprecation") // using deprecated semconv
diff --git a/instrumentation/aws-sdk/aws-sdk-2.2/testing/src/main/java/io/opentelemetry/instrumentation/awssdk/v2_2/AbstractAws2SqsBaseTest.java b/instrumentation/aws-sdk/aws-sdk-2.2/testing/src/main/java/io/opentelemetry/instrumentation/awssdk/v2_2/AbstractAws2SqsBaseTest.java
index 3fb1636d551a..b6340651ba5e 100644
--- a/instrumentation/aws-sdk/aws-sdk-2.2/testing/src/main/java/io/opentelemetry/instrumentation/awssdk/v2_2/AbstractAws2SqsBaseTest.java
+++ b/instrumentation/aws-sdk/aws-sdk-2.2/testing/src/main/java/io/opentelemetry/instrumentation/awssdk/v2_2/AbstractAws2SqsBaseTest.java
@@ -26,7 +26,6 @@
import static org.assertj.core.api.Assertions.assertThat;
import io.opentelemetry.api.trace.SpanKind;
-import io.opentelemetry.instrumentation.api.internal.ConfigPropertiesUtil;
import io.opentelemetry.instrumentation.testing.junit.InstrumentationExtension;
import io.opentelemetry.sdk.testing.assertj.SpanDataAssert;
import io.opentelemetry.sdk.trace.data.SpanData;
@@ -130,9 +129,9 @@ protected void configureSdkClient(SqsAsyncClientBuilder builder) throws URISynta
}
protected boolean isSqsAttributeInjectionEnabled() {
- // See io.opentelemetry.instrumentation.awssdk.v2_2.autoconfigure.TracingExecutionInterceptor
- return ConfigPropertiesUtil.getBoolean(
- "otel.instrumentation.aws-sdk.experimental-use-propagator-for-messaging", false);
+ // See io.opentelemetry.instrumentation.awssdk.v2_2.internal.AwsSdkTelemetryFactory
+ return Boolean.getBoolean(
+ "otel.instrumentation.aws-sdk.experimental-use-propagator-for-messaging");
}
@BeforeAll
diff --git a/instrumentation/grpc-1.6/javaagent/build.gradle.kts b/instrumentation/grpc-1.6/javaagent/build.gradle.kts
index d4eca5080f1d..7796efaf6a77 100644
--- a/instrumentation/grpc-1.6/javaagent/build.gradle.kts
+++ b/instrumentation/grpc-1.6/javaagent/build.gradle.kts
@@ -35,7 +35,7 @@ tasks {
systemProperty("testLatestDeps", findProperty("testLatestDeps") as Boolean)
// The agent context debug mechanism isn't compatible with the bridge approach which may add a
// gRPC context to the root.
- jvmArgs("-Dotel.javaagent.experimental.thread-propagation-debugger.enabled=false")
+ jvmArgs("-Dotel.javaagent.testing.thread-propagation-debugger.enabled=false")
jvmArgs("-Dotel.instrumentation.grpc.capture-metadata.client.request=some-client-key")
jvmArgs("-Dotel.instrumentation.grpc.capture-metadata.server.request=some-server-key")
jvmArgs("-Dotel.instrumentation.common.experimental.controller-telemetry.enabled=true")
@@ -58,7 +58,7 @@ tasks {
// replicated base config from standard test task
systemProperty("testLatestDeps", findProperty("testLatestDeps") as Boolean)
- jvmArgs("-Dotel.javaagent.experimental.thread-propagation-debugger.enabled=false")
+ jvmArgs("-Dotel.javaagent.testing.thread-propagation-debugger.enabled=false")
jvmArgs("-Dotel.instrumentation.grpc.capture-metadata.client.request=some-client-key")
jvmArgs("-Dotel.instrumentation.grpc.capture-metadata.server.request=some-server-key")
jvmArgs("-Dotel.instrumentation.common.experimental.controller-telemetry.enabled=true")
diff --git a/instrumentation/jdbc/library/src/main/java/io/opentelemetry/instrumentation/jdbc/OpenTelemetryDriver.java b/instrumentation/jdbc/library/src/main/java/io/opentelemetry/instrumentation/jdbc/OpenTelemetryDriver.java
index 95256834d246..401cfe14ce2b 100644
--- a/instrumentation/jdbc/library/src/main/java/io/opentelemetry/instrumentation/jdbc/OpenTelemetryDriver.java
+++ b/instrumentation/jdbc/library/src/main/java/io/opentelemetry/instrumentation/jdbc/OpenTelemetryDriver.java
@@ -26,7 +26,7 @@
import io.opentelemetry.instrumentation.api.incubator.config.internal.DeclarativeConfigUtil;
import io.opentelemetry.instrumentation.api.incubator.semconv.db.internal.SqlCommenter;
import io.opentelemetry.instrumentation.api.instrumenter.Instrumenter;
-import io.opentelemetry.instrumentation.api.internal.ConfigPropertiesUtil;
+import io.opentelemetry.instrumentation.api.internal.DeprecatedLibraryConfigPropertiesUtil;
import io.opentelemetry.instrumentation.api.internal.EmbeddedInstrumentationProperties;
import io.opentelemetry.instrumentation.jdbc.internal.DbRequest;
import io.opentelemetry.instrumentation.jdbc.internal.JdbcConnectionUrlParser;
@@ -64,6 +64,7 @@ public final class OpenTelemetryDriver implements Driver {
private static final AtomicBoolean REGISTERED = new AtomicBoolean();
private static final List DRIVER_CANDIDATES = new CopyOnWriteArrayList<>();
+ @SuppressWarnings("deprecation") // using deprecated config property
private static SqlCommenter getSqlCommenter(OpenTelemetry openTelemetry) {
Boolean enabled =
DeclarativeConfigUtil.getInstrumentationConfig(openTelemetry, "jdbc")
@@ -71,7 +72,7 @@ private static SqlCommenter getSqlCommenter(OpenTelemetry openTelemetry) {
.getBoolean("enabled");
if (enabled == null) {
enabled =
- ConfigPropertiesUtil.getBoolean(
+ DeprecatedLibraryConfigPropertiesUtil.getBoolean(
"otel.instrumentation.jdbc.experimental.sqlcommenter.enabled");
}
if (enabled == null) {
@@ -83,7 +84,7 @@ private static SqlCommenter getSqlCommenter(OpenTelemetry openTelemetry) {
}
if (enabled == null) {
enabled =
- ConfigPropertiesUtil.getBoolean(
+ DeprecatedLibraryConfigPropertiesUtil.getBoolean(
"otel.instrumentation.common.experimental.db-sqlcommenter.enabled");
}
if (enabled == null) {
diff --git a/instrumentation/jdbc/library/src/main/java/io/opentelemetry/instrumentation/jdbc/internal/JdbcInstrumenterFactory.java b/instrumentation/jdbc/library/src/main/java/io/opentelemetry/instrumentation/jdbc/internal/JdbcInstrumenterFactory.java
index dc91d6549c93..0fb74db402ad 100644
--- a/instrumentation/jdbc/library/src/main/java/io/opentelemetry/instrumentation/jdbc/internal/JdbcInstrumenterFactory.java
+++ b/instrumentation/jdbc/library/src/main/java/io/opentelemetry/instrumentation/jdbc/internal/JdbcInstrumenterFactory.java
@@ -17,7 +17,7 @@
import io.opentelemetry.instrumentation.api.instrumenter.AttributesExtractor;
import io.opentelemetry.instrumentation.api.instrumenter.Instrumenter;
import io.opentelemetry.instrumentation.api.instrumenter.SpanKindExtractor;
-import io.opentelemetry.instrumentation.api.internal.ConfigPropertiesUtil;
+import io.opentelemetry.instrumentation.api.internal.DeprecatedLibraryConfigPropertiesUtil;
import io.opentelemetry.instrumentation.jdbc.internal.dbinfo.DbInfo;
import java.util.List;
import javax.sql.DataSource;
@@ -29,11 +29,12 @@
public final class JdbcInstrumenterFactory {
public static final String INSTRUMENTATION_NAME = "io.opentelemetry.jdbc";
+ @SuppressWarnings("deprecation") // using deprecated config property
public static boolean captureQueryParameters(OpenTelemetry openTelemetry) {
return DeclarativeConfigUtil.getInstrumentationConfig(openTelemetry, "jdbc")
.getBoolean(
"capture_query_parameters/development",
- ConfigPropertiesUtil.getBoolean(
+ DeprecatedLibraryConfigPropertiesUtil.getBoolean(
"otel.instrumentation.jdbc.experimental.capture-query-parameters", false));
}
@@ -44,13 +45,14 @@ public static Instrumenter createStatementInstrumenter(
static Instrumenter createStatementInstrumenter(
OpenTelemetry openTelemetry, boolean captureQueryParameters) {
+ @SuppressWarnings("deprecation") // using deprecated config property
boolean statementSanitizationEnabled =
DeclarativeConfigUtil.getInstrumentationConfig(openTelemetry, "common")
.get("database")
.get("statement_sanitizer")
.getBoolean(
"enabled",
- ConfigPropertiesUtil.getBoolean(
+ DeprecatedLibraryConfigPropertiesUtil.getBoolean(
"otel.instrumentation.common.db-statement-sanitizer.enabled", true));
return createStatementInstrumenter(
openTelemetry, emptyList(), true, statementSanitizationEnabled, captureQueryParameters);
@@ -99,12 +101,13 @@ public static Instrumenter createDataSourceInstrumenter(
public static Instrumenter createTransactionInstrumenter(
OpenTelemetry openTelemetry) {
+ @SuppressWarnings("deprecation") // using deprecated config property
boolean enabled =
DeclarativeConfigUtil.getInstrumentationConfig(openTelemetry, "jdbc")
.get("transaction/development")
.getBoolean(
"enabled",
- ConfigPropertiesUtil.getBoolean(
+ DeprecatedLibraryConfigPropertiesUtil.getBoolean(
"otel.instrumentation.jdbc.experimental.transaction.enabled", false));
return createTransactionInstrumenter(openTelemetry, enabled);
}
diff --git a/instrumentation/kafka/kafka-clients/kafka-clients-2.6/library/src/main/java/io/opentelemetry/instrumentation/kafkaclients/v2_6/TracingConsumerInterceptor.java b/instrumentation/kafka/kafka-clients/kafka-clients-2.6/library/src/main/java/io/opentelemetry/instrumentation/kafkaclients/v2_6/TracingConsumerInterceptor.java
index 97ea0a7a36d1..0ba64ac8968b 100644
--- a/instrumentation/kafka/kafka-clients/kafka-clients-2.6/library/src/main/java/io/opentelemetry/instrumentation/kafkaclients/v2_6/TracingConsumerInterceptor.java
+++ b/instrumentation/kafka/kafka-clients/kafka-clients-2.6/library/src/main/java/io/opentelemetry/instrumentation/kafkaclients/v2_6/TracingConsumerInterceptor.java
@@ -13,7 +13,7 @@
import io.opentelemetry.api.incubator.config.DeclarativeConfigProperties;
import io.opentelemetry.context.Context;
import io.opentelemetry.instrumentation.api.incubator.config.internal.DeclarativeConfigUtil;
-import io.opentelemetry.instrumentation.api.internal.ConfigPropertiesUtil;
+import io.opentelemetry.instrumentation.api.internal.DeprecatedLibraryConfigPropertiesUtil;
import io.opentelemetry.instrumentation.api.internal.Timer;
import io.opentelemetry.instrumentation.kafkaclients.common.v0_11.internal.KafkaConsumerContext;
import io.opentelemetry.instrumentation.kafkaclients.common.v0_11.internal.KafkaConsumerContextUtil;
@@ -49,14 +49,14 @@ public class TracingConsumerInterceptor implements ConsumerInterceptor implements ProducerInterceptor().configureEach {
// required on jdk17
jvmArgs("--add-opens=java.base/java.lang=ALL-UNNAMED")
+ jvmArgs("--add-opens=java.base/java.util=ALL-UNNAMED")
jvmArgs("-XX:+IgnoreUnrecognizedVMOptions")
}
diff --git a/javaagent-bootstrap/src/main/java/io/opentelemetry/javaagent/bootstrap/AgentClassLoader.java b/javaagent-bootstrap/src/main/java/io/opentelemetry/javaagent/bootstrap/AgentClassLoader.java
index 4baba3e19085..f9004305ab3c 100644
--- a/javaagent-bootstrap/src/main/java/io/opentelemetry/javaagent/bootstrap/AgentClassLoader.java
+++ b/javaagent-bootstrap/src/main/java/io/opentelemetry/javaagent/bootstrap/AgentClassLoader.java
@@ -43,8 +43,9 @@ public class AgentClassLoader extends URLClassLoader {
ClassLoader.registerAsParallelCapable();
}
+ @Nullable
private static final String AGENT_INITIALIZER_JAR =
- System.getProperty("otel.javaagent.experimental.initializer.jar", "");
+ ConfigPropertiesUtil.getString("otel.javaagent.experimental.initializer.jar");
private static final String META_INF = "META-INF/";
private static final String META_INF_VERSIONS = META_INF + "versions/";
@@ -131,7 +132,7 @@ public AgentClassLoader(
throw new IllegalStateException("Unable to open agent jar", e);
}
- if (!AGENT_INITIALIZER_JAR.isEmpty()) {
+ if (AGENT_INITIALIZER_JAR != null && !AGENT_INITIALIZER_JAR.isEmpty()) {
URL url;
try {
url = new File(AGENT_INITIALIZER_JAR).toURI().toURL();
diff --git a/javaagent-bootstrap/src/main/java/io/opentelemetry/javaagent/bootstrap/AgentInitializer.java b/javaagent-bootstrap/src/main/java/io/opentelemetry/javaagent/bootstrap/AgentInitializer.java
index 509d13964d3b..b25a1345cf0b 100644
--- a/javaagent-bootstrap/src/main/java/io/opentelemetry/javaagent/bootstrap/AgentInitializer.java
+++ b/javaagent-bootstrap/src/main/java/io/opentelemetry/javaagent/bootstrap/AgentInitializer.java
@@ -5,7 +5,6 @@
package io.opentelemetry.javaagent.bootstrap;
-import io.opentelemetry.instrumentation.api.internal.ConfigPropertiesUtil;
import java.io.File;
import java.lang.instrument.Instrumentation;
import java.lang.reflect.Constructor;
diff --git a/javaagent-bootstrap/src/main/java/io/opentelemetry/javaagent/bootstrap/ConfigPropertiesUtil.java b/javaagent-bootstrap/src/main/java/io/opentelemetry/javaagent/bootstrap/ConfigPropertiesUtil.java
new file mode 100644
index 000000000000..081ffd681b78
--- /dev/null
+++ b/javaagent-bootstrap/src/main/java/io/opentelemetry/javaagent/bootstrap/ConfigPropertiesUtil.java
@@ -0,0 +1,44 @@
+/*
+ * Copyright The OpenTelemetry Authors
+ * SPDX-License-Identifier: Apache-2.0
+ */
+
+package io.opentelemetry.javaagent.bootstrap;
+
+import java.util.Locale;
+import javax.annotation.Nullable;
+
+/**
+ * This class is internal and is hence not for public use. Its APIs are unstable and can change at
+ * any time.
+ */
+public final class ConfigPropertiesUtil {
+
+ /**
+ * Returns the boolean value of the given property name from system properties and environment
+ * variables.
+ */
+ public static boolean getBoolean(String propertyName, boolean defaultValue) {
+ String value = getString(propertyName);
+ return value == null ? defaultValue : Boolean.parseBoolean(value);
+ }
+
+ /**
+ * Returns the string value of the given property name from system properties and environment
+ * variables.
+ */
+ @Nullable
+ public static String getString(String propertyName) {
+ String value = System.getProperty(propertyName);
+ if (value != null) {
+ return value;
+ }
+ return System.getenv(toEnvVarName(propertyName));
+ }
+
+ private static String toEnvVarName(String propertyName) {
+ return propertyName.toUpperCase(Locale.ROOT).replace('-', '_').replace('.', '_');
+ }
+
+ private ConfigPropertiesUtil() {}
+}
diff --git a/instrumentation-api/src/test/java/io/opentelemetry/instrumentation/api/internal/ConfigPropertiesUtilTest.java b/javaagent-bootstrap/src/test/java/io/opentelemetry/javaagent/bootstrap/ConfigPropertiesUtilTest.java
similarity index 65%
rename from instrumentation-api/src/test/java/io/opentelemetry/instrumentation/api/internal/ConfigPropertiesUtilTest.java
rename to javaagent-bootstrap/src/test/java/io/opentelemetry/javaagent/bootstrap/ConfigPropertiesUtilTest.java
index 8a496322b6e0..409544eacfb1 100644
--- a/instrumentation-api/src/test/java/io/opentelemetry/instrumentation/api/internal/ConfigPropertiesUtilTest.java
+++ b/javaagent-bootstrap/src/test/java/io/opentelemetry/javaagent/bootstrap/ConfigPropertiesUtilTest.java
@@ -3,7 +3,7 @@
* SPDX-License-Identifier: Apache-2.0
*/
-package io.opentelemetry.instrumentation.api.internal;
+package io.opentelemetry.javaagent.bootstrap;
import static org.assertj.core.api.Assertions.assertThat;
@@ -31,30 +31,6 @@ void getString_none() {
assertThat(ConfigPropertiesUtil.getString("test.property.string")).isNull();
}
- @SetEnvironmentVariable(key = "TEST_PROPERTY_INT", value = "12")
- @SetSystemProperty(key = "test.property.int", value = "42")
- @Test
- void getInt_systemProperty() {
- assertThat(ConfigPropertiesUtil.getInt("test.property.int", -1)).isEqualTo(42);
- }
-
- @SetEnvironmentVariable(key = "TEST_PROPERTY_INT", value = "12")
- @Test
- void getInt_environmentVariable() {
- assertThat(ConfigPropertiesUtil.getInt("test.property.int", -1)).isEqualTo(12);
- }
-
- @Test
- void getInt_none() {
- assertThat(ConfigPropertiesUtil.getInt("test.property.int", -1)).isEqualTo(-1);
- }
-
- @SetSystemProperty(key = "test.property.int", value = "not a number")
- @Test
- void getInt_invalidNumber() {
- assertThat(ConfigPropertiesUtil.getInt("test.property.int", -1)).isEqualTo(-1);
- }
-
@SetEnvironmentVariable(key = "TEST_PROPERTY_BOOLEAN", value = "false")
@SetSystemProperty(key = "test.property.boolean", value = "true")
@Test
diff --git a/javaagent-tooling/src/main/java/io/opentelemetry/javaagent/tooling/config/ConfigurationFile.java b/javaagent-tooling/src/main/java/io/opentelemetry/javaagent/tooling/config/ConfigurationFile.java
index 4da9ca45f1fb..d4d24210cf7f 100644
--- a/javaagent-tooling/src/main/java/io/opentelemetry/javaagent/tooling/config/ConfigurationFile.java
+++ b/javaagent-tooling/src/main/java/io/opentelemetry/javaagent/tooling/config/ConfigurationFile.java
@@ -8,7 +8,7 @@
import static java.util.Collections.emptyMap;
import static java.util.logging.Level.SEVERE;
-import io.opentelemetry.instrumentation.api.internal.ConfigPropertiesUtil;
+import io.opentelemetry.javaagent.bootstrap.ConfigPropertiesUtil;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
diff --git a/javaagent-tooling/src/main/java/io/opentelemetry/javaagent/tooling/config/EarlyInitAgentConfig.java b/javaagent-tooling/src/main/java/io/opentelemetry/javaagent/tooling/config/EarlyInitAgentConfig.java
index c1493ba9eab2..73d73a3ed6a2 100644
--- a/javaagent-tooling/src/main/java/io/opentelemetry/javaagent/tooling/config/EarlyInitAgentConfig.java
+++ b/javaagent-tooling/src/main/java/io/opentelemetry/javaagent/tooling/config/EarlyInitAgentConfig.java
@@ -5,7 +5,7 @@
package io.opentelemetry.javaagent.tooling.config;
-import io.opentelemetry.instrumentation.api.internal.ConfigPropertiesUtil;
+import io.opentelemetry.javaagent.bootstrap.ConfigPropertiesUtil;
import java.util.Map;
import javax.annotation.Nullable;
@@ -72,10 +72,15 @@ private boolean getBoolean(String propertyName, boolean defaultValue) {
private int getInt(String propertyName, int defaultValue) {
try {
+ String value = ConfigPropertiesUtil.getString(propertyName);
+ if (value != null) {
+ return Integer.parseInt(value);
+ }
String configFileValueStr = configFileContents.get(propertyName);
- int configFileValue =
- configFileValueStr == null ? defaultValue : Integer.parseInt(configFileValueStr);
- return ConfigPropertiesUtil.getInt(propertyName, configFileValue);
+ if (configFileValueStr != null) {
+ return Integer.parseInt(configFileValueStr);
+ }
+ return defaultValue;
} catch (NumberFormatException ignored) {
return defaultValue;
}
diff --git a/muzzle/src/main/java/io/opentelemetry/javaagent/tooling/muzzle/AgentCachingPoolStrategy.java b/muzzle/src/main/java/io/opentelemetry/javaagent/tooling/muzzle/AgentCachingPoolStrategy.java
index 7598dd30ff6d..f5e0dc00403a 100644
--- a/muzzle/src/main/java/io/opentelemetry/javaagent/tooling/muzzle/AgentCachingPoolStrategy.java
+++ b/muzzle/src/main/java/io/opentelemetry/javaagent/tooling/muzzle/AgentCachingPoolStrategy.java
@@ -6,10 +6,8 @@
package io.opentelemetry.javaagent.tooling.muzzle;
import com.google.errorprone.annotations.CanIgnoreReturnValue;
-import io.opentelemetry.instrumentation.api.internal.ConfigPropertiesUtil;
import io.opentelemetry.instrumentation.api.internal.cache.Cache;
import io.opentelemetry.javaagent.bootstrap.InstrumentationHolder;
-import io.opentelemetry.javaagent.bootstrap.field.VirtualFieldAccessorMarker;
import java.lang.instrument.Instrumentation;
import java.lang.ref.WeakReference;
import java.lang.reflect.Method;
@@ -52,8 +50,6 @@ public class AgentCachingPoolStrategy implements AgentBuilder.PoolStrategy {
// Many things are package visible for testing purposes --
// others to avoid creation of synthetic accessors
- private static final boolean REFLECTION_ENABLED =
- ConfigPropertiesUtil.getBoolean("otel.instrumentation.internal-reflection.enabled", true);
private static final Method findLoadedClassMethod = getFindLoadedClassMethod();
static final int TYPE_CAPACITY = 64;
@@ -623,12 +619,6 @@ public TypeList.Generic getInterfaces() {
Class> clazz = classRef.get();
if (clazz != null) {
for (Class> interfaceClass : clazz.getInterfaces()) {
- // virtual field accessors are removed by internal-reflection instrumentation
- // we do this extra check for tests run with internal-reflection disabled
- if (!REFLECTION_ENABLED
- && VirtualFieldAccessorMarker.class.isAssignableFrom(interfaceClass)) {
- continue;
- }
// using raw type
result.add(newTypeDescription(interfaceClass));
}