Skip to content

Commit a18eeb9

Browse files
khanayan123claude
andcommitted
Consolidate session ID propagation into existing ProcessImplStartAdvice
Remove separate ProcessBuilderSessionId instrumentation files and fold env var injection into the existing ProcessImplStartAdvice. Adds _DD_ROOT_JAVA_SESSION_ID to the child process environment map directly in the ProcessImpl.start() hook. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
1 parent c041595 commit a18eeb9

File tree

5 files changed

+25
-87
lines changed

5 files changed

+25
-87
lines changed

dd-java-agent/instrumentation/java/java-lang/java-lang-1.8/src/main/java/datadog/trace/instrumentation/java/lang/ProcessBuilderSessionIdAdvice.java

Lines changed: 0 additions & 15 deletions
This file was deleted.

dd-java-agent/instrumentation/java/java-lang/java-lang-1.8/src/main/java/datadog/trace/instrumentation/java/lang/ProcessBuilderSessionIdInstrumentation.java

Lines changed: 0 additions & 35 deletions
This file was deleted.

dd-java-agent/instrumentation/java/java-lang/java-lang-1.8/src/main/java/datadog/trace/instrumentation/java/lang/ProcessImplStartAdvice.java

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,23 @@
11
package datadog.trace.instrumentation.java.lang;
22

3+
import datadog.trace.api.Config;
34
import datadog.trace.bootstrap.instrumentation.api.AgentSpan;
45
import datadog.trace.bootstrap.instrumentation.api.AgentTracer;
56
import datadog.trace.bootstrap.instrumentation.api.java.lang.ProcessImplInstrumentationHelpers;
7+
import java.util.Map;
68
import net.bytebuddy.asm.Advice;
79

810
class ProcessImplStartAdvice {
11+
@SuppressWarnings("unchecked")
912
@Advice.OnMethodEnter(suppress = Throwable.class)
10-
public static AgentSpan beforeStart(@Advice.Argument(0) final String[] command) {
13+
public static AgentSpan beforeStart(
14+
@Advice.Argument(0) final String[] command,
15+
@Advice.Argument(value = 1, readOnly = false) Map<String, String> environment) {
16+
String rootSessionId = Config.get().getRootSessionId();
17+
if (rootSessionId != null && environment != null) {
18+
environment.put("_DD_ROOT_JAVA_SESSION_ID", rootSessionId);
19+
}
20+
1121
if (!ProcessImplInstrumentationHelpers.ONLINE) {
1222
return null;
1323
}

dd-java-agent/instrumentation/java/java-lang/java-lang-1.8/src/test/groovy/datadog/trace/instrumentation/java/lang/ProcessBuilderSessionIdSpecification.groovy

Lines changed: 0 additions & 36 deletions
This file was deleted.

dd-java-agent/instrumentation/java/java-lang/java-lang-1.8/src/test/groovy/datadog/trace/instrumentation/java/lang/ProcessImplInstrumentationSpecification.groovy

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ package datadog.trace.instrumentation.java.lang
33
import datadog.trace.agent.test.InstrumentationSpecification
44
import datadog.trace.agent.test.asserts.SpanAssert
55
import datadog.trace.agent.test.utils.TraceUtils
6+
import datadog.trace.api.Config
67
import datadog.trace.bootstrap.ActiveSubsystems
78

89
import java.util.concurrent.TimeUnit
@@ -331,4 +332,17 @@ class ProcessImplInstrumentationSpecification extends InstrumentationSpecificati
331332
['/does/not/exist/cmd', '--pass', 'abc', '--token=def'] | '["/does/not/exist/cmd","--pass","?","--token=?"]'
332333
['/does/not/exist/md5', '-s', 'pony'] | '["/does/not/exist/md5","?","?"]'
333334
}
335+
336+
void 'child process inherits root session ID'() {
337+
when:
338+
def command = ['/bin/sh', '-c', 'echo $_DD_ROOT_JAVA_SESSION_ID']
339+
def builder = new ProcessBuilder(command)
340+
Process p = builder.start()
341+
def output = p.inputStream.text.trim()
342+
def terminated = p.waitFor(5, TimeUnit.SECONDS)
343+
344+
then:
345+
terminated
346+
output == Config.get().getRootSessionId()
347+
}
334348
}

0 commit comments

Comments
 (0)