Skip to content

Commit b1f569e

Browse files
committed
lambda layer otel patch for v1.33.6
1 parent 448d680 commit b1f569e

File tree

1 file changed

+19
-259
lines changed

1 file changed

+19
-259
lines changed

lambda-layer/patches/opentelemetry-java-instrumentation.patch

Lines changed: 19 additions & 259 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@ index a96fa5e3f9..df5bcec438 100644
1616
+ && ParentContextExtractor.AWS_TRACE_HEADER_PROPAGATOR_KEY.equalsIgnoreCase(
1717
+ fields.iterator().next());
1818
}
19-
19+
2020
public static ApiGatewayProxyRequest forStream(InputStream source) {
2121
diff --git a/instrumentation/aws-lambda/aws-lambda-core-1.0/library/src/main/java/io/opentelemetry/instrumentation/awslambdacore/v1_0/internal/AwsLambdaFunctionInstrumenter.java b/instrumentation/aws-lambda/aws-lambda-core-1.0/library/src/main/java/io/opentelemetry/instrumentation/awslambdacore/v1_0/internal/AwsLambdaFunctionInstrumenter.java
2222
index 4136e7bed9..dbbcb1c99d 100644
@@ -29,17 +29,17 @@ index 4136e7bed9..dbbcb1c99d 100644
2929
-import java.util.Locale;
3030
import java.util.Map;
3131
import javax.annotation.Nullable;
32-
32+
3333
@@ -47,25 +46,15 @@ public class AwsLambdaFunctionInstrumenter {
3434
}
35-
35+
3636
public Context extract(AwsLambdaRequest input) {
3737
+ return ParentContextExtractor.extract(input.getHeaders(), this);
3838
+ }
3939
+
4040
+ public Context extract(Map<String, String> headers, TextMapGetter<Map<String, String>> getter) {
4141
ContextPropagationDebug.debugContextLeakIfEnabled();
42-
42+
4343
return openTelemetry
4444
.getPropagators()
4545
.getTextMapPropagator()
@@ -74,10 +74,9 @@ index aeb828b8e7..277c358ca8 100644
7474
.buildInstrumenter(SpanKindExtractor.alwaysServer()));
7575
}
7676
diff --git a/instrumentation/aws-lambda/aws-lambda-core-1.0/library/src/main/java/io/opentelemetry/instrumentation/awslambdacore/v1_0/internal/AwsXrayEnvSpanLinksExtractor.java b/instrumentation/aws-lambda/aws-lambda-core-1.0/library/src/main/java/io/opentelemetry/instrumentation/awslambdacore/v1_0/internal/AwsXrayEnvSpanLinksExtractor.java
77-
deleted file mode 100644
78-
index c88cf20c91..0000000000
77+
index c88cf20c91..e69de29bb2 100644
7978
--- a/instrumentation/aws-lambda/aws-lambda-core-1.0/library/src/main/java/io/opentelemetry/instrumentation/awslambdacore/v1_0/internal/AwsXrayEnvSpanLinksExtractor.java
80-
+++ /dev/null
79+
+++ b/instrumentation/aws-lambda/aws-lambda-core-1.0/library/src/main/java/io/opentelemetry/instrumentation/awslambdacore/v1_0/internal/AwsXrayEnvSpanLinksExtractor.java
8180
@@ -1,84 +0,0 @@
8281
-/*
8382
- * Copyright The OpenTelemetry Authors
@@ -163,108 +162,10 @@ index c88cf20c91..0000000000
163162
- }
164163
- }
165164
-}
166-
diff --git a/instrumentation/aws-lambda/aws-lambda-core-1.0/library/src/main/java/io/opentelemetry/instrumentation/awslambdacore/v1_0/internal/ParentContextExtractor.java b/instrumentation/aws-lambda/aws-lambda-core-1.0/library/src/main/java/io/opentelemetry/instrumentation/awslambdacore/v1_0/internal/ParentContextExtractor.java
167-
new file mode 100644
168-
index 0000000000..72d4f9253b
169-
--- /dev/null
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,91 @@
172-
+/*
173-
+ * Copyright The OpenTelemetry Authors
174-
+ * SPDX-License-Identifier: Apache-2.0
175-
+ */
176-
+
177-
+package io.opentelemetry.instrumentation.awslambdacore.v1_0.internal;
178-
+
179-
+import static io.opentelemetry.instrumentation.awslambdacore.v1_0.internal.MapUtils.lowercaseMap;
180-
+
181-
+import io.opentelemetry.api.trace.Span;
182-
+import io.opentelemetry.api.trace.SpanContext;
183-
+import io.opentelemetry.context.Context;
184-
+import io.opentelemetry.context.propagation.TextMapGetter;
185-
+import io.opentelemetry.contrib.awsxray.propagator.AwsXrayPropagator;
186-
+import java.util.Collections;
187-
+import java.util.Locale;
188-
+import java.util.Map;
189-
+
190-
+/**
191-
+ * This class is internal and is hence not for public use. Its APIs are unstable and can change at
192-
+ * any time.
193-
+ */
194-
+public final class ParentContextExtractor {
195-
+
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";
198-
+
199-
+ static Context extract(Map<String, String> headers, AwsLambdaFunctionInstrumenter instrumenter) {
200-
+ Context parentContext = null;
201-
+ String parentTraceHeader = getTraceHeader();
202-
+ if (parentTraceHeader != null) {
203-
+ parentContext = fromXrayHeader(parentTraceHeader);
204-
+ }
205-
+ if (!isValidAndSampled(parentContext)) {
206-
+ // try http
207-
+ parentContext = fromHttpHeaders(headers, instrumenter);
208-
+ }
209-
+ return parentContext;
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-
+
221-
+ private static boolean isValidAndSampled(Context context) {
222-
+ if (context == null) {
223-
+ return false;
224-
+ }
225-
+ Span parentSpan = Span.fromContext(context);
226-
+ SpanContext parentSpanContext = parentSpan.getSpanContext();
227-
+ return (parentSpanContext.isValid() && parentSpanContext.isSampled());
228-
+ }
229-
+
230-
+ private static Context fromHttpHeaders(
231-
+ Map<String, String> headers, AwsLambdaFunctionInstrumenter instrumenter) {
232-
+ return instrumenter.extract(lowercaseMap(headers), MapGetter.INSTANCE);
233-
+ }
234-
+
235-
+ // lower-case map getter used for extraction
236-
+ static final String AWS_TRACE_HEADER_PROPAGATOR_KEY = "x-amzn-trace-id";
237-
+
238-
+ public static Context fromXrayHeader(String parentHeader) {
239-
+ return AwsXrayPropagator.getInstance()
240-
+ .extract(
241-
+ // see BaseTracer#extract() on why we're using root() here
242-
+ Context.root(),
243-
+ Collections.singletonMap(AWS_TRACE_HEADER_PROPAGATOR_KEY, parentHeader),
244-
+ MapGetter.INSTANCE);
245-
+ }
246-
+
247-
+ private enum MapGetter implements TextMapGetter<Map<String, String>> {
248-
+ INSTANCE;
249-
+
250-
+ @Override
251-
+ public Iterable<String> keys(Map<String, String> map) {
252-
+ return map.keySet();
253-
+ }
254-
+
255-
+ @Override
256-
+ public String get(Map<String, String> map, String s) {
257-
+ return map.get(s.toLowerCase(Locale.ROOT));
258-
+ }
259-
+ }
260-
+
261-
+ private ParentContextExtractor() {}
262-
+}
263165
diff --git a/instrumentation/aws-lambda/aws-lambda-core-1.0/library/src/test/java/io/opentelemetry/instrumentation/awslambdacore/v1_0/internal/AwsXrayEnvSpanLinksExtractorTest.java b/instrumentation/aws-lambda/aws-lambda-core-1.0/library/src/test/java/io/opentelemetry/instrumentation/awslambdacore/v1_0/internal/AwsXrayEnvSpanLinksExtractorTest.java
264-
deleted file mode 100644
265-
index 509bfbd05e..0000000000
166+
index 509bfbd05e..e69de29bb2 100644
266167
--- a/instrumentation/aws-lambda/aws-lambda-core-1.0/library/src/test/java/io/opentelemetry/instrumentation/awslambdacore/v1_0/internal/AwsXrayEnvSpanLinksExtractorTest.java
267-
+++ /dev/null
168+
+++ b/instrumentation/aws-lambda/aws-lambda-core-1.0/library/src/test/java/io/opentelemetry/instrumentation/awslambdacore/v1_0/internal/AwsXrayEnvSpanLinksExtractorTest.java
268169
@@ -1,128 +0,0 @@
269170
-/*
270171
- * Copyright The OpenTelemetry Authors
@@ -394,153 +295,12 @@ index 509bfbd05e..0000000000
394295
- assertThat(spanContext.getTraceId()).isEqualTo("8a3c60f7d188f8fa79d48a391a778fa6");
395296
- }
396297
-}
397-
diff --git a/instrumentation/aws-lambda/aws-lambda-core-1.0/library/src/test/java/io/opentelemetry/instrumentation/awslambdacore/v1_0/internal/ParentContextExtractorTest.java b/instrumentation/aws-lambda/aws-lambda-core-1.0/library/src/test/java/io/opentelemetry/instrumentation/awslambdacore/v1_0/internal/ParentContextExtractorTest.java
398-
new file mode 100644
399-
index 0000000000..1fa0b6e536
400-
--- /dev/null
401-
+++ b/instrumentation/aws-lambda/aws-lambda-core-1.0/library/src/test/java/io/opentelemetry/instrumentation/awslambdacore/v1_0/internal/ParentContextExtractorTest.java
402-
@@ -0,0 +1,135 @@
403-
+/*
404-
+ * Copyright The OpenTelemetry Authors
405-
+ * SPDX-License-Identifier: Apache-2.0
406-
+ */
407-
+
408-
+package io.opentelemetry.instrumentation.awslambdacore.v1_0.internal;
409-
+
410-
+import static org.assertj.core.api.Assertions.assertThat;
411-
+
412-
+import com.google.common.collect.ImmutableMap;
413-
+import io.opentelemetry.api.OpenTelemetry;
414-
+import io.opentelemetry.api.trace.Span;
415-
+import io.opentelemetry.api.trace.SpanContext;
416-
+import io.opentelemetry.context.Context;
417-
+import io.opentelemetry.context.propagation.ContextPropagators;
418-
+import io.opentelemetry.extension.trace.propagation.B3Propagator;
419-
+import java.util.Map;
420-
+import org.junit.jupiter.api.Test;
421-
+import org.junit.jupiter.api.extension.ExtendWith;
422-
+import uk.org.webcompere.systemstubs.environment.EnvironmentVariables;
423-
+import uk.org.webcompere.systemstubs.jupiter.SystemStub;
424-
+import uk.org.webcompere.systemstubs.jupiter.SystemStubsExtension;
425-
+import uk.org.webcompere.systemstubs.properties.SystemProperties;
426-
+
427-
+/**
428-
+ * This class is internal and is hence not for public use. Its APIs are unstable and can change at
429-
+ * any time.
430-
+ */
431-
+@ExtendWith(SystemStubsExtension.class)
432-
+class ParentContextExtractorTest {
433-
+
434-
+ @SystemStub final EnvironmentVariables environmentVariables = new EnvironmentVariables();
435-
+
436-
+ private static final OpenTelemetry OTEL =
437-
+ OpenTelemetry.propagating(ContextPropagators.create(B3Propagator.injectingSingleHeader()));
438-
+
439-
+ private static final AwsLambdaFunctionInstrumenter INSTRUMENTER =
440-
+ AwsLambdaFunctionInstrumenterFactory.createInstrumenter(OTEL);
441-
+
442-
+ @Test
443-
+ void shouldUseHttpIfAwsParentNotSampled() {
444-
+ // given
445-
+ Map<String, String> headers =
446-
+ ImmutableMap.of(
447-
+ "X-b3-traceId",
448-
+ "4fd0b6131f19f39af59518d127b0cafe",
449-
+ "x-b3-spanid",
450-
+ "0000000000000123",
451-
+ "X-B3-Sampled",
452-
+ "true");
453-
+ environmentVariables.set(
454-
+ "_X_AMZN_TRACE_ID",
455-
+ "Root=1-8a3c60f7-d188f8fa79d48a391a778fa6;Parent=0000000000000456;Sampled=0");
456-
+
457-
+ // when
458-
+ Context context = ParentContextExtractor.extract(headers, INSTRUMENTER);
459-
+ // then
460-
+ Span span = Span.fromContext(context);
461-
+ SpanContext spanContext = span.getSpanContext();
462-
+ assertThat(spanContext.isValid()).isTrue();
463-
+ assertThat(spanContext.isValid()).isTrue();
464-
+ assertThat(spanContext.getSpanId()).isEqualTo("0000000000000123");
465-
+ assertThat(spanContext.getTraceId()).isEqualTo("4fd0b6131f19f39af59518d127b0cafe");
466-
+ }
467-
+
468-
+ @Test
469-
+ void shouldPreferAwsParentHeaderIfValidAndSampled() {
470-
+ // given
471-
+ Map<String, String> headers =
472-
+ ImmutableMap.of(
473-
+ "X-b3-traceId",
474-
+ "4fd0b6131f19f39af59518d127b0cafe",
475-
+ "x-b3-spanid",
476-
+ "0000000000000456",
477-
+ "X-B3-Sampled",
478-
+ "true");
479-
+ environmentVariables.set(
480-
+ "_X_AMZN_TRACE_ID",
481-
+ "Root=1-8a3c60f7-d188f8fa79d48a391a778fa6;Parent=0000000000000456;Sampled=1");
482-
+
483-
+ // when
484-
+ Context context = ParentContextExtractor.extract(headers, INSTRUMENTER);
485-
+ // then
486-
+ Span span = Span.fromContext(context);
487-
+ SpanContext spanContext = span.getSpanContext();
488-
+ assertThat(spanContext.isValid()).isTrue();
489-
+ assertThat(spanContext.isValid()).isTrue();
490-
+ assertThat(spanContext.getSpanId()).isEqualTo("0000000000000456");
491-
+ assertThat(spanContext.getTraceId()).isEqualTo("8a3c60f7d188f8fa79d48a391a778fa6");
492-
+ }
493-
+
494-
+ @Test
495-
+ void shouldExtractCaseInsensitiveHeaders() {
496-
+ // given
497-
+ Map<String, String> headers =
498-
+ ImmutableMap.of(
499-
+ "X-b3-traceId",
500-
+ "4fd0b6131f19f39af59518d127b0cafe",
501-
+ "x-b3-spanid",
502-
+ "0000000000000456",
503-
+ "X-B3-Sampled",
504-
+ "true");
505-
+
506-
+ // when
507-
+ Context context = ParentContextExtractor.extract(headers, INSTRUMENTER);
508-
+ // then
509-
+ Span span = Span.fromContext(context);
510-
+ SpanContext spanContext = span.getSpanContext();
511-
+ assertThat(spanContext.isValid()).isTrue();
512-
+ assertThat(spanContext.isValid()).isTrue();
513-
+ assertThat(spanContext.getSpanId()).isEqualTo("0000000000000456");
514-
+ assertThat(spanContext.getTraceId()).isEqualTo("4fd0b6131f19f39af59518d127b0cafe");
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-
+ }
537-
+}
538298
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
539-
index e088efa906..544da9b1bb 100644
299+
index 94a85244e2..936917d0a8 100644
540300
--- a/instrumentation/aws-lambda/aws-lambda-core-1.0/testing/src/main/java/io/opentelemetry/instrumentation/awslambdacore/v1_0/AbstractAwsLambdaTest.java
541301
+++ b/instrumentation/aws-lambda/aws-lambda-core-1.0/testing/src/main/java/io/opentelemetry/instrumentation/awslambdacore/v1_0/AbstractAwsLambdaTest.java
542302
@@ -12,8 +12,6 @@ import static org.mockito.Mockito.when;
543-
303+
544304
import com.amazonaws.services.lambda.runtime.Context;
545305
import com.amazonaws.services.lambda.runtime.RequestHandler;
546306
-import io.opentelemetry.api.common.AttributeKey;
@@ -589,10 +349,10 @@ index 305e3e62a0..844ee31899 100644
589349
-import java.util.Locale;
590350
-import java.util.Map;
591351
+import io.opentelemetry.instrumentation.awslambdacore.v1_0.internal.ParentContextExtractor;
592-
352+
593353
class SqsMessageSpanLinksExtractor implements SpanLinksExtractor<SQSMessage> {
594354
private static final String AWS_TRACE_HEADER_SQS_ATTRIBUTE_KEY = "AWSTraceHeader";
595-
355+
596356
- // lower-case map getter used for extraction
597357
- static final String AWS_TRACE_HEADER_PROPAGATOR_KEY = "x-amzn-trace-id";
598358
-
@@ -632,14 +392,14 @@ index 305e3e62a0..844ee31899 100644
632392
- }
633393
}
634394
diff --git a/version.gradle.kts b/version.gradle.kts
635-
index cc1414c0bf..db8a59b046 100644
395+
index 5217d396e2..25efa91252 100644
636396
--- a/version.gradle.kts
637397
+++ b/version.gradle.kts
638398
@@ -1,5 +1,5 @@
639-
-val stableVersion = "1.32.1"
640-
-val alphaVersion = "1.32.1-alpha"
641-
+val stableVersion = "1.32.1-adot-lambda1"
642-
+val alphaVersion = "1.32.1-adot-lambda1-alpha"
643-
399+
-val stableVersion = "1.33.6"
400+
-val alphaVersion = "1.33.6-alpha"
401+
+val stableVersion = "1.33.6-adot-lambda1"
402+
+val alphaVersion = "1.33.6-adot-lambda1-alpha"
403+
644404
allprojects {
645-
if (findProperty("otel.stable") != "true") {
405+
if (findProperty("otel.stable") != "true") {

0 commit comments

Comments
 (0)