Skip to content

Commit 91f4636

Browse files
authored
Enable process level tags for java 21 applications (#9458)
* Enable process level tags for java 21 applications * Adapt tests
1 parent 030f9bb commit 91f4636

File tree

7 files changed

+32
-9
lines changed

7 files changed

+32
-9
lines changed

dd-java-agent/instrumentation/tomcat-5.5/src/latestDepTest/groovy/TomcatServer.groovy

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -65,6 +65,7 @@ class TomcatServer implements WebsocketServer {
6565
port = server.service.findConnectors()[0].localPort
6666
assert port > 0
6767
if (Config.get().isExperimentalPropagateProcessTagsEnabled()) {
68+
server.getEngine().setName("tomcat")
6869
def serverName = TraceUtils.normalizeTag(server.getEngine().getName())
6970
assert ProcessTags.getTagsAsStringList().containsAll(["server.type:tomcat", "server.name:" + serverName])
7071
} else {

dd-smoke-tests/debugger-integration-tests/src/test/java/datadog/smoketest/TracerDebuggerIntegrationTest.java

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@
1111
import com.datadog.debugger.probe.LogProbe;
1212
import com.datadog.debugger.sink.Snapshot;
1313
import com.squareup.moshi.JsonAdapter;
14+
import datadog.environment.JavaVirtualMachine;
1415
import datadog.trace.agent.test.utils.PortUtils;
1516
import datadog.trace.bootstrap.debugger.MethodLocation;
1617
import datadog.trace.bootstrap.debugger.ProbeId;
@@ -184,6 +185,9 @@ private JsonSnapshotSerializer.IntakeRequest doTestTracer(
184185
ProcessBuilder processBuilder = createProcessBuilder(logFilePath, "--server.port=" + httpPort);
185186
if (enableProcessTags) {
186187
processBuilder.environment().put("DD_EXPERIMENTAL_PROPAGATE_PROCESS_TAGS_ENABLED", "true");
188+
} else if (JavaVirtualMachine.isJavaVersion(21)) {
189+
// disable explicitly since enable by default on 21
190+
processBuilder.environment().put("DD_EXPERIMENTAL_PROPAGATE_PROCESS_TAGS_ENABLED", "false");
187191
}
188192
targetProcess = processBuilder.start();
189193
// assert in logs app started

dd-trace-core/src/test/groovy/datadog/trace/common/writer/DDAgentApiTest.groovy

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,8 @@ import datadog.communication.monitor.Monitoring
88
import datadog.communication.serialization.ByteBufferConsumer
99
import datadog.communication.serialization.FlushingBuffer
1010
import datadog.communication.serialization.msgpack.MsgPackWriter
11+
import datadog.trace.api.Config
12+
import datadog.trace.api.ProcessTags
1113
import datadog.trace.api.StatsDClient
1214
import datadog.trace.bootstrap.instrumentation.api.InstrumentationTags
1315
import datadog.trace.common.sampling.RateByServiceTraceSampler
@@ -137,7 +139,8 @@ class DDAgentApiTest extends DDCoreSpecification {
137139
[[buildSpan(1L, "service.name", "my-service", PropagationTags.factory().fromHeaderValue(PropagationTags.HeaderType.DATADOG, "_dd.p.usr=123"))]] | [[new TreeMap<>([
138140
"duration" : 10,
139141
"error" : 0,
140-
"meta" : ["thread.name": Thread.currentThread().getName(), "_dd.p.usr": "123", "_dd.p.dm": "-1"],
142+
"meta" : ["thread.name": Thread.currentThread().getName(), "_dd.p.usr": "123", "_dd.p.dm": "-1"] +
143+
(Config.get().isExperimentalPropagateProcessTagsEnabled() ? ["_dd.tags.process" : ProcessTags.getTagsForSerialization().toString()] : []),
141144
"metrics" : [
142145
(DDSpanContext.PRIORITY_SAMPLING_KEY) : 1,
143146
(InstrumentationTags.DD_TOP_LEVEL as String) : 1,
@@ -157,7 +160,8 @@ class DDAgentApiTest extends DDCoreSpecification {
157160
[[buildSpan(100L, "resource.name", "my-resource", PropagationTags.factory().fromHeaderValue(PropagationTags.HeaderType.DATADOG, "_dd.p.usr=123"))]] | [[new TreeMap<>([
158161
"duration" : 10,
159162
"error" : 0,
160-
"meta" : ["thread.name": Thread.currentThread().getName(), "_dd.p.usr": "123", "_dd.p.dm": "-1"],
163+
"meta" : ["thread.name": Thread.currentThread().getName(), "_dd.p.usr": "123", "_dd.p.dm": "-1"] +
164+
(Config.get().isExperimentalPropagateProcessTagsEnabled() ? ["_dd.tags.process" : ProcessTags.getTagsForSerialization().toString()] : []),
161165
"metrics" : [
162166
(DDSpanContext.PRIORITY_SAMPLING_KEY) : 1,
163167
(InstrumentationTags.DD_TOP_LEVEL as String) : 1,

dd-trace-core/src/test/groovy/datadog/trace/common/writer/ddagent/TraceMapperV05PayloadTest.groovy

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,10 @@ class TraceMapperV05PayloadTest extends DDSpecification {
3636

3737
def "body overflow causes a flush"() {
3838
setup:
39+
// disable process tags since they are only on the first span of the chunk otherwise the calculation woes
40+
def hadProcessTags = Config.get().isExperimentalPropagateProcessTagsEnabled()
41+
injectSysConfig(EXPERIMENTAL_PROPAGATE_PROCESS_TAGS_ENABLED, "false")
42+
ProcessTags.reset()
3943
// 4x 36 ASCII characters and 2 bytes of msgpack string prefix
4044
int dictionarySpacePerTrace = 4 * (36 + 2)
4145
// enough space for two traces with distinct string values, plus the header
@@ -78,6 +82,9 @@ class TraceMapperV05PayloadTest extends DDSpecification {
7882
}
7983
then:
8084
verifier.verifyTracesConsumed()
85+
cleanup:
86+
injectSysConfig(EXPERIMENTAL_PROPAGATE_PROCESS_TAGS_ENABLED, Boolean.toString(hadProcessTags))
87+
ProcessTags.reset()
8188
}
8289

8390
def "test dictionary compressed traces written correctly"() {

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

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1508,7 +1508,8 @@ private Config(final ConfigProvider configProvider, final InstrumenterConfig ins
15081508
removeIntegrationServiceNamesEnabled =
15091509
configProvider.getBoolean(TRACE_REMOVE_INTEGRATION_SERVICE_NAMES_ENABLED, false);
15101510
experimentalPropagateProcessTagsEnabled =
1511-
configProvider.getBoolean(EXPERIMENTAL_PROPAGATE_PROCESS_TAGS_ENABLED, false);
1511+
configProvider.getBoolean(
1512+
EXPERIMENTAL_PROPAGATE_PROCESS_TAGS_ENABLED, JavaVirtualMachine.isJavaVersion(21));
15121513

15131514
peerServiceMapping = configProvider.getMergedMap(TRACE_PEER_SERVICE_MAPPING);
15141515

internal-api/src/test/groovy/datadog/trace/api/ProcessTagsForkedTest.groovy

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

3+
import datadog.environment.JavaVirtualMachine
34
import datadog.trace.api.env.CapturedEnvironment
45
import datadog.trace.test.util.DDSpecification
56

@@ -88,19 +89,20 @@ class ProcessTagsForkedTest extends DDSpecification {
8889
null | "server1" | "^((?!cluster.name|server.name|server.type).)*\$"
8990
}
9091
91-
def 'should not calculate process tags by default'() {
92+
def 'should not calculate process tags by default except for java 21'() {
93+
final boolean shouldBeEnabled = JavaVirtualMachine.isJavaVersion(21)
9294
when:
9395
ProcessTags.reset()
9496
def processTags = ProcessTags.tagsForSerialization
9597
then:
96-
assert !ProcessTags.enabled
97-
assert processTags == null
98+
assert ProcessTags.enabled == shouldBeEnabled
99+
assert (processTags != null) == shouldBeEnabled
98100
when:
99101
ProcessTags.addTag("test", "value")
100102
then:
101-
assert ProcessTags.tagsForSerialization == null
102-
assert ProcessTags.tagsAsStringList == null
103-
assert ProcessTags.tagsAsUTF8ByteStringList == null
103+
assert (ProcessTags.tagsForSerialization != null) == shouldBeEnabled
104+
assert (ProcessTags.tagsAsStringList != null) == shouldBeEnabled
105+
assert (ProcessTags.tagsAsUTF8ByteStringList != null) == shouldBeEnabled
104106
}
105107
106108
def 'should lazily recalculate when a tag is added'() {

remote-config/remote-config-core/src/test/groovy/datadog/remoteconfig/PollerRequestFactoryTest.groovy

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
package datadog.remoteconfig
22

33
import com.squareup.moshi.Moshi
4+
import datadog.environment.JavaVirtualMachine
45
import datadog.remoteconfig.tuf.RemoteConfigRequest
56
import datadog.trace.api.ProcessTags
67
import datadog.trace.bootstrap.instrumentation.api.Tags
@@ -58,8 +59,11 @@ class PollerRequestFactoryTest extends DDSpecification {
5859

5960
void 'remote config provides process tags when enabled = #enabled'() {
6061
setup:
62+
// to be changed when activated by default
6163
if (enabled) {
6264
injectSysConfig(EXPERIMENTAL_PROPAGATE_PROCESS_TAGS_ENABLED, "true")
65+
} else if (JavaVirtualMachine.isJavaVersion(21)) {
66+
injectSysConfig(EXPERIMENTAL_PROPAGATE_PROCESS_TAGS_ENABLED, "false")
6367
}
6468
ProcessTags.reset()
6569
PollerRequestFactory factory = new PollerRequestFactory(Config.get(), TRACER_VERSION, CONTAINER_ID, ENTITY_ID, INVALID_REMOTE_CONFIG_URL, null)

0 commit comments

Comments
 (0)