Skip to content

Commit ab049bd

Browse files
authored
Refactor multiple implementations of W3C trace context building into a dedicated helper (#10261)
* refactor multiple implementations of W3C trace context building into a dedicated helper * move W3CTraceParent utility to core package instead of public API * create overloads to make W3CTraceParent util easier to use * fix missing helper class definition in mongodb instrumentation * fix missing helper class definition in jdbc instrumentations * replace string concatenation by string builder * remove sampling priority argument from the trace parent util
1 parent 83f64d5 commit ab049bd

File tree

13 files changed

+96
-68
lines changed

13 files changed

+96
-68
lines changed

dd-java-agent/instrumentation/jdbc/src/main/java/datadog/trace/instrumentation/jdbc/AbstractConnectionInstrumentation.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,7 @@ public Map<String, String> contextStore() {
3333
@Override
3434
public String[] helperClassNames() {
3535
return new String[] {
36-
packageName + ".JDBCDecorator",
36+
"datadog.trace.core.propagation.W3CTraceParent", packageName + ".JDBCDecorator",
3737
};
3838
}
3939

dd-java-agent/instrumentation/jdbc/src/main/java/datadog/trace/instrumentation/jdbc/AbstractPreparedStatementInstrumentation.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,7 @@ public AbstractPreparedStatementInstrumentation(
4040
@Override
4141
public String[] helperClassNames() {
4242
return new String[] {
43-
packageName + ".JDBCDecorator",
43+
"datadog.trace.core.propagation.W3CTraceParent", packageName + ".JDBCDecorator",
4444
};
4545
}
4646

dd-java-agent/instrumentation/jdbc/src/main/java/datadog/trace/instrumentation/jdbc/DBMCompatibleConnectionInstrumentation.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -78,6 +78,7 @@ public DBMCompatibleConnectionInstrumentation() {
7878
@Override
7979
public String[] helperClassNames() {
8080
return new String[] {
81+
"datadog.trace.core.propagation.W3CTraceParent",
8182
packageName + ".JDBCDecorator",
8283
packageName + ".SQLCommenter",
8384
"datadog.trace.bootstrap.instrumentation.dbm.SharedDBCommenter",

dd-java-agent/instrumentation/jdbc/src/main/java/datadog/trace/instrumentation/jdbc/DriverInstrumentation.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -49,7 +49,7 @@ public Map<String, String> contextStore() {
4949
@Override
5050
public String[] helperClassNames() {
5151
return new String[] {
52-
packageName + ".JDBCDecorator",
52+
"datadog.trace.core.propagation.W3CTraceParent", packageName + ".JDBCDecorator",
5353
};
5454
}
5555

dd-java-agent/instrumentation/jdbc/src/main/java/datadog/trace/instrumentation/jdbc/JDBCDecorator.java

Lines changed: 3 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,6 @@
88
import static datadog.trace.bootstrap.instrumentation.api.Tags.*;
99

1010
import datadog.trace.api.Config;
11-
import datadog.trace.api.DDSpanId;
1211
import datadog.trace.api.DDTraceId;
1312
import datadog.trace.api.naming.SpanNaming;
1413
import datadog.trace.api.telemetry.LogCollector;
@@ -23,6 +22,7 @@
2322
import datadog.trace.bootstrap.instrumentation.jdbc.DBInfo;
2423
import datadog.trace.bootstrap.instrumentation.jdbc.DBQueryInfo;
2524
import datadog.trace.bootstrap.instrumentation.jdbc.JDBCConnectionUrlParser;
25+
import datadog.trace.core.propagation.W3CTraceParent;
2626
import java.nio.ByteBuffer;
2727
import java.nio.ByteOrder;
2828
import java.sql.Connection;
@@ -257,16 +257,6 @@ private AgentSpan withQueryInfo(AgentSpan span, DBQueryInfo info, CharSequence c
257257
return span.setTag(Tags.COMPONENT, component);
258258
}
259259

260-
public String traceParent(AgentSpan span, int samplingPriority) {
261-
StringBuilder sb = new StringBuilder(55);
262-
sb.append("00-");
263-
sb.append(span.getTraceId().toHexString());
264-
sb.append('-');
265-
sb.append(DDSpanId.toHexStringPadded(span.getSpanId()));
266-
sb.append(samplingPriority > 0 ? "-01" : "-00");
267-
return sb.toString();
268-
}
269-
270260
public boolean isOracle(final DBInfo dbInfo) {
271261
return "oracle".equals(dbInfo.getType());
272262
}
@@ -294,7 +284,7 @@ public void setAction(AgentSpan span, Connection connection) {
294284
if (priority == null) {
295285
return;
296286
}
297-
final String traceContext = DD_INSTRUMENTATION_PREFIX + DECORATE.traceParent(span, priority);
287+
final String traceContext = DD_INSTRUMENTATION_PREFIX + W3CTraceParent.from(span);
298288

299289
connection.setClientInfo("OCSID.ACTION", traceContext);
300290

@@ -380,7 +370,7 @@ public void setApplicationName(AgentSpan span, Connection connection) {
380370
if (priority == null) {
381371
return;
382372
}
383-
final String traceParent = DECORATE.traceParent(span, priority);
373+
final String traceParent = W3CTraceParent.from(span);
384374
final String traceContext = "_DD_" + traceParent;
385375

386376
connection.setClientInfo("ApplicationName", traceContext);

dd-java-agent/instrumentation/jdbc/src/main/java/datadog/trace/instrumentation/jdbc/StatementInstrumentation.java

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@
2323
import datadog.trace.bootstrap.instrumentation.api.AgentSpan;
2424
import datadog.trace.bootstrap.instrumentation.api.AgentTracer;
2525
import datadog.trace.bootstrap.instrumentation.jdbc.DBInfo;
26+
import datadog.trace.core.propagation.W3CTraceParent;
2627
import java.sql.Connection;
2728
import java.sql.SQLException;
2829
import java.sql.Statement;
@@ -59,6 +60,7 @@ public Map<String, String> contextStore() {
5960
@Override
6061
public String[] helperClassNames() {
6162
return new String[] {
63+
"datadog.trace.core.propagation.W3CTraceParent",
6264
packageName + ".JDBCDecorator",
6365
packageName + ".SQLCommenter",
6466
"datadog.trace.bootstrap.instrumentation.dbm.SharedDBCommenter",
@@ -119,7 +121,7 @@ public static AgentScope onEnter(
119121
Integer priority = span.forceSamplingDecision();
120122
if (priority != null) {
121123
if (!isSqlServer) {
122-
traceParent = DECORATE.traceParent(span, priority);
124+
traceParent = W3CTraceParent.from(span);
123125
}
124126
// set the dbm trace injected tag on the span
125127
span.setTag(DBM_TRACE_INJECTED, true);

dd-java-agent/instrumentation/mongo/common/src/main/java/datadog/trace/instrumentation/mongo/MongoCommentInjector.java

Lines changed: 2 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -4,9 +4,9 @@
44
import static datadog.trace.bootstrap.instrumentation.api.InstrumentationTags.DBM_TRACE_INJECTED;
55

66
import datadog.trace.api.Config;
7-
import datadog.trace.api.DDSpanId;
87
import datadog.trace.bootstrap.instrumentation.api.AgentSpan;
98
import datadog.trace.bootstrap.instrumentation.dbm.SharedDBCommenter;
9+
import datadog.trace.core.propagation.W3CTraceParent;
1010
import org.bson.BsonArray;
1111
import org.bson.BsonDocument;
1212
import org.bson.BsonString;
@@ -75,7 +75,7 @@ public static String buildComment(AgentSpan dbSpan, String hostname, String dbNa
7575
String dbService = dbSpan.getServiceName();
7676
String traceParent =
7777
Config.get().getDbmPropagationMode().equals(DBM_PROPAGATION_MODE_FULL)
78-
? buildTraceParent(dbSpan)
78+
? W3CTraceParent.from(dbSpan)
7979
: null;
8080

8181
// Use shared comment builder directly
@@ -112,13 +112,4 @@ private static BsonValue mergeComment(BsonValue existingComment, String dbmComme
112112
// Incompatible type, preserve existing comment unchanged
113113
return existingComment;
114114
}
115-
116-
static String buildTraceParent(AgentSpan span) {
117-
// W3C traceparent format: version-traceId-spanId-flags
118-
return "00-" // version
119-
+ span.getTraceId().toHexString() // traceId
120-
+ '-'
121-
+ DDSpanId.toHexStringPadded(span.getSpanId()) // spanId
122-
+ (span.context().getSamplingPriority() > 0 ? "-01" : "-00");
123-
}
124115
}

dd-java-agent/instrumentation/mongo/common/src/test/groovy/MongoCommentInjectorTest.groovy

Lines changed: 0 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
11
import datadog.trace.agent.test.InstrumentationSpecification
22
import datadog.trace.api.config.TraceInstrumentationConfig
3-
import datadog.trace.api.sampling.PrioritySampling
43
import datadog.trace.instrumentation.mongo.MongoCommentInjector
54
import org.bson.BsonDocument
65
import org.bson.BsonString
@@ -18,38 +17,6 @@ abstract class BaseMongoCommentInjectorTest extends InstrumentationSpecification
1817
}
1918

2019
class MongoCommentInjectorTest extends BaseMongoCommentInjectorTest {
21-
def "buildTraceParent with sampled flag (SAMPLER_KEEP)"() {
22-
setup:
23-
def span = TEST_TRACER.buildSpan("test-op").start()
24-
span.setSamplingPriority(PrioritySampling.SAMPLER_KEEP, 0)
25-
26-
when:
27-
String traceParent = MongoCommentInjector.buildTraceParent(span)
28-
29-
then:
30-
traceParent != null
31-
traceParent ==~ /00-[0-9a-f]{32}-[0-9a-f]{16}-01/
32-
33-
cleanup:
34-
span?.finish()
35-
}
36-
37-
def "buildTraceParent with not sampled flag (SAMPLER_DROP)"() {
38-
setup:
39-
def span = TEST_TRACER.buildSpan("test-op").start()
40-
span.setSamplingPriority(PrioritySampling.SAMPLER_DROP, 0)
41-
42-
when:
43-
String traceParent = MongoCommentInjector.buildTraceParent(span)
44-
45-
then:
46-
traceParent != null
47-
traceParent ==~ /00-[0-9a-f]{32}-[0-9a-f]{16}-00/
48-
49-
cleanup:
50-
span?.finish()
51-
}
52-
5320
def "injectComment returns null when event is null"() {
5421
when:
5522
BsonDocument result = MongoCommentInjector.injectComment("test-comment", null)

dd-java-agent/instrumentation/mongo/driver-3.6/src/main/java/datadog/trace/instrumentation/mongo/DefaultServerConnection36Instrumentation.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,7 @@ public String instrumentedType() {
3232
@Override
3333
public String[] helperClassNames() {
3434
return new String[] {
35+
"datadog.trace.core.propagation.W3CTraceParent",
3536
packageName + ".BsonScrubber",
3637
packageName + ".MongoCommentInjector",
3738
packageName + ".MongoDecorator",

dd-java-agent/instrumentation/mongo/driver-3.8/src/main/java/datadog/trace/instrumentation/mongo/DefaultServerConnection38Instrumentation.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,7 @@ public String instrumentedType() {
3333
public String[] helperClassNames() {
3434
return new String[] {
3535
"datadog.trace.bootstrap.instrumentation.dbm.SharedDBCommenter",
36+
"datadog.trace.core.propagation.W3CTraceParent",
3637
packageName + ".MongoDecorator",
3738
packageName + ".MongoCommentInjector",
3839
packageName + ".BsonScrubber",

0 commit comments

Comments
 (0)