@@ -168,7 +168,7 @@ new file mode 100644
168
168
index 0000000000..72d4f9253b
169
169
--- /dev/null
170
170
+++ b/instrumentation/aws-lambda/aws-lambda-core-1.0/library/src/main/java/io/opentelemetry/instrumentation/awslambdacore/v1_0/internal/ParentContextExtractor.java
171
- @@ -0,0 +1,81 @@
171
+ @@ -0,0 +1,91 @@
172
172
+ /*
173
173
+ * Copyright The OpenTelemetry Authors
174
174
+ * SPDX-License-Identifier: Apache-2.0
@@ -194,10 +194,11 @@ index 0000000000..72d4f9253b
194
194
+ public final class ParentContextExtractor {
195
195
+
196
196
+ private static final String AWS_TRACE_HEADER_ENV_KEY = "_X_AMZN_TRACE_ID";
197
+ + private static final String AWS_TRACE_HEADER_PROP = "com.amazonaws.xray.traceHeader";
197
198
+
198
199
+ static Context extract(Map<String, String> headers, AwsLambdaFunctionInstrumenter instrumenter) {
199
200
+ Context parentContext = null;
200
- + String parentTraceHeader = System.getenv(AWS_TRACE_HEADER_ENV_KEY );
201
+ + String parentTraceHeader = getTraceHeader( );
201
202
+ if (parentTraceHeader != null) {
202
203
+ parentContext = fromXrayHeader(parentTraceHeader);
203
204
+ }
@@ -208,6 +209,15 @@ index 0000000000..72d4f9253b
208
209
+ return parentContext;
209
210
+ }
210
211
+
212
+ + private static String getTraceHeader() {
213
+ + // Lambda propagates trace header by system property instead of environment variable from java17
214
+ + String traceHeader = System.getProperty(AWS_TRACE_HEADER_PROP);
215
+ + if (traceHeader == null || traceHeader.isEmpty()) {
216
+ + return System.getenv(AWS_TRACE_HEADER_ENV_KEY);
217
+ + }
218
+ + return traceHeader;
219
+ + }
220
+ +
211
221
+ private static boolean isValidAndSampled(Context context) {
212
222
+ if (context == null) {
213
223
+ return false;
@@ -389,7 +399,7 @@ new file mode 100644
389
399
index 0000000000..1fa0b6e536
390
400
--- /dev/null
391
401
+++ b/instrumentation/aws-lambda/aws-lambda-core-1.0/library/src/test/java/io/opentelemetry/instrumentation/awslambdacore/v1_0/internal/ParentContextExtractorTest.java
392
- @@ -0,0 +1,113 @@
402
+ @@ -0,0 +1,135 @@
393
403
+ /*
394
404
+ * Copyright The OpenTelemetry Authors
395
405
+ * SPDX-License-Identifier: Apache-2.0
@@ -412,6 +422,7 @@ index 0000000000..1fa0b6e536
412
422
+ import uk.org.webcompere.systemstubs.environment.EnvironmentVariables;
413
423
+ import uk.org.webcompere.systemstubs.jupiter.SystemStub;
414
424
+ import uk.org.webcompere.systemstubs.jupiter.SystemStubsExtension;
425
+ + import uk.org.webcompere.systemstubs.properties.SystemProperties;
415
426
+
416
427
+ /**
417
428
+ * This class is internal and is hence not for public use. Its APIs are unstable and can change at
@@ -502,6 +513,27 @@ index 0000000000..1fa0b6e536
502
513
+ assertThat(spanContext.getSpanId()).isEqualTo("0000000000000456");
503
514
+ assertThat(spanContext.getTraceId()).isEqualTo("4fd0b6131f19f39af59518d127b0cafe");
504
515
+ }
516
+ +
517
+ + @Test
518
+ + void shouldPreferSystemPropertyOverEnvVariable() {
519
+ + // given
520
+ + systemProperties.set(
521
+ + "com.amazonaws.xray.traceHeader",
522
+ + "Root=1-8a3c60f7-d188f8fa79d48a391a778fa7;Parent=0000000000000789;Sampled=0");
523
+ + environmentVariables.set(
524
+ + "_X_AMZN_TRACE_ID",
525
+ + "Root=1-8a3c60f7-d188f8fa79d48a391a778fa6;Parent=0000000000000456;Sampled=1");
526
+ +
527
+ + // when
528
+ + Context context = ParentContextExtractor.extract(headers, INSTRUMENTER);
529
+ + // then
530
+ + Span span = Span.fromContext(context);
531
+ + SpanContext spanContext = span.getSpanContext();
532
+ + assertThat(spanContext.isValid()).isTrue();
533
+ + assertThat(spanContext.isValid()).isTrue();
534
+ + assertThat(spanContext.getSpanId()).isEqualTo("0000000000000789");
535
+ + assertThat(spanContext.getTraceId()).isEqualTo("d188f8fa79d48a391a778fa7");
536
+ + }
505
537
+ }
506
538
diff --git a/instrumentation/aws-lambda/aws-lambda-core-1.0/testing/src/main/java/io/opentelemetry/instrumentation/awslambdacore/v1_0/AbstractAwsLambdaTest.java b/instrumentation/aws-lambda/aws-lambda-core-1.0/testing/src/main/java/io/opentelemetry/instrumentation/awslambdacore/v1_0/AbstractAwsLambdaTest.java
507
539
index e088efa906..544da9b1bb 100644
0 commit comments