opentelemetry-lambda icon indicating copy to clipboard operation
opentelemetry-lambda copied to clipboard

Java lambda layer relies on joda, but we are not including it as dependency in the wrapper or agent

Open rapphil opened this issue 3 years ago • 2 comments

Describe the bug

The request handler for the java layer-wrapper uses joda: https://github.com/open-telemetry/opentelemetry-java-instrumentation/blob/main/instrumentation/aws-lambda/aws-lambda-events-2.2/library/src/main/java/io/opentelemetry/instrumentation/awslambdaevents/v2_2/TracingRequestWrapperBase.java#L33

However joda is not being added as runtime dependency of our lambda layer.

We did not notice it because in our sample applications, we are adding a dependency on aws-lambda-java-events. which provides joda as a transitive dependency.

https://github.com/open-telemetry/opentelemetry-lambda/blob/main/java/sample-apps/aws-sdk/build.gradle.kts#L9

https://search.maven.org/artifact/com.amazonaws/aws-lambda-java-events/3.11.0/jar

Steps to reproduce Create any lambda application without a dependency on aws-lambda-java-events

What did you expect to see? I would expect the lambda layer to work with the minimal number of dependencies for any lambda to work or I would expect the documentation to be explicit about what dependencies are required for an application using the adot lambda layer to work.

What did you see instead? Error when trying to use the lambda layer:

Error loading class io.opentelemetry.instrumentation.awslambdaevents.v2_2.TracingRequestApiGatewayWrapper: org/joda/time/DateTime: java.lang.NoClassDefFoundError
java.lang.NoClassDefFoundError: org/joda/time/DateTime
	at io.opentelemetry.instrumentation.awslambdaevents.v2_2.CustomJodaModule.<init>(CustomJodaModule.java:38)
	at io.opentelemetry.instrumentation.awslambdaevents.v2_2.TracingRequestWrapperBase.<clinit>(TracingRequestWrapperBase.java:31)
	at java.base/java.lang.Class.forName0(Native Method)
	at java.base/java.lang.Class.forName(Unknown Source)

What version of collector/language SDK version did you use? Java instrumentation 1.17, 1.18 and 1.19

What language layer did you use? Java

Workaround: Include aws-lambda-java-events as runtime dependency of your application.

rapphil avatar Nov 16 '22 18:11 rapphil

We should consider solving this in the java-instrumentation https://github.com/open-telemetry/opentelemetry-java-instrumentation/blob/main/instrumentation/aws-lambda/aws-lambda-events-2.2/library/build.gradle.kts#L19

rapphil avatar Nov 16 '22 18:11 rapphil

It's worth noting that the issue is not isolated to just Joda library. If I added Joda manually to my app, then I'd pass that error and see another one:

com/amazonaws/services/lambda/runtime/events/APIGatewayProxyRequestEvent: java.lang.NoClassDefFoundError
java.lang.NoClassDefFoundError: com/amazonaws/services/lambda/runtime/events/APIGatewayProxyRequestEvent
    at io.opentelemetry.instrumentation.awslambdaevents.v2_2.TracingRequestWrapperBase.extractHttpHeaders(TracingRequestWrapperBase.java:79)
    at io.opentelemetry.instrumentation.awslambdacore.v1_0.TracingRequestHandler.handleRequest(TracingRequestHandler.java:68)
Caused by: java.lang.ClassNotFoundException: com.amazonaws.services.lambda.runtime.events.APIGatewayProxyRequestEvent.

... which indicates that the aws-lambda-java-events is also required but is not available: https://github.com/open-telemetry/opentelemetry-java-instrumentation/blob/f236b2d4c9a0813b2dddf3d35928c79b21beb6d5/instrumentation/aws-lambda/aws-lambda-events-2.2/library/src/main/java/io/opentelemetry/instrumentation/awslambdaevents/v2_2/TracingRequestWrapperBase.java#L79

huyphan avatar Nov 16 '22 19:11 huyphan

This issue was marked stale. It will be closed in 30 days without additional activity.

github-actions[bot] avatar May 19 '24 03:05 github-actions[bot]