Skip to content

Commit 7028eaf

Browse files
authored
Merge pull request #7259 from DataDog/jrs/use-128bits-span-trace-ids
Switch to 128-bit trace ID tracking
2 parents 2deb7ff + fdaefc3 commit 7028eaf

5 files changed

Lines changed: 25 additions & 19 deletions

File tree

dd-java-agent/cws-tls/src/main/java/datadog/cws/tls/ErpcTls.java

Lines changed: 10 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@
1010
import com.sun.jna.Pointer;
1111
import datadog.cws.erpc.Erpc;
1212
import datadog.cws.erpc.Request;
13+
import datadog.trace.api.DD128bTraceId;
1314
import datadog.trace.api.DDTraceId;
1415

1516
/**
@@ -21,7 +22,9 @@
2122
public class ErpcTls implements Tls {
2223
public static final byte REGISTER_SPAN_TLS_OP = 6;
2324
public static final long TLS_FORMAT = 0;
24-
static final long ENTRY_SIZE = Native.LONG_SIZE * 2;
25+
static final int SPAN_ID_SIZE = 8; // 64 bits
26+
static final int TRACE_ID_SIZE = 16; // 128 bits
27+
static final long ENTRY_SIZE = SPAN_ID_SIZE + TRACE_ID_SIZE;
2528

2629
// Thread local storage
2730
private Pointer tls;
@@ -134,15 +137,16 @@ private long getSpanIdOffset(int threadId) {
134137
}
135138

136139
private long getTraceIdOffset(int threadId) {
137-
return getSpanIdOffset(threadId) + Native.LONG_SIZE;
140+
return getSpanIdOffset(threadId) + SPAN_ID_SIZE;
138141
}
139142

140143
public void registerSpan(int threadId, DDTraceId traceId, long spanId) {
141144
long spanIdOffset = getSpanIdOffset(threadId);
142145
long traceIdOffset = getTraceIdOffset(threadId);
143146

144147
tls.setLong(spanIdOffset, spanId);
145-
tls.setLong(traceIdOffset, traceId.toLong());
148+
tls.setLong(traceIdOffset, traceId.toLong()); // low bits
149+
tls.setLong(traceIdOffset + 8, traceId.toHighOrderLong()); // high bits
146150
}
147151

148152
public void registerSpan(DDTraceId traceId, long spanId) {
@@ -160,7 +164,9 @@ public long getSpanId() {
160164

161165
public DDTraceId getTraceId(int threadId) {
162166
long offset = getTraceIdOffset(threadId);
163-
return DDTraceId.from(tls.getLong(offset));
167+
long lowBits = tls.getLong(offset);
168+
long highBits = tls.getLong(offset + 8);
169+
return DD128bTraceId.from(highBits, lowBits);
164170
}
165171

166172
public DDTraceId getTraceId() {

dd-java-agent/cws-tls/src/main/java/datadog/cws/tls/NoTls.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
package datadog.cws.tls;
22

3+
import datadog.trace.api.DD128bTraceId;
34
import datadog.trace.api.DDSpanId;
45
import datadog.trace.api.DDTraceId;
56

@@ -12,6 +13,6 @@ public long getSpanId() {
1213
}
1314

1415
public DDTraceId getTraceId() {
15-
return DDTraceId.ZERO;
16+
return DD128bTraceId.ZERO;
1617
}
1718
}

dd-java-agent/cws-tls/src/main/java/datadog/cws/tls/TlsScopeListener.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
package datadog.cws.tls;
22

3+
import datadog.trace.api.DD128bTraceId;
34
import datadog.trace.api.DDSpanId;
45
import datadog.trace.api.DDTraceId;
56
import datadog.trace.api.scopemanager.ExtendedScopeListener;
@@ -24,8 +25,7 @@ void push(DDTraceId traceId, long spanId) {
2425
Deque<Span> stack = spanStack.get();
2526

2627
Span top = stack.peek();
27-
if (top == null || top.getTraceId().toLong() != traceId.toLong() || top.getSpanId() != spanId) {
28-
28+
if (top == null || !top.getTraceId().equals(traceId) || top.getSpanId() != spanId) {
2929
Span span = new Span(traceId, spanId);
3030
stack.push(span);
3131
}
@@ -44,7 +44,7 @@ void poll() {
4444
return;
4545
}
4646
}
47-
tls.registerSpan(DDTraceId.ZERO, DDSpanId.ZERO);
47+
tls.registerSpan(DD128bTraceId.ZERO, DDSpanId.ZERO);
4848
}
4949

5050
@Override

dd-java-agent/cws-tls/src/test/groovy/datadog/cws/tls/ErpcTlsTest.groovy

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ package datadog.cws.tls
22

33
import com.sun.jna.Native
44

5-
import datadog.trace.api.DDTraceId
5+
import datadog.trace.api.DD128bTraceId
66
import datadog.trace.test.util.DDSpecification
77

88
class ErpcTlsTest extends DDSpecification {
@@ -11,14 +11,14 @@ class ErpcTlsTest extends DDSpecification {
1111
DummyErpcTls tls = new DummyErpcTls(1000)
1212

1313
when:
14-
DDTraceId traceId = DDTraceId.from(789L)
14+
DD128bTraceId traceId = DD128bTraceId.from(123L, 789L)
1515
long spanId = 456L
1616
tls.registerSpan(123, traceId, spanId)
1717

1818
then:
1919
tls.getTraceId(123) == traceId
2020
tls.getSpanId(123) == spanId
21-
tls.getTraceId(222) == DDTraceId.from(0L)
21+
tls.getTraceId(222) == DD128bTraceId.from(0L, 0L)
2222
tls.getSpanId(111) == 0L
2323
}
2424

Lines changed: 7 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
package datadog.cws.tls
22

3-
4-
import datadog.trace.api.DDTraceId
3+
import datadog.trace.api.DD128bTraceId
54
import datadog.trace.bootstrap.instrumentation.api.AgentSpan
65
import datadog.trace.test.util.DDSpecification
76

@@ -12,24 +11,24 @@ class TlsTest extends DDSpecification {
1211
TlsScopeListener listener = new TlsScopeListener(tls)
1312

1413
AgentSpan parent = Stub(AgentSpan)
15-
parent.getTraceId() >> DDTraceId.from(11L)
14+
parent.getTraceId() >> DD128bTraceId.from(10L, 11L)
1615
parent.getSpanId() >> 12L
1716

1817
AgentSpan span = Stub(AgentSpan)
19-
span.getTraceId() >> DDTraceId.from(21L)
18+
span.getTraceId() >> DD128bTraceId.from(20, 21L)
2019
span.getSpanId() >> 22L
2120

2221
when:
23-
listener.afterScopeActivated(DDTraceId.from(11L), 12L)
24-
listener.afterScopeActivated(DDTraceId.from(21L), 22L)
22+
listener.afterScopeActivated(DD128bTraceId.from(10L, 11L), 12L)
23+
listener.afterScopeActivated(DD128bTraceId.from(20L, 21L), 22L)
2524
then:
26-
tls.getTraceId() == DDTraceId.from(21L)
25+
tls.getTraceId() == DD128bTraceId.from(20L, 21L)
2726
tls.getSpanId() == 22L
2827

2928
when:
3029
listener.afterScopeClosed()
3130
then:
32-
tls.getTraceId() == DDTraceId.from(11L)
31+
tls.getTraceId() == DD128bTraceId.from(10L, 11L)
3332
tls.getSpanId() == 12L
3433
}
3534
}

0 commit comments

Comments
 (0)