diff --git a/instrumentation-api/src/main/java/io/opentelemetry/instrumentation/api/internal/Experimental.java b/instrumentation-api/src/main/java/io/opentelemetry/instrumentation/api/internal/Experimental.java index 59408b8d2657..bf49b86e2737 100644 --- a/instrumentation-api/src/main/java/io/opentelemetry/instrumentation/api/internal/Experimental.java +++ b/instrumentation-api/src/main/java/io/opentelemetry/instrumentation/api/internal/Experimental.java @@ -32,6 +32,8 @@ public final class Experimental { private static volatile BiConsumer, AttributesExtractor> operationListenerAttributesExtractorAdder; + private static volatile boolean dynamicAttachEnabled = false; + private Experimental() {} public static void setRedactQueryParameters( @@ -85,4 +87,12 @@ public static void internalAddOperationListenerAttributesExt Experimental.operationListenerAttributesExtractorAdder = (BiConsumer) operationListenerAttributesExtractorAdder; } + + public static void setDynamicAttachEnabled(boolean enabled) { + dynamicAttachEnabled = enabled; + } + + public static boolean isDynamicAttachEnabled() { + return dynamicAttachEnabled; + } } 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..639de6aca976 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 @@ -6,6 +6,7 @@ package io.opentelemetry.javaagent.bootstrap; import io.opentelemetry.instrumentation.api.internal.ConfigPropertiesUtil; +import io.opentelemetry.instrumentation.api.internal.Experimental; import java.io.File; import java.lang.instrument.Instrumentation; import java.lang.reflect.Constructor; @@ -41,7 +42,7 @@ public static void initialize( new PrivilegedAction() { @Override public Void run() { - setSystemProperties(agentArgs); + setSystemProperties(agentArgs, fromPremain); return null; } }); @@ -215,7 +216,7 @@ private static AgentStarter createAgentStarter( private AgentInitializer() {} @SuppressWarnings("SystemOut") - static void setSystemProperties(@Nullable String agentArgs) { + static void setSystemProperties(@Nullable String agentArgs, boolean fromPremain) { boolean debug = false; if (agentArgs != null && !agentArgs.isEmpty()) { for (String option : agentArgs.split(";")) { @@ -236,5 +237,9 @@ static void setSystemProperties(@Nullable String agentArgs) { } } } + + if (!fromPremain || getBoolean("otel.javaagent.experimental.dynamic.attach", false)) { + Experimental.setDynamicAttachEnabled(true); + } } }