From 199e59f4c512f7d09dd49b6c2bbf0ccb5b54eb26 Mon Sep 17 00:00:00 2001 From: Matthew Li Date: Tue, 11 Mar 2025 10:22:12 -0400 Subject: [PATCH 1/2] introducing config --- .../datadog/trace/api/ConfigDefaults.java | 2 ++ .../trace/api/config/TracerConfig.java | 22 +++---------------- .../main/java/datadog/trace/api/Config.java | 11 ++++++++++ .../datadog/trace/api/ConfigTest.groovy | 9 ++++++++ 4 files changed, 25 insertions(+), 19 deletions(-) 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..ea6afbd7d78 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 @@ -1,5 +1,4 @@ package datadog.trace.api.config; - /** * A list of keys to be used in a Properties instance with dd-trace-ot's DDTracer as follows: * @@ -17,7 +16,6 @@ public final class TracerConfig { public static final String ID_GENERATION_STRATEGY = "id.generation.strategy"; public static final String WRITER_TYPE = "writer.type"; public static final String WRITER_BAGGAGE_INJECT = "writer.baggage.inject"; - public static final String PRIORITIZATION_TYPE = "prioritization.type"; public static final String TRACE_AGENT_URL = "trace.agent.url"; public static final String AGENT_HOST = "agent.host"; @@ -34,6 +32,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"; @@ -71,7 +72,6 @@ public final class TracerConfig { // Use TRACE_HTTP_CLIENT_ERROR_STATUSES instead @Deprecated public static final String HTTP_CLIENT_ERROR_STATUSES = "http.client.error.statuses"; public static final String TRACE_HTTP_CLIENT_ERROR_STATUSES = "trace.http.client.error.statuses"; - public static final String SPLIT_BY_TAGS = "trace.split-by-tags"; // trace latency interceptor value should be in ms public static final String TRACE_KEEP_LATENCY_THRESHOLD_MS = @@ -86,30 +86,23 @@ public final class TracerConfig { "propagation.extract.log_header_names.enabled"; public static final String PROPAGATION_STYLE_EXTRACT = "propagation.style.extract"; public static final String PROPAGATION_STYLE_INJECT = "propagation.style.inject"; - public static final String TRACE_PROPAGATION_STYLE = "trace.propagation.style"; public static final String TRACE_PROPAGATION_STYLE_EXTRACT = "trace.propagation.style.extract"; public static final String TRACE_PROPAGATION_STYLE_INJECT = "trace.propagation.style.inject"; public static final String TRACE_PROPAGATION_EXTRACT_FIRST = "trace.propagation.extract.first"; public static final String TRACE_BAGGAGE_MAX_ITEMS = "trace.baggage.max.items"; public static final String TRACE_BAGGAGE_MAX_BYTES = "trace.baggage.max.bytes"; - public static final String ENABLE_TRACE_AGENT_V05 = "trace.agent.v0.5.enabled"; - public static final String CLIENT_IP_ENABLED = "trace.client-ip.enabled"; - public static final String TRACE_128_BIT_TRACEID_GENERATION_ENABLED = "trace.128.bit.traceid.generation.enabled"; - public static final String SECURE_RANDOM = "trace.secure-random"; - /** * Disables validation that prevents invalid combinations of sampling priority and sampling * mechanism on the set sampling priority calls. This check is enabled by default. */ public static final String SAMPLING_MECHANISM_VALIDATION_DISABLED = "trace.sampling.mechanism.validation.disabled"; - /** * Limit for x-datadog-tags. When exceeded it will stop propagating Datadog tags and will log a * warning. @@ -117,30 +110,21 @@ public final class TracerConfig { public static final String TRACE_X_DATADOG_TAGS_MAX_LENGTH = "trace.x-datadog-tags.max.length"; public static final String CLOCK_SYNC_PERIOD = "trace.clock.sync.period"; - public static final String TRACE_SPAN_ATTRIBUTE_SCHEMA = "trace.span.attribute.schema"; - public static final String TRACE_LONG_RUNNING_ENABLED = "trace.experimental.long-running.enabled"; - public static final String TRACE_LONG_RUNNING_INITIAL_FLUSH_INTERVAL = "trace.experimental.long-running.initial.flush.interval"; public static final String TRACE_LONG_RUNNING_FLUSH_INTERVAL = "trace.experimental.long-running.flush.interval"; public static final String TRACE_PEER_SERVICE_DEFAULTS_ENABLED = "trace.peer.service.defaults.enabled"; - public static final String TRACE_PEER_SERVICE_COMPONENT_OVERRIDES = "trace.peer.service.component.overrides"; - public static final String TRACE_REMOVE_INTEGRATION_SERVICE_NAMES_ENABLED = "trace.remove.integration-service-names.enabled"; - public static final String TRACE_PEER_SERVICE_MAPPING = "trace.peer.service.mapping"; - public static final String TRACE_FLUSH_INTERVAL = "trace.flush.interval"; - public static final String TRACE_POST_PROCESSING_TIMEOUT = "trace.post-processing.timeout"; - public static final String TRACE_CLOUD_PAYLOAD_TAGGING_SERVICES = "trace.cloud.payload.tagging.services"; public static final String TRACE_CLOUD_REQUEST_PAYLOAD_TAGGING = 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] From 015c5587497b7e1c17228eb815b67c376da63ae0 Mon Sep 17 00:00:00 2001 From: Matthew Li Date: Tue, 11 Mar 2025 11:02:04 -0400 Subject: [PATCH 2/2] undo spotless --- .../trace/api/config/TracerConfig.java | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) 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 ea6afbd7d78..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 @@ -1,4 +1,5 @@ package datadog.trace.api.config; + /** * A list of keys to be used in a Properties instance with dd-trace-ot's DDTracer as follows: * @@ -16,6 +17,7 @@ public final class TracerConfig { public static final String ID_GENERATION_STRATEGY = "id.generation.strategy"; public static final String WRITER_TYPE = "writer.type"; public static final String WRITER_BAGGAGE_INJECT = "writer.baggage.inject"; + public static final String PRIORITIZATION_TYPE = "prioritization.type"; public static final String TRACE_AGENT_URL = "trace.agent.url"; public static final String AGENT_HOST = "agent.host"; @@ -72,6 +74,7 @@ public final class TracerConfig { // Use TRACE_HTTP_CLIENT_ERROR_STATUSES instead @Deprecated public static final String HTTP_CLIENT_ERROR_STATUSES = "http.client.error.statuses"; public static final String TRACE_HTTP_CLIENT_ERROR_STATUSES = "trace.http.client.error.statuses"; + public static final String SPLIT_BY_TAGS = "trace.split-by-tags"; // trace latency interceptor value should be in ms public static final String TRACE_KEEP_LATENCY_THRESHOLD_MS = @@ -86,23 +89,30 @@ public final class TracerConfig { "propagation.extract.log_header_names.enabled"; public static final String PROPAGATION_STYLE_EXTRACT = "propagation.style.extract"; public static final String PROPAGATION_STYLE_INJECT = "propagation.style.inject"; + public static final String TRACE_PROPAGATION_STYLE = "trace.propagation.style"; public static final String TRACE_PROPAGATION_STYLE_EXTRACT = "trace.propagation.style.extract"; public static final String TRACE_PROPAGATION_STYLE_INJECT = "trace.propagation.style.inject"; public static final String TRACE_PROPAGATION_EXTRACT_FIRST = "trace.propagation.extract.first"; public static final String TRACE_BAGGAGE_MAX_ITEMS = "trace.baggage.max.items"; public static final String TRACE_BAGGAGE_MAX_BYTES = "trace.baggage.max.bytes"; + public static final String ENABLE_TRACE_AGENT_V05 = "trace.agent.v0.5.enabled"; + public static final String CLIENT_IP_ENABLED = "trace.client-ip.enabled"; + public static final String TRACE_128_BIT_TRACEID_GENERATION_ENABLED = "trace.128.bit.traceid.generation.enabled"; + public static final String SECURE_RANDOM = "trace.secure-random"; + /** * Disables validation that prevents invalid combinations of sampling priority and sampling * mechanism on the set sampling priority calls. This check is enabled by default. */ public static final String SAMPLING_MECHANISM_VALIDATION_DISABLED = "trace.sampling.mechanism.validation.disabled"; + /** * Limit for x-datadog-tags. When exceeded it will stop propagating Datadog tags and will log a * warning. @@ -110,21 +120,30 @@ public final class TracerConfig { public static final String TRACE_X_DATADOG_TAGS_MAX_LENGTH = "trace.x-datadog-tags.max.length"; public static final String CLOCK_SYNC_PERIOD = "trace.clock.sync.period"; + public static final String TRACE_SPAN_ATTRIBUTE_SCHEMA = "trace.span.attribute.schema"; + public static final String TRACE_LONG_RUNNING_ENABLED = "trace.experimental.long-running.enabled"; + public static final String TRACE_LONG_RUNNING_INITIAL_FLUSH_INTERVAL = "trace.experimental.long-running.initial.flush.interval"; public static final String TRACE_LONG_RUNNING_FLUSH_INTERVAL = "trace.experimental.long-running.flush.interval"; public static final String TRACE_PEER_SERVICE_DEFAULTS_ENABLED = "trace.peer.service.defaults.enabled"; + public static final String TRACE_PEER_SERVICE_COMPONENT_OVERRIDES = "trace.peer.service.component.overrides"; + public static final String TRACE_REMOVE_INTEGRATION_SERVICE_NAMES_ENABLED = "trace.remove.integration-service-names.enabled"; + public static final String TRACE_PEER_SERVICE_MAPPING = "trace.peer.service.mapping"; + public static final String TRACE_FLUSH_INTERVAL = "trace.flush.interval"; + public static final String TRACE_POST_PROCESSING_TIMEOUT = "trace.post-processing.timeout"; + public static final String TRACE_CLOUD_PAYLOAD_TAGGING_SERVICES = "trace.cloud.payload.tagging.services"; public static final String TRACE_CLOUD_REQUEST_PAYLOAD_TAGGING =