Skip to content

Commit e4af3f5

Browse files
mhliddAlexeyKuznetsov-DD
authored andcommitted
Migrate Querying of Environment Variables to to ConfigHelper (#9620)
* Refactored EnvironmentVariables to be testable. * adding supported-configurations.json file * removing extra supported-configurations.json * migrating config-utils tests and ConfigInversionMetric telemetry * config inversion init * migrating config-utils tests * undo move of test files that rely on inject*config * responding to PR comments * updating class coverage exclude * cleanup and code coverage * init migration * creating noop implementation of ConfigInversionMetricCollector * adding Noop implementation to exclude code coverage * adding to bootstrap classpath for testing * bugfixes * adding more configurations to supported-configurations and updating native test classes * fix native build and update telemetry test with clear error message * PR comments * removing explicit dependency on environment component * responding to PR comments * updating native loading * updating failing tests * updating memory for native build * adding documentation for failing tests * increasing memory * reverting gradle memory * cleanup --------- Co-authored-by: Alexey Kuznetsov <alexey.kuznetsov@datadoghq.com>
1 parent 95b1a55 commit e4af3f5

File tree

30 files changed

+142
-61
lines changed

30 files changed

+142
-61
lines changed

buildSrc/src/main/kotlin/datadog/gradle/plugin/config/ConfigInversionLinter.kt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -97,9 +97,9 @@ private fun registerCheckEnvironmentVariablesUsage(project: Project) {
9797
val javaFiles = project.fileTree(project.projectDir) {
9898
include("**/src/main/java/**/*.java")
9999
exclude("**/build/**")
100-
exclude("internal-api/src/main/java/datadog/trace/api/ConfigHelper.java")
100+
exclude("utils/config-utils/src/main/java/datadog/trace/config/inversion/ConfigHelper.java")
101101
exclude("dd-java-agent/agent-bootstrap/**")
102-
exclude("dd-java-agent/src/main/java/datadog/trace/bootstrap/BootstrapInitializationTelemetry.java")
102+
exclude("dd-java-agent/src/main/java/datadog/trace/bootstrap/**")
103103
}
104104

105105
val pattern = Regex("""EnvironmentVariables\.get\s*\(""")

components/environment/src/main/java/datadog/environment/EnvironmentVariables.java

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
import static java.util.Collections.emptyMap;
44
import static java.util.Collections.unmodifiableMap;
55

6+
import de.thetaphi.forbiddenapis.SuppressForbidden;
67
import java.util.HashMap;
78
import java.util.Map;
89
import javax.annotation.Nullable;
@@ -17,10 +18,15 @@ public final class EnvironmentVariables {
1718
private EnvironmentVariables() {}
1819

1920
public static class EnvironmentVariablesProvider {
21+
22+
// Environment Component has SecurityException handling, so it is safe to call System.getenv
23+
// here
24+
@SuppressForbidden
2025
public String get(String name) {
2126
return System.getenv(name);
2227
}
2328

29+
@SuppressForbidden
2430
public Map<String, String> getAll() {
2531
return System.getenv();
2632
}

dd-java-agent/agent-bootstrap/src/main/java/datadog/trace/bootstrap/Constants.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@ public final class Constants {
2323
"datadog.appsec.api",
2424
"datadog.trace.api",
2525
"datadog.trace.bootstrap",
26+
"datadog.trace.config.inversion",
2627
"datadog.trace.context",
2728
"datadog.trace.instrumentation.api",
2829
"datadog.trace.logging",

dd-java-agent/agent-ci-visibility/civisibility-test-fixtures/src/main/groovy/datadog/trace/civisibility/CiVisibilitySmokeTest.groovy

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -83,7 +83,7 @@ abstract class CiVisibilitySmokeTest extends Specification {
8383
protected verifyEventsAndCoverages(String projectName, String toolchain, String toolchainVersion, List<Map<String, Object>> events, List<Map<String, Object>> coverages, List<String> additionalDynamicTags = []) {
8484
def additionalReplacements = ["content.meta.['test.toolchain']": "$toolchain:$toolchainVersion"]
8585

86-
if (System.getenv().get("GENERATE_TEST_FIXTURES") != null) {
86+
if (System.getenv("GENERATE_TEST_FIXTURES") != null) {
8787
def baseTemplatesPath = CiVisibilitySmokeTest.classLoader.getResource(projectName).toURI().schemeSpecificPart.replace('build/resources/test', 'src/test/resources')
8888
CiVisibilityTestUtils.generateTemplates(baseTemplatesPath, events, coverages, additionalReplacements.keySet() + additionalDynamicTags, SMOKE_IGNORED_TAGS)
8989
} else {

dd-java-agent/agent-logging/src/main/java/datadog/trace/logging/ddlogger/DDLoggerFactory.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
11
package datadog.trace.logging.ddlogger;
22

3-
import datadog.environment.EnvironmentVariables;
43
import datadog.environment.SystemProperties;
54
import datadog.trace.api.Platform;
5+
import datadog.trace.config.inversion.ConfigHelper;
66
import datadog.trace.logging.LogLevel;
77
import datadog.trace.logging.LogLevelSwitcher;
88
import datadog.trace.logging.LoggerHelper;
@@ -108,7 +108,7 @@ private static boolean isFlagEnabled(
108108
if ("false".equalsIgnoreCase(value)) {
109109
return false;
110110
}
111-
value = EnvironmentVariables.get(envVar);
111+
value = ConfigHelper.env(envVar);
112112
if ("true".equalsIgnoreCase(value)) {
113113
return true;
114114
}

dd-java-agent/instrumentation-testing/src/main/java/datadog/trace/agent/test/BootstrapClasspathSetupListener.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -70,6 +70,7 @@ public void launcherSessionOpened(LauncherSession session) {
7070
"datadog.appsec.api",
7171
"datadog.trace.api",
7272
"datadog.trace.bootstrap",
73+
"datadog.trace.config.inversion",
7374
"datadog.trace.context",
7475
"datadog.trace.instrumentation.api",
7576
"datadog.trace.logging",

dd-java-agent/instrumentation/aws-java/aws-java-lambda-handler-1.2/src/main/java/datadog/trace/instrumentation/aws/v1/lambda/LambdaHandlerInstrumentation.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -16,14 +16,14 @@
1616
import com.amazonaws.services.lambda.runtime.Context;
1717
import com.amazonaws.services.lambda.runtime.RequestHandler;
1818
import com.google.auto.service.AutoService;
19-
import datadog.environment.EnvironmentVariables;
2019
import datadog.trace.agent.tooling.Instrumenter;
2120
import datadog.trace.agent.tooling.InstrumenterModule;
2221
import datadog.trace.bootstrap.CallDepthThreadLocalMap;
2322
import datadog.trace.bootstrap.instrumentation.api.AgentScope;
2423
import datadog.trace.bootstrap.instrumentation.api.AgentSpan;
2524
import datadog.trace.bootstrap.instrumentation.api.AgentSpanContext;
2625
import datadog.trace.bootstrap.instrumentation.api.AgentTracer;
26+
import datadog.trace.config.inversion.ConfigHelper;
2727
import net.bytebuddy.asm.Advice;
2828
import net.bytebuddy.description.type.TypeDescription;
2929
import net.bytebuddy.matcher.ElementMatcher;
@@ -61,7 +61,7 @@ public String[] helperClassNames() {
6161

6262
@Override
6363
protected boolean defaultEnabled() {
64-
return EnvironmentVariables.get(HANDLER_ENV_NAME) != null;
64+
return ConfigHelper.env(HANDLER_ENV_NAME) != null;
6565
}
6666

6767
@Override

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

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -102,8 +102,10 @@ public static void onEnter(@Advice.Argument(value = 0, readOnly = false) String[
102102
+ "datadog.trace.api.ResolverCacheConfig$5:build_time,"
103103
+ "datadog.trace.api.TracePropagationStyle:build_time,"
104104
+ "datadog.trace.api.TracePropagationBehaviorExtract:build_time,"
105-
+ "datadog.trace.api.telemetry.OtelEnvMetricCollectorImpl:build_time,"
105+
+ "datadog.trace.api.telemetry.ConfigInversionMetricCollectorProvider:rerun,"
106106
+ "datadog.trace.api.telemetry.ConfigInversionMetricCollectorImpl:build_time,"
107+
+ "datadog.trace.api.telemetry.ConfigInversionMetricCollectorImpl$ConfigInversionMetric:build_time,"
108+
+ "datadog.trace.api.telemetry.OtelEnvMetricCollectorImpl:build_time,"
107109
+ "datadog.trace.api.profiling.ProfilingEnablement:build_time,"
108110
+ "datadog.trace.bootstrap.config.provider.ConfigConverter:build_time,"
109111
+ "datadog.trace.bootstrap.config.provider.ConfigConverter$ValueOfLookup:build_time,"
@@ -140,6 +142,9 @@ public static void onEnter(@Advice.Argument(value = 0, readOnly = false) String[
140142
+ "datadog.trace.bootstrap.instrumentation.jfr.backpressure.BackpressureSampleEvent:build_time,"
141143
+ "datadog.trace.bootstrap.instrumentation.jfr.directallocation.DirectAllocationTotalEvent:build_time,"
142144
+ "datadog.trace.bootstrap.WeakMapContextStore:build_time,"
145+
+ "datadog.trace.config.inversion.ConfigHelper:rerun,"
146+
+ "datadog.trace.config.inversion.ConfigHelper$StrictnessPolicy:rerun,"
147+
+ "datadog.trace.config.inversion.GeneratedSupportedConfigurations:rerun,"
143148
+ "datadog.trace.instrumentation.guava10.GuavaAsyncResultExtension:build_time,"
144149
+ "datadog.trace.instrumentation.reactivestreams.ReactiveStreamsAsyncResultExtension:build_time,"
145150
+ "datadog.trace.instrumentation.reactor.core.ReactorAsyncResultExtension:build_time,"

dd-java-agent/instrumentation/maven/maven-3.2.1/src/main/java/datadog/trace/instrumentation/maven3/MavenUtils.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
package datadog.trace.instrumentation.maven3;
22

3-
import datadog.environment.EnvironmentVariables;
43
import datadog.trace.api.civisibility.domain.JavaAgent;
4+
import datadog.trace.config.inversion.ConfigHelper;
55
import datadog.trace.util.MethodHandles;
66
import datadog.trace.util.Strings;
77
import de.thetaphi.forbiddenapis.SuppressForbidden;
@@ -66,7 +66,7 @@ public abstract class MavenUtils {
6666
* of the request object
6767
*/
6868
public static String getCommandLine(MavenSession session) {
69-
String mavenCmdLineArgsEnvVar = EnvironmentVariables.get(MAVEN_CMD_LINE_ARGS_ENVIRONMENT_VAR);
69+
String mavenCmdLineArgsEnvVar = ConfigHelper.env(MAVEN_CMD_LINE_ARGS_ENVIRONMENT_VAR);
7070
if (mavenCmdLineArgsEnvVar != null) {
7171
return MVN_CMD_LINE_INVOCATION + mavenCmdLineArgsEnvVar;
7272
}

dd-java-agent/src/main/java6/datadog/trace/bootstrap/AgentPreCheck.java

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -90,6 +90,9 @@ private static boolean compatible() {
9090
}
9191

9292
// Reachable for testing
93+
// System.getenv usage is necessary since class is designed to be Java 6 compatible, while
94+
// Environment component is for Java 8+
95+
@SuppressForbidden
9396
static boolean compatible(String javaVersion, String javaHome, PrintStream output) {
9497
int majorJavaVersion = parseJavaMajorVersion(javaVersion);
9598

0 commit comments

Comments
 (0)