diff --git a/dd-trace-api/src/main/java/datadog/trace/api/ConfigDefaults.java b/dd-trace-api/src/main/java/datadog/trace/api/ConfigDefaults.java index 6a4158cdf6a..6fd8cec6d6e 100644 --- a/dd-trace-api/src/main/java/datadog/trace/api/ConfigDefaults.java +++ b/dd-trace-api/src/main/java/datadog/trace/api/ConfigDefaults.java @@ -232,6 +232,8 @@ public final class ConfigDefaults { static final boolean DEFAULT_TELEMETRY_LOG_COLLECTION_ENABLED = true; static final int DEFAULT_TELEMETRY_DEPENDENCY_RESOLUTION_QUEUE_SIZE = 100000; + static final Set DEFAULT_TRACE_EXPERIMENTAL_FEATURES_ENABLED = new HashSet<>(); + static final boolean DEFAULT_TRACE_128_BIT_TRACEID_GENERATION_ENABLED = true; static final boolean DEFAULT_TRACE_128_BIT_TRACEID_LOGGING_ENABLED = false; static final boolean DEFAULT_SECURE_RANDOM = false; diff --git a/dd-trace-api/src/main/java/datadog/trace/api/config/TracerConfig.java b/dd-trace-api/src/main/java/datadog/trace/api/config/TracerConfig.java index e4cebef3308..85155b7ada2 100644 --- a/dd-trace-api/src/main/java/datadog/trace/api/config/TracerConfig.java +++ b/dd-trace-api/src/main/java/datadog/trace/api/config/TracerConfig.java @@ -34,6 +34,9 @@ public final class TracerConfig { @Deprecated public static final String TRACE_RESOLVER_ENABLED = "trace.resolver.enabled"; public static final String SERVICE_MAPPING = "service.mapping"; + public static final String TRACE_EXPERIMENTAL_FEATURES_ENABLED = + "trace.experimental.features.enabled"; + public static final String SPAN_TAGS = "trace.span.tags"; public static final String TRACE_ANALYTICS_ENABLED = "trace.analytics.enabled"; diff --git a/internal-api/src/main/java/datadog/trace/api/Config.java b/internal-api/src/main/java/datadog/trace/api/Config.java index 17e776f7980..240c3b41790 100644 --- a/internal-api/src/main/java/datadog/trace/api/Config.java +++ b/internal-api/src/main/java/datadog/trace/api/Config.java @@ -561,6 +561,7 @@ public static String getHostName() { private final long dependecyResolutionPeriodMillis; private final boolean apmTracingEnabled; + private final Set experimentalFeaturesEnabled; // Read order: System Properties -> Env Variables, [-> properties file], [-> default value] private Config() { @@ -626,6 +627,10 @@ private Config(final ConfigProvider configProvider, final InstrumenterConfig ins configProvider.getString( SERVLET_ROOT_CONTEXT_SERVICE_NAME, DEFAULT_SERVLET_ROOT_CONTEXT_SERVICE_NAME); + experimentalFeaturesEnabled = + configProvider.getSet( + TRACE_EXPERIMENTAL_FEATURES_ENABLED, DEFAULT_TRACE_EXPERIMENTAL_FEATURES_ENABLED); + integrationSynapseLegacyOperationName = configProvider.getBoolean(INTEGRATION_SYNAPSE_LEGACY_OPERATION_NAME, false); writerType = configProvider.getString(WRITER_TYPE, DEFAULT_AGENT_WRITER_TYPE); @@ -2013,6 +2018,10 @@ public String getRootContextServiceName() { return rootContextServiceName; } + public Set getExperimentalFeaturesEnabled() { + return experimentalFeaturesEnabled; + } + public boolean isTraceEnabled() { return instrumenterConfig.isTraceEnabled(); } @@ -4367,6 +4376,8 @@ public String toString() { + serviceNameSetByUser + ", rootContextServiceName=" + rootContextServiceName + + ", experimentalFeaturesEnabled=" + + experimentalFeaturesEnabled + ", integrationSynapseLegacyOperationName=" + integrationSynapseLegacyOperationName + ", writerType='" diff --git a/internal-api/src/test/groovy/datadog/trace/api/ConfigTest.groovy b/internal-api/src/test/groovy/datadog/trace/api/ConfigTest.groovy index df5509b13ef..1e661867875 100644 --- a/internal-api/src/test/groovy/datadog/trace/api/ConfigTest.groovy +++ b/internal-api/src/test/groovy/datadog/trace/api/ConfigTest.groovy @@ -107,6 +107,7 @@ import static datadog.trace.api.config.TracerConfig.HTTP_CLIENT_ERROR_STATUSES import static datadog.trace.api.config.TracerConfig.HTTP_SERVER_ERROR_STATUSES import static datadog.trace.api.config.TracerConfig.ID_GENERATION_STRATEGY import static datadog.trace.api.config.TracerConfig.PARTIAL_FLUSH_ENABLED +import static datadog.trace.api.config.TracerConfig.TRACE_EXPERIMENTAL_FEATURES_ENABLED import static datadog.trace.api.config.TracerConfig.TRACE_LONG_RUNNING_ENABLED import static datadog.trace.api.config.TracerConfig.TRACE_LONG_RUNNING_FLUSH_INTERVAL import static datadog.trace.api.config.TracerConfig.TRACE_LONG_RUNNING_INITIAL_FLUSH_INTERVAL @@ -221,6 +222,8 @@ class ConfigTest extends DDSpecification { prop.setProperty(TRACE_LONG_RUNNING_ENABLED, "true") prop.setProperty(TRACE_LONG_RUNNING_FLUSH_INTERVAL, "250") + prop.setProperty(TRACE_EXPERIMENTAL_FEATURES_ENABLED, "DD_TAGS, DD_TRACE_HTTP_CLIENT_TAG_QUERY_STRING") + prop.setProperty(PROFILING_ENABLED, "true") prop.setProperty(PROFILING_URL, "new url") prop.setProperty(PROFILING_TAGS, "f:6,host:test-host") @@ -312,6 +315,8 @@ class ConfigTest extends DDSpecification { config.isLongRunningTraceEnabled() config.getLongRunningTraceFlushInterval() == 250 + config.experimentalFeaturesEnabled == ["DD_TAGS", "DD_TRACE_HTTP_CLIENT_TAG_QUERY_STRING"].toSet() + config.profilingEnabled == true config.profilingUrl == "new url" config.mergedProfilingTags == [b: "2", f: "6", (HOST_TAG): "test-host", (RUNTIME_ID_TAG): config.getRuntimeId(), (RUNTIME_VERSION_TAG): config.getRuntimeVersion(), (SERVICE_TAG): config.serviceName, (LANGUAGE_TAG_KEY): LANGUAGE_TAG_VALUE] @@ -402,6 +407,8 @@ class ConfigTest extends DDSpecification { System.setProperty(PREFIX + TRACE_LONG_RUNNING_ENABLED, "true") System.setProperty(PREFIX + TRACE_LONG_RUNNING_FLUSH_INTERVAL, "333") + System.setProperty(PREFIX + TRACE_EXPERIMENTAL_FEATURES_ENABLED, "DD_TAGS, DD_TRACE_HTTP_CLIENT_TAG_QUERY_STRING") + System.setProperty(PREFIX + PROFILING_ENABLED, "true") System.setProperty(PREFIX + PROFILING_URL, "new url") System.setProperty(PREFIX + PROFILING_TAGS, "f:6,host:test-host") @@ -493,6 +500,8 @@ class ConfigTest extends DDSpecification { config.getLongRunningTraceFlushInterval() == 333 config.traceRateLimit == 200 + config.experimentalFeaturesEnabled == ["DD_TAGS", "DD_TRACE_HTTP_CLIENT_TAG_QUERY_STRING"].toSet() + config.profilingEnabled == true config.profilingUrl == "new url" config.mergedProfilingTags == [b: "2", f: "6", (HOST_TAG): "test-host", (RUNTIME_ID_TAG): config.getRuntimeId(), (RUNTIME_VERSION_TAG): config.getRuntimeVersion(), (SERVICE_TAG): config.serviceName, (LANGUAGE_TAG_KEY): LANGUAGE_TAG_VALUE]