Skip to content

Commit 3b2874e

Browse files
Ensure auto-detected service name is the same for every process in the same build (#8902)
1 parent 5069ac3 commit 3b2874e

File tree

12 files changed

+478
-20
lines changed

12 files changed

+478
-20
lines changed

dd-java-agent/agent-ci-visibility/src/main/java/datadog/trace/civisibility/domain/buildsystem/BuildSystemModuleImpl.java

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@
1212
import datadog.trace.api.civisibility.domain.JavaAgent;
1313
import datadog.trace.api.civisibility.telemetry.CiVisibilityMetricCollector;
1414
import datadog.trace.api.config.CiVisibilityConfig;
15+
import datadog.trace.api.config.GeneralConfig;
1516
import datadog.trace.bootstrap.instrumentation.api.AgentSpan;
1617
import datadog.trace.bootstrap.instrumentation.api.AgentSpanContext;
1718
import datadog.trace.bootstrap.instrumentation.api.Tags;
@@ -99,6 +100,8 @@ public <T extends CoverageCalculator> BuildSystemModuleImpl(
99100
settings =
100101
new BuildModuleSettings(
101102
getPropertiesPropagatedToChildProcess(
103+
config.getServiceName(),
104+
config.isServiceNameSetByUser(),
102105
moduleName,
103106
startCommand,
104107
classpath,
@@ -125,6 +128,8 @@ public void set(Map<String, String> carrier, String key, String value) {
125128
}
126129

127130
private Map<String, String> getPropertiesPropagatedToChildProcess(
131+
String serviceName,
132+
boolean userProvidedServiceName,
128133
String moduleName,
129134
String startCommand,
130135
@Nullable Collection<Path> classpath,
@@ -190,6 +195,11 @@ private Map<String, String> getPropertiesPropagatedToChildProcess(
190195
CiVisibilityConfig.CIVISIBILITY_INJECTED_TRACER_VERSION),
191196
TracerVersion.TRACER_VERSION);
192197

198+
propagatedSystemProperties.put(
199+
Strings.propertyNameToSystemPropertyName(GeneralConfig.SERVICE_NAME), serviceName);
200+
propagatedSystemProperties.put(
201+
Strings.propertyNameToSystemPropertyName(GeneralConfig.SERVICE_NAME_SET_BY_USER),
202+
String.valueOf(userProvidedServiceName));
193203
propagatedSystemProperties.put(
194204
Strings.propertyNameToSystemPropertyName(CiVisibilityConfig.CIVISIBILITY_MODULE_NAME),
195205
moduleName);

dd-java-agent/agent-ci-visibility/src/testFixtures/groovy/datadog/trace/civisibility/CiVisibilityInstrumentationTest.groovy

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -368,7 +368,7 @@ abstract class CiVisibilityInstrumentationTest extends AgentTestRunner {
368368
}
369369
}
370370

371-
def generateTestFixtures(testcaseName, events, coverages, additionalReplacements, additionalIgnoredTags) {
371+
def generateTestFixtures(String testcaseName, List<Map> events, List<Map> coverages, Map<String, String> additionalReplacements, List<String> additionalIgnoredTags) {
372372
def clazz = this.getClass()
373373
def resourceName = "/" + clazz.name.replace('.', '/') + ".class"
374374
def classfilePath = clazz.getResource(resourceName).toURI().schemeSpecificPart
@@ -380,7 +380,7 @@ abstract class CiVisibilityInstrumentationTest extends AgentTestRunner {
380380
submoduleName = "test"
381381
}
382382
def baseTemplatesPath = modulePath + "/src/" + submoduleName + "/resources/" + testcaseName
383-
CiVisibilityTestUtils.generateTemplates(baseTemplatesPath, events, coverages, additionalReplacements, additionalIgnoredTags)
383+
CiVisibilityTestUtils.generateTemplates(baseTemplatesPath, events, coverages, additionalReplacements.keySet(), additionalIgnoredTags)
384384
return [:]
385385
}
386386

dd-java-agent/agent-ci-visibility/src/testFixtures/groovy/datadog/trace/civisibility/CiVisibilitySmokeTest.groovy

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -6,14 +6,14 @@ import spock.lang.Specification
66
abstract class CiVisibilitySmokeTest extends Specification {
77
static final List<String> SMOKE_IGNORED_TAGS = ["content.meta.['_dd.integration']"]
88

9-
protected verifyEventsAndCoverages(String projectName, String toolchain, String toolchainVersion, List<Map<String, Object>> events, List<Map<String, Object>> coverages) {
9+
protected verifyEventsAndCoverages(String projectName, String toolchain, String toolchainVersion, List<Map<String, Object>> events, List<Map<String, Object>> coverages, List<String> additionalDynamicTags = []) {
1010
def additionalReplacements = ["content.meta.['test.toolchain']": "$toolchain:$toolchainVersion"]
1111

1212
if (System.getenv().get("GENERATE_TEST_FIXTURES") != null) {
1313
def baseTemplatesPath = CiVisibilitySmokeTest.classLoader.getResource(projectName).toURI().schemeSpecificPart.replace('build/resources/test', 'src/test/resources')
14-
CiVisibilityTestUtils.generateTemplates(baseTemplatesPath, events, coverages, additionalReplacements, SMOKE_IGNORED_TAGS)
14+
CiVisibilityTestUtils.generateTemplates(baseTemplatesPath, events, coverages, additionalReplacements.keySet() + additionalDynamicTags, SMOKE_IGNORED_TAGS)
1515
} else {
16-
CiVisibilityTestUtils.assertData(projectName, events, coverages, additionalReplacements, SMOKE_IGNORED_TAGS)
16+
CiVisibilityTestUtils.assertData(projectName, events, coverages, additionalReplacements, SMOKE_IGNORED_TAGS, additionalDynamicTags)
1717
}
1818
}
1919

dd-java-agent/agent-ci-visibility/src/testFixtures/groovy/datadog/trace/civisibility/CiVisibilityTestUtils.groovy

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -71,28 +71,28 @@ abstract class CiVisibilityTestUtils {
7171
/**
7272
* Use this method to generate expected data templates
7373
*/
74-
static void generateTemplates(String baseTemplatesPath, List<Map<?, ?>> events, List<Map<?, ?>> coverages, Map<String, String> additionalReplacements, List<String> ignoredTags = []) {
74+
static void generateTemplates(String baseTemplatesPath, List<Map<?, ?>> events, List<Map<?, ?>> coverages, Collection<String> additionalDynamicPaths, List<String> ignoredTags = []) {
7575
if (!ignoredTags.empty) {
7676
events = removeTags(events, ignoredTags)
7777
}
7878
events.sort(EVENT_RESOURCE_COMPARATOR)
7979

8080
def templateGenerator = new TemplateGenerator(new LabelGenerator())
81-
def compiledAdditionalReplacements = compile(additionalReplacements.keySet())
81+
def compiledAdditionalReplacements = compile(additionalDynamicPaths)
8282

8383
Files.createDirectories(Paths.get(baseTemplatesPath))
8484
Files.write(Paths.get(baseTemplatesPath, "events.ftl"), templateGenerator.generateTemplate(events, EVENT_DYNAMIC_PATHS + compiledAdditionalReplacements).bytes)
8585
Files.write(Paths.get(baseTemplatesPath, "coverages.ftl"), templateGenerator.generateTemplate(coverages, COVERAGE_DYNAMIC_PATHS + compiledAdditionalReplacements).bytes)
8686
}
8787

88-
static Map<String, String> assertData(String baseTemplatesPath, List<Map<?, ?>> events, List<Map<?, ?>> coverages, Map<String, String> additionalReplacements, List<String> ignoredTags) {
88+
static Map<String, String> assertData(String baseTemplatesPath, List<Map<?, ?>> events, List<Map<?, ?>> coverages, Map<String, String> additionalReplacements, List<String> ignoredTags, List<String> additionalDynamicPaths = []) {
8989
events.sort(EVENT_RESOURCE_COMPARATOR)
9090

9191
def labelGenerator = new LabelGenerator()
9292
def templateGenerator = new TemplateGenerator(labelGenerator)
9393

9494
def replacementMap
95-
replacementMap = templateGenerator.generateReplacementMap(events, EVENT_DYNAMIC_PATHS)
95+
replacementMap = templateGenerator.generateReplacementMap(events, EVENT_DYNAMIC_PATHS + compile(additionalDynamicPaths))
9696
replacementMap = templateGenerator.generateReplacementMap(coverages, COVERAGE_DYNAMIC_PATHS)
9797

9898
for (Map.Entry<String, String> e : additionalReplacements.entrySet()) {

dd-smoke-tests/maven/src/test/groovy/datadog/smoketest/MavenSmokeTest.groovy

Lines changed: 29 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -75,7 +75,7 @@ class MavenSmokeTest extends CiVisibilitySmokeTest {
7575
def agentArgs = jacocoCoverage ? [
7676
"${Strings.propertyNameToSystemPropertyName(CiVisibilityConfig.CIVISIBILITY_JACOCO_PLUGIN_VERSION)}=${JACOCO_PLUGIN_VERSION}" as String
7777
] : []
78-
def exitCode = whenRunningMavenBuild(agentArgs, commandLineParams)
78+
def exitCode = whenRunningMavenBuild(agentArgs, commandLineParams, [:])
7979

8080
if (expectSuccess) {
8181
assert exitCode == 0
@@ -118,7 +118,7 @@ class MavenSmokeTest extends CiVisibilitySmokeTest {
118118
def exitCode = whenRunningMavenBuild([
119119
"${Strings.propertyNameToSystemPropertyName(CiVisibilityConfig.CIVISIBILITY_GIT_CLIENT_ENABLED)}=false" as String,
120120
"${Strings.propertyNameToSystemPropertyName(CiVisibilityConfig.CIVISIBILITY_IMPACTED_TESTS_BACKEND_REQUEST_ENABLED)}=true" as String
121-
], [])
121+
], [], [:])
122122
assert exitCode == 0
123123

124124
verifyEventsAndCoverages(projectName, "maven", mavenVersion, mockBackend.waitForEvents(5), mockBackend.waitForCoverages(1))
@@ -143,7 +143,7 @@ class MavenSmokeTest extends CiVisibilitySmokeTest {
143143

144144
mockBackend.givenAttemptToFixTests("Maven Smoke Tests Project maven-surefire-plugin default-test", "datadog.smoke.TestFailed", "test_another_failed")
145145

146-
def exitCode = whenRunningMavenBuild([], [])
146+
def exitCode = whenRunningMavenBuild([], [], [:])
147147
assert exitCode == 0
148148

149149
verifyEventsAndCoverages(projectName, "maven", mavenVersion, mockBackend.waitForEvents(15), mockBackend.waitForCoverages(6))
@@ -228,6 +228,22 @@ class MavenSmokeTest extends CiVisibilitySmokeTest {
228228
] | 12
229229
}
230230

231+
def "test service name is propagated to child processes"() {
232+
givenWrapperPropertiesFile(mavenVersion)
233+
givenMavenProjectFiles(projectName)
234+
givenMavenDependenciesAreLoaded(projectName, mavenVersion)
235+
236+
def exitCode = whenRunningMavenBuild([], [], [:], false)
237+
assert exitCode == 0
238+
239+
def additionalDynamicPaths = ["content.service"]
240+
verifyEventsAndCoverages(projectName, "maven", mavenVersion, mockBackend.waitForEvents(5), mockBackend.waitForCoverages(1), additionalDynamicPaths)
241+
242+
where:
243+
projectName | mavenVersion
244+
"test_successful_maven_run_child_service_propagation" | "3.9.9"
245+
}
246+
231247
private void givenWrapperPropertiesFile(String mavenVersion) {
232248
def distributionUrl = "https://repo.maven.apache.org/maven2/org/apache/maven/apache-maven/${mavenVersion}/apache-maven-${mavenVersion}-bin.zip"
233249

@@ -291,7 +307,7 @@ class MavenSmokeTest extends CiVisibilitySmokeTest {
291307
private static final Collection<String> LOADED_DEPENDENCIES = new HashSet<>()
292308

293309
private void retryUntilSuccessfulOrNoAttemptsLeft(List<String> mvnCommand, Map<String, String> additionalEnvVars = [:]) {
294-
def processBuilder = createProcessBuilder(mvnCommand, false, [], additionalEnvVars)
310+
def processBuilder = createProcessBuilder(mvnCommand, false, false, [], additionalEnvVars)
295311
for (int attempt = 0; attempt < DEPENDENCIES_DOWNLOAD_RETRIES; attempt++) {
296312
def exitCode = runProcess(processBuilder.start())
297313
if (exitCode == 0) {
@@ -301,8 +317,8 @@ class MavenSmokeTest extends CiVisibilitySmokeTest {
301317
throw new AssertionError((Object) "Tried $DEPENDENCIES_DOWNLOAD_RETRIES times to execute $mvnCommand and failed")
302318
}
303319

304-
private int whenRunningMavenBuild(List<String> additionalAgentArgs, List<String> additionalCommandLineParams, Map<String, String> additionalEnvVars = [:]) {
305-
def processBuilder = createProcessBuilder(["-B", "test"] + additionalCommandLineParams, true, additionalAgentArgs, additionalEnvVars)
320+
private int whenRunningMavenBuild(List<String> additionalAgentArgs, List<String> additionalCommandLineParams, Map<String, String> additionalEnvVars, boolean setServiceName = true) {
321+
def processBuilder = createProcessBuilder(["-B", "test"] + additionalCommandLineParams, true, setServiceName, additionalAgentArgs, additionalEnvVars)
306322

307323
processBuilder.environment().put("DD_API_KEY", "01234567890abcdef123456789ABCDEF")
308324

@@ -323,13 +339,13 @@ class MavenSmokeTest extends CiVisibilitySmokeTest {
323339
return p.exitValue()
324340
}
325341

326-
ProcessBuilder createProcessBuilder(List<String> mvnCommand, boolean runWithAgent, List<String> additionalAgentArgs, Map<String, String> additionalEnvVars) {
342+
ProcessBuilder createProcessBuilder(List<String> mvnCommand, boolean runWithAgent, boolean setServiceName, List<String> additionalAgentArgs, Map<String, String> additionalEnvVars) {
327343
String mavenRunnerShadowJar = System.getProperty("datadog.smoketest.maven.jar.path")
328344
assert new File(mavenRunnerShadowJar).isFile()
329345

330346
List<String> command = new ArrayList<>()
331347
command.add(javaPath())
332-
command.addAll(jvmArguments(runWithAgent, additionalAgentArgs))
348+
command.addAll(jvmArguments(runWithAgent, setServiceName, additionalAgentArgs))
333349
command.addAll((String[]) ["-jar", mavenRunnerShadowJar])
334350
command.addAll(programArguments())
335351
command.addAll(mvnCommand)
@@ -350,7 +366,7 @@ class MavenSmokeTest extends CiVisibilitySmokeTest {
350366
return System.getProperty("java.home") + separator + "bin" + separator + "java"
351367
}
352368

353-
List<String> jvmArguments(boolean runWithAgent, List<String> additionalAgentArgs) {
369+
List<String> jvmArguments(boolean runWithAgent, boolean setServiceName, List<String> additionalAgentArgs) {
354370
def arguments = [
355371
"-D${MavenWrapperMain.MVNW_VERBOSE}=true".toString(),
356372
"-Duser.dir=${projectHome.toAbsolutePath()}".toString(),
@@ -368,7 +384,6 @@ class MavenSmokeTest extends CiVisibilitySmokeTest {
368384
(System.getenv("DD_CIVISIBILITY_SMOKETEST_DEBUG_CHILD") != null ? "${Strings.propertyNameToSystemPropertyName(CiVisibilityConfig.CIVISIBILITY_DEBUG_PORT)}=5055," : "") +
369385
"${Strings.propertyNameToSystemPropertyName(GeneralConfig.TRACE_DEBUG)}=true," +
370386
"${Strings.propertyNameToSystemPropertyName(GeneralConfig.ENV)}=${TEST_ENVIRONMENT_NAME}," +
371-
"${Strings.propertyNameToSystemPropertyName(GeneralConfig.SERVICE_NAME)}=${TEST_SERVICE_NAME}," +
372387
"${Strings.propertyNameToSystemPropertyName(CiVisibilityConfig.CIVISIBILITY_ENABLED)}=true," +
373388
"${Strings.propertyNameToSystemPropertyName(CiVisibilityConfig.CIVISIBILITY_AGENTLESS_ENABLED)}=true," +
374389
"${Strings.propertyNameToSystemPropertyName(CiVisibilityConfig.CIVISIBILITY_CIPROVIDER_INTEGRATION_ENABLED)}=false," +
@@ -377,6 +392,10 @@ class MavenSmokeTest extends CiVisibilitySmokeTest {
377392
"${Strings.propertyNameToSystemPropertyName(CiVisibilityConfig.CIVISIBILITY_AGENTLESS_URL)}=${mockBackend.intakeUrl}," +
378393
"${Strings.propertyNameToSystemPropertyName(CiVisibilityConfig.CIVISIBILITY_FLAKY_RETRY_ONLY_KNOWN_FLAKES)}=true,"
379394

395+
if (setServiceName) {
396+
agentArgument += "${Strings.propertyNameToSystemPropertyName(GeneralConfig.SERVICE_NAME)}=${TEST_SERVICE_NAME},"
397+
}
398+
380399
agentArgument += additionalAgentArgs.join(",")
381400

382401
arguments += agentArgument.toString()
Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
[ {
2+
"files" : [ {
3+
"filename" : "src/test/java/datadog/smoke/TestSucceed.java"
4+
}, {
5+
"filename" : "src/main/java/datadog/smoke/Calculator.java"
6+
} ],
7+
"span_id" : ${content_span_id_5},
8+
"test_session_id" : ${content_test_session_id},
9+
"test_suite_id" : ${content_test_suite_id}
10+
} ]

0 commit comments

Comments
 (0)