Skip to content

Commit 2a0ac5a

Browse files
committed
add otel patch to fix duplicate root lambda spans
1 parent a96e6f3 commit 2a0ac5a

File tree

1 file changed

+87
-1
lines changed

1 file changed

+87
-1
lines changed

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

Lines changed: 87 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -642,4 +642,90 @@ index cc1414c0bf..db8a59b046 100644
642642
+val alphaVersion = "1.33.6-adot-lambda1-alpha"
643643

644644
allprojects {
645-
if (findProperty("otel.stable") != "true") {
645+
if (findProperty("otel.stable") != "true") {
646+
diff --git a/instrumentation/aws-lambda/aws-lambda-core-1.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/awslambdacore/v1_0/AwsLambdaRequestHandlerInstrumentation.java b/instrumentation/aws-lambda/aws-lambda-core-1.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/awslambdacore/v1_0/AwsLambdaRequestHandlerInstrumentation.java
647+
index 2332f24a8f..0743cdea75 100644
648+
--- a/instrumentation/aws-lambda/aws-lambda-core-1.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/awslambdacore/v1_0/AwsLambdaRequestHandlerInstrumentation.java
649+
+++ b/instrumentation/aws-lambda/aws-lambda-core-1.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/awslambdacore/v1_0/AwsLambdaRequestHandlerInstrumentation.java
650+
@@ -10,7 +10,9 @@ import static io.opentelemetry.javaagent.extension.matcher.AgentElementMatchers.
651+
import static io.opentelemetry.javaagent.instrumentation.awslambdacore.v1_0.AwsLambdaInstrumentationHelper.functionInstrumenter;
652+
import static net.bytebuddy.matcher.ElementMatchers.isMethod;
653+
import static net.bytebuddy.matcher.ElementMatchers.isPublic;
654+
+import static net.bytebuddy.matcher.ElementMatchers.nameStartsWith;
655+
import static net.bytebuddy.matcher.ElementMatchers.named;
656+
+import static net.bytebuddy.matcher.ElementMatchers.not;
657+
import static net.bytebuddy.matcher.ElementMatchers.takesArgument;
658+
659+
import com.amazonaws.services.lambda.runtime.Context;
660+
@@ -35,7 +37,8 @@ public class AwsLambdaRequestHandlerInstrumentation implements TypeInstrumentati
661+
662+
@Override
663+
public ElementMatcher<TypeDescription> typeMatcher() {
664+
- return implementsInterface(named("com.amazonaws.services.lambda.runtime.RequestHandler"));
665+
+ return implementsInterface(named("com.amazonaws.services.lambda.runtime.RequestHandler"))
666+
+ .and(not(nameStartsWith("com.amazonaws.services.lambda.runtime.api.client")));
667+
}
668+
669+
@Override
670+
diff --git a/instrumentation/aws-lambda/aws-lambda-core-1.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/awslambdacore/v1_0/AwsLambdaTest.java b/instrumentation/aws-lambda/aws-lambda-core-1.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/awslambdacore/v1_0/AwsLambdaTest.java
671+
index af939fcb6d..8b8398950a 100644
672+
--- a/instrumentation/aws-lambda/aws-lambda-core-1.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/awslambdacore/v1_0/AwsLambdaTest.java
673+
+++ b/instrumentation/aws-lambda/aws-lambda-core-1.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/awslambdacore/v1_0/AwsLambdaTest.java
674+
@@ -5,14 +5,19 @@
675+
676+
package io.opentelemetry.javaagent.instrumentation.awslambdacore.v1_0;
677+
678+
+import static io.opentelemetry.sdk.testing.assertj.OpenTelemetryAssertions.equalTo;
679+
import static org.assertj.core.api.Assertions.assertThat;
680+
681+
import com.amazonaws.services.lambda.runtime.Context;
682+
import com.amazonaws.services.lambda.runtime.RequestHandler;
683+
+import com.amazonaws.services.lambda.runtime.api.client.AwsLambdaInternalRequestHandler;
684+
+import io.opentelemetry.api.trace.SpanKind;
685+
import io.opentelemetry.instrumentation.awslambdacore.v1_0.AbstractAwsLambdaTest;
686+
import io.opentelemetry.instrumentation.testing.junit.AgentInstrumentationExtension;
687+
import io.opentelemetry.instrumentation.testing.junit.InstrumentationExtension;
688+
+import io.opentelemetry.semconv.SemanticAttributes;
689+
import org.junit.jupiter.api.AfterEach;
690+
+import org.junit.jupiter.api.Test;
691+
import org.junit.jupiter.api.extension.RegisterExtension;
692+
693+
public class AwsLambdaTest extends AbstractAwsLambdaTest {
694+
@@ -35,6 +40,22 @@ public class AwsLambdaTest extends AbstractAwsLambdaTest {
695+
assertThat(testing.forceFlushCalled()).isTrue();
696+
}
697+
698+
+ @Test
699+
+ void awsLambdaInternalHandlerIgnoredAndUserHandlerTraced() {
700+
+ RequestHandler<String, String> handler = new AwsLambdaInternalRequestHandler(handler());
701+
+ String result = handler.handleRequest("hello", context());
702+
+ assertThat(result).isEqualTo("world");
703+
+ testing()
704+
+ .waitAndAssertTraces(
705+
+ trace ->
706+
+ trace.hasSpansSatisfyingExactly(
707+
+ span ->
708+
+ span.hasName("my_function")
709+
+ .hasKind(SpanKind.SERVER)
710+
+ .hasAttributesSatisfyingExactly(
711+
+ equalTo(SemanticAttributes.FAAS_INVOCATION_ID, "1-22-333"))));
712+
+ }
713+
+
714+
private static final class TestRequestHandler implements RequestHandler<String, String> {
715+
716+
@Override
717+
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
718+
index 94a85244e2..25a32896aa 100644
719+
--- a/instrumentation/aws-lambda/aws-lambda-core-1.0/testing/src/main/java/io/opentelemetry/instrumentation/awslambdacore/v1_0/AbstractAwsLambdaTest.java
720+
+++ b/instrumentation/aws-lambda/aws-lambda-core-1.0/testing/src/main/java/io/opentelemetry/instrumentation/awslambdacore/v1_0/AbstractAwsLambdaTest.java
721+
@@ -53,6 +53,10 @@ public abstract class AbstractAwsLambdaTest {
722+
assertThat(testing().forceFlushCalled()).isTrue();
723+
}
724+
725+
+ protected Context context() {
726+
+ return context;
727+
+ }
728+
+
729+
@Test
730+
void handlerTraced() {
731+
String result = handler().handleRequest("hello", context);

0 commit comments

Comments
 (0)