Skip to content

Commit 992d252

Browse files
authored
patch trace header in system property from Lambda java17 Runtime (#782)
* patch trace header in system property from Lambda java17 Runtime * fix CodeQL version incompatible issue * fix CodeQL version incompatible issue
1 parent f5323d7 commit 992d252

File tree

1 file changed

+35
-3
lines changed

1 file changed

+35
-3
lines changed

patches/opentelemetry-java-instrumentation.patch

Lines changed: 35 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -168,7 +168,7 @@ new file mode 100644
168168
index 0000000000..72d4f9253b
169169
--- /dev/null
170170
+++ 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 @@
172172
+/*
173173
+ * Copyright The OpenTelemetry Authors
174174
+ * SPDX-License-Identifier: Apache-2.0
@@ -194,10 +194,11 @@ index 0000000000..72d4f9253b
194194
+public final class ParentContextExtractor {
195195
+
196196
+ 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";
197198
+
198199
+ static Context extract(Map<String, String> headers, AwsLambdaFunctionInstrumenter instrumenter) {
199200
+ Context parentContext = null;
200-
+ String parentTraceHeader = System.getenv(AWS_TRACE_HEADER_ENV_KEY);
201+
+ String parentTraceHeader = getTraceHeader();
201202
+ if (parentTraceHeader != null) {
202203
+ parentContext = fromXrayHeader(parentTraceHeader);
203204
+ }
@@ -208,6 +209,15 @@ index 0000000000..72d4f9253b
208209
+ return parentContext;
209210
+ }
210211
+
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+
+
211221
+ private static boolean isValidAndSampled(Context context) {
212222
+ if (context == null) {
213223
+ return false;
@@ -389,7 +399,7 @@ new file mode 100644
389399
index 0000000000..1fa0b6e536
390400
--- /dev/null
391401
+++ 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 @@
393403
+/*
394404
+ * Copyright The OpenTelemetry Authors
395405
+ * SPDX-License-Identifier: Apache-2.0
@@ -412,6 +422,7 @@ index 0000000000..1fa0b6e536
412422
+import uk.org.webcompere.systemstubs.environment.EnvironmentVariables;
413423
+import uk.org.webcompere.systemstubs.jupiter.SystemStub;
414424
+import uk.org.webcompere.systemstubs.jupiter.SystemStubsExtension;
425+
+import uk.org.webcompere.systemstubs.properties.SystemProperties;
415426
+
416427
+/**
417428
+ * 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
502513
+ assertThat(spanContext.getSpanId()).isEqualTo("0000000000000456");
503514
+ assertThat(spanContext.getTraceId()).isEqualTo("4fd0b6131f19f39af59518d127b0cafe");
504515
+ }
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+
+ }
505537
+}
506538
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
507539
index e088efa906..544da9b1bb 100644

0 commit comments

Comments
 (0)