Skip to content

Commit 714017b

Browse files
authored
Register config-inversion for InstrumenterConfig (#9953)
* Register ConfigInversion netric collector for InstrumenterConfig InstrumenterConfig runs before Config and checks settings that control instrumentation. We skip the registration when doing native-image builds because we deliberately turn off non-critical features like telemetry for native-image. This change also simplifies ConfigInversionMetricCollectorProvider.get() for performance reasons, while moving debug logs to NoOpConfigInversionMetricCollector when the telemetry based implementation is not yet registered. * Document DBCP2 and HIKARI integration flags * Add NoOpConfigInversionMetricCollector to expected class list in GraalVM
1 parent 7e905c8 commit 714017b

File tree

5 files changed

+24
-14
lines changed

5 files changed

+24
-14
lines changed

dd-java-agent/instrumentation/graal/native-image/src/main/java/datadog/trace/instrumentation/graal/nativeimage/NativeImageGeneratorRunnerInstrumentation.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -107,6 +107,7 @@ public static void onEnter(@Advice.Argument(value = 0, readOnly = false) String[
107107
+ "datadog.trace.api.telemetry.ConfigInversionMetricCollectorProvider:rerun,"
108108
+ "datadog.trace.api.telemetry.ConfigInversionMetricCollectorImpl:build_time,"
109109
+ "datadog.trace.api.telemetry.ConfigInversionMetricCollectorImpl$ConfigInversionMetric:build_time,"
110+
+ "datadog.trace.api.telemetry.NoOpConfigInversionMetricCollector:build_time,"
110111
+ "datadog.trace.api.telemetry.OtelEnvMetricCollectorImpl:build_time,"
111112
+ "datadog.trace.api.profiling.ProfilingEnablement:build_time,"
112113
+ "datadog.trace.bootstrap.config.provider.ConfigConverter:build_time,"

internal-api/src/main/java/datadog/trace/api/InstrumenterConfig.java

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -80,6 +80,8 @@
8080
import static datadog.trace.util.CollectionUtils.tryMakeImmutableSet;
8181

8282
import datadog.trace.api.profiling.ProfilingEnablement;
83+
import datadog.trace.api.telemetry.ConfigInversionMetricCollectorImpl;
84+
import datadog.trace.api.telemetry.ConfigInversionMetricCollectorProvider;
8385
import datadog.trace.api.telemetry.OtelEnvMetricCollectorImpl;
8486
import datadog.trace.api.telemetry.OtelEnvMetricCollectorProvider;
8587
import datadog.trace.bootstrap.config.provider.ConfigProvider;
@@ -107,6 +109,14 @@
107109
* @see Config for other configurations
108110
*/
109111
public class InstrumenterConfig {
112+
static {
113+
// skip registration when building native-images as telemetry is not available
114+
if (!Platform.isNativeImageBuilder()) {
115+
ConfigInversionMetricCollectorProvider.register(
116+
ConfigInversionMetricCollectorImpl.getInstance());
117+
}
118+
}
119+
110120
private final ConfigProvider configProvider;
111121

112122
private final boolean triageEnabled;

metadata/supported-configurations.json

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -633,6 +633,7 @@
633633
"DD_TRACE_DATANUCLEUS_ANALYTICS_SAMPLE_RATE": ["A"],
634634
"DD_TRACE_DATANUCLEUS_ENABLED": ["A"],
635635
"DD_TRACE_DB2_ENABLED": ["A"],
636+
"DD_TRACE_DBCP2_ENABLED": ["A"],
636637
"DD_TRACE_DBM_ENABLED": ["A"],
637638
"DD_TRACE_DBSTATEMENTRULE_ENABLED": ["A"],
638639
"DD_TRACE_DB_CLIENT_SPLIT_BY_HOST": ["A"],
@@ -747,6 +748,7 @@
747748
"DD_TRACE_HIBERNATE_CORE_ANALYTICS_SAMPLE_RATE": ["A"],
748749
"DD_TRACE_HIBERNATE_CORE_ENABLED": ["A"],
749750
"DD_TRACE_HIBERNATE_ENABLED": ["A"],
751+
"DD_TRACE_HIKARI_ENABLED": ["A"],
750752
"DD_TRACE_HTTPASYNCCLIENT4_LEGACY_TRACING_ENABLED": ["A"],
751753
"DD_TRACE_HTTPASYNCCLIENT5_ENABLED": ["A"],
752754
"DD_TRACE_HTTPASYNCCLIENT_ANALYTICS_ENABLED": ["A"],
@@ -1472,6 +1474,7 @@
14721474
"DD_TRACE_DATANUCLEUS_ANALYTICS_SAMPLE_RATE": ["DD_DATANUCLEUS_ANALYTICS_SAMPLE_RATE"],
14731475
"DD_TRACE_DATANUCLEUS_ENABLED": ["DD_TRACE_INTEGRATION_DATANUCLEUS_ENABLED","DD_INTEGRATION_DATANUCLEUS_ENABLED"],
14741476
"DD_TRACE_DB2_ENABLED": ["DD_TRACE_INTEGRATION_DB2_ENABLED","DD_INTEGRATION_DB2_ENABLED"],
1477+
"DD_TRACE_DBCP2_ENABLED": ["DD_TRACE_INTEGRATION_DBCP2_ENABLED","DD_INTEGRATION_DBCP2_ENABLED"],
14751478
"DD_TRACE_DBM_ENABLED": ["DD_TRACE_INTEGRATION_DBM_ENABLED","DD_INTEGRATION_DBM_ENABLED"],
14761479
"DD_TRACE_DEFINECLASS_ENABLED": ["DD_TRACE_INTEGRATION_DEFINECLASS_ENABLED","DD_INTEGRATION_DEFINECLASS_ENABLED"],
14771480
"DD_TRACE_DIRECTALLOCATION_ENABLED": ["DD_TRACE_INTEGRATION_DIRECTALLOCATION_ENABLED","DD_INTEGRATION_DIRECTALLOCATION_ENABLED"],
@@ -1543,6 +1546,7 @@
15431546
"DD_TRACE_HIBERNATE_CORE_ANALYTICS_SAMPLE_RATE": ["DD_HIBERNATE_CORE_ANALYTICS_SAMPLE_RATE"],
15441547
"DD_TRACE_HIBERNATE_CORE_ENABLED": ["DD_TRACE_INTEGRATION_HIBERNATE_CORE_ENABLED","DD_INTEGRATION_HIBERNATE_CORE_ENABLED"],
15451548
"DD_TRACE_HIBERNATE_ENABLED": ["DD_TRACE_INTEGRATION_HIBERNATE_ENABLED","DD_INTEGRATION_HIBERNATE_ENABLED"],
1549+
"DD_TRACE_HIKARI_ENABLED": ["DD_TRACE_INTEGRATION_HIKARI_ENABLED","DD_INTEGRATION_HIKARI_ENABLED"],
15461550
"DD_TRACE_HTTPASYNCCLIENT4_LEGACY_TRACING_ENABLED": ["DD_HTTPASYNCCLIENT4_LEGACY_TRACING_ENABLED"],
15471551
"DD_TRACE_HTTPASYNCCLIENT5_ENABLED": ["DD_TRACE_INTEGRATION_HTTPASYNCCLIENT5_ENABLED","DD_INTEGRATION_HTTPASYNCCLIENT5_ENABLED"],
15481552
"DD_TRACE_HTTPASYNCCLIENT_ANALYTICS_SAMPLE_RATE": ["DD_HTTPASYNCCLIENT_ANALYTICS_SAMPLE_RATE"],

utils/config-utils/src/main/java/datadog/trace/api/telemetry/ConfigInversionMetricCollectorProvider.java

Lines changed: 2 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1,23 +1,12 @@
11
package datadog.trace.api.telemetry;
22

3-
import org.slf4j.Logger;
4-
import org.slf4j.LoggerFactory;
5-
63
public final class ConfigInversionMetricCollectorProvider {
7-
private static final Logger log =
8-
LoggerFactory.getLogger(ConfigInversionMetricCollectorProvider.class);
9-
private static ConfigInversionMetricCollector INSTANCE = null;
4+
private static ConfigInversionMetricCollector INSTANCE =
5+
NoOpConfigInversionMetricCollector.getInstance();
106

117
private ConfigInversionMetricCollectorProvider() {}
128

139
public static ConfigInversionMetricCollector get() {
14-
if (INSTANCE == null) {
15-
log.debug(
16-
"ConfigInversionMetricCollector has not been registered. Defaulting to NoOp implementation.");
17-
// Return NoOp implementation for build tasks like instrumentJava that run before
18-
// implementation is registered
19-
return NoOpConfigInversionMetricCollector.getInstance();
20-
}
2110
return INSTANCE;
2211
}
2312

utils/config-utils/src/main/java/datadog/trace/api/telemetry/NoOpConfigInversionMetricCollector.java

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,8 @@
11
package datadog.trace.api.telemetry;
22

3+
import org.slf4j.Logger;
4+
import org.slf4j.LoggerFactory;
5+
36
/**
47
* NOOP implementation of ConfigInversionMetricCollector. Used as a default when the real collector
58
* is not registered during build tasks like instrumentJava.
@@ -8,6 +11,9 @@ public final class NoOpConfigInversionMetricCollector implements ConfigInversion
811
private static final NoOpConfigInversionMetricCollector INSTANCE =
912
new NoOpConfigInversionMetricCollector();
1013

14+
private static final Logger log =
15+
LoggerFactory.getLogger(NoOpConfigInversionMetricCollector.class);
16+
1117
private NoOpConfigInversionMetricCollector() {}
1218

1319
public static NoOpConfigInversionMetricCollector getInstance() {
@@ -16,6 +22,6 @@ public static NoOpConfigInversionMetricCollector getInstance() {
1622

1723
@Override
1824
public void setUndocumentedEnvVarMetric(String configName) {
19-
// NOOP - do nothing
25+
log.debug("Environment variable {} is undocumented", configName);
2026
}
2127
}

0 commit comments

Comments
 (0)