Skip to content

Commit 503d73c

Browse files
authored
fix: backport lineage fix to datadog-lambda-java (#90)
1 parent d8ef959 commit 503d73c

File tree

2 files changed

+34
-9
lines changed

2 files changed

+34
-9
lines changed

src/main/java/com/datadoghq/datadog_lambda_java/Tracing.java

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -373,7 +373,7 @@ public XRayTraceContext(){
373373
return;
374374
}
375375
String[] traceParts = traceId.split(";");
376-
if(traceParts.length != 3){
376+
if(hasInvalidXrayHeader(traceParts)){
377377
DDLogger.getLoggerImpl().error ("Malformed _X_AMZN_TRACE_ID value: "+ traceId);
378378
return;
379379
}
@@ -388,13 +388,17 @@ public XRayTraceContext(){
388388
this.traceIdHeader = traceId;
389389
}
390390

391+
private static boolean hasInvalidXrayHeader(String[] traceParts) {
392+
return traceParts.length < 3;
393+
}
394+
391395
/**
392396
* Test constructor that can take a dummy _X_AMZN_TRACE_ID value rather than reading from env vars
393397
* @param traceId
394398
*/
395399
protected XRayTraceContext(String traceId){
396400
String[] traceParts = traceId.split(";");
397-
if(traceParts.length != 3){
401+
if(hasInvalidXrayHeader(traceParts)){
398402
DDLogger.getLoggerImpl().error("Malformed _X_AMZN_TRACE_ID value: "+ traceId);
399403
return;
400404
}

src/test/java/com/datadoghq/datadog_lambda_java/TracingTest.java

Lines changed: 28 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -4,11 +4,14 @@
44
import com.google.gson.reflect.TypeToken;
55
import java.lang.reflect.Type;
66
import java.util.HashMap;
7-
import org.junit.Assert;
87
import org.junit.Test;
98

109
import java.util.Map;
1110

11+
import static org.junit.Assert.assertEquals;
12+
import static org.junit.Assert.assertNotNull;
13+
import static org.junit.Assert.assertNull;
14+
1215
public class TracingTest {
1316

1417
@Test
@@ -29,10 +32,10 @@ public void makeOutboundHttpTraceHeaders() {
2932

3033
Map<String, String> headers = t.makeOutboundHttpTraceHeaders();
3134

32-
Assert.assertEquals(3, headers.size());
33-
Assert.assertEquals("2", headers.get(cxt.ddSamplingKey));
34-
Assert.assertEquals("12344567890", headers.get(cxt.ddTraceKey));
35-
Assert.assertEquals("6023947403358210776", headers.get(cxt.ddParentKey));
35+
assertEquals(3, headers.size());
36+
assertEquals("2", headers.get(cxt.ddSamplingKey));
37+
assertEquals("12344567890", headers.get(cxt.ddTraceKey));
38+
assertEquals("6023947403358210776", headers.get(cxt.ddParentKey));
3639
}
3740

3841
@Test
@@ -53,7 +56,7 @@ public void makeOutboundHttpTraceHeaders_no_parent() {
5356

5457
Map<String, String> headers = t.makeOutboundHttpTraceHeaders();
5558

56-
Assert.assertEquals(0, headers.size());
59+
assertEquals(0, headers.size());
5760
}
5861

5962
@Test
@@ -83,6 +86,24 @@ public void makeOutboundJson() {
8386
expectedTracingInfo.put(cxt.ddParentKey, "6023947403358210776");
8487
expectedTracingInfo.put(cxt.ddSamplingKey, cxt.samplingPriority);
8588

86-
Assert.assertEquals(expectedTracingInfo, tracingInfo);
89+
assertEquals(expectedTracingInfo, tracingInfo);
90+
}
91+
92+
@Test
93+
public void shouldSupportAtLeastThreePartsIn_X_AMZN_TRACE_ID() {
94+
XRayTraceContext xRayTraceContextBefore2023March14 = new XRayTraceContext("Root=1-5e41a79d-e6a0db584029dba86a594b7e;Parent=8c34f5ad8f92d510;Sampled=1");
95+
assertEquals("1-5e41a79d-e6a0db584029dba86a594b7e", xRayTraceContextBefore2023March14.getTraceId());
96+
assertEquals("8c34f5ad8f92d510", xRayTraceContextBefore2023March14.getParentId());
97+
98+
XRayTraceContext xRayTraceContextSince2023March14 = new XRayTraceContext("Root=1-5e41a79d-e6a0db584029dba86a594b7e;Parent=8c34f5ad8f92d510;Sampled=0;Lineage=f627d631:0");
99+
assertEquals("1-5e41a79d-e6a0db584029dba86a594b7e", xRayTraceContextSince2023March14.getTraceId());
100+
assertEquals("8c34f5ad8f92d510", xRayTraceContextSince2023March14.getParentId());
87101
}
102+
103+
@Test
104+
public void shouldIgnoreLessThanThreePartsIn_X_AMZN_TRACE_ID() {
105+
XRayTraceContext xRayTraceContextLessThanThreeParts = new XRayTraceContext("Root=1-5e41a79d-e6a0db584029dba86a594b7e;Parent=8c34f5ad8f92d510");
106+
assertNull(xRayTraceContextLessThanThreeParts.getTraceId());
107+
assertNull(xRayTraceContextLessThanThreeParts.getParentId());
108+
}
88109
}

0 commit comments

Comments
 (0)