Use instance field for wrapped lambda instead of static. (#2579)
This commit is contained in:
parent
150b52ca19
commit
f3bc02f2e7
|
@ -21,7 +21,7 @@ public class TracingRequestApiGatewayWrapper
|
||||||
}
|
}
|
||||||
|
|
||||||
// Visible for testing
|
// Visible for testing
|
||||||
TracingRequestApiGatewayWrapper(OpenTelemetrySdk openTelemetrySdk) {
|
TracingRequestApiGatewayWrapper(OpenTelemetrySdk openTelemetrySdk, WrappedLambda wrappedLambda) {
|
||||||
super(openTelemetrySdk);
|
super(openTelemetrySdk, wrappedLambda);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -21,29 +21,28 @@ import java.io.OutputStream;
|
||||||
*/
|
*/
|
||||||
public class TracingRequestStreamWrapper extends TracingRequestStreamHandler {
|
public class TracingRequestStreamWrapper extends TracingRequestStreamHandler {
|
||||||
|
|
||||||
// visible for testing
|
private final WrappedLambda wrappedLambda;
|
||||||
static WrappedLambda WRAPPED_LAMBDA = WrappedLambda.fromConfiguration();
|
|
||||||
|
|
||||||
public TracingRequestStreamWrapper() {
|
public TracingRequestStreamWrapper() {
|
||||||
this(OpenTelemetrySdkAutoConfiguration.initialize());
|
this(OpenTelemetrySdkAutoConfiguration.initialize(), WrappedLambda.fromConfiguration());
|
||||||
}
|
}
|
||||||
|
|
||||||
// Visible for testing
|
// Visible for testing
|
||||||
TracingRequestStreamWrapper(OpenTelemetrySdk openTelemetrySdk) {
|
TracingRequestStreamWrapper(OpenTelemetrySdk openTelemetrySdk, WrappedLambda wrappedLambda) {
|
||||||
super(openTelemetrySdk, WrapperConfiguration.flushTimeout());
|
super(openTelemetrySdk, WrapperConfiguration.flushTimeout());
|
||||||
|
this.wrappedLambda = wrappedLambda;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected void doHandleRequest(InputStream inputStream, OutputStream output, Context context)
|
protected void doHandleRequest(InputStream inputStream, OutputStream output, Context context)
|
||||||
throws IOException {
|
throws IOException {
|
||||||
|
|
||||||
if (!(WRAPPED_LAMBDA.getTargetObject() instanceof RequestStreamHandler)) {
|
if (!(wrappedLambda.getTargetObject() instanceof RequestStreamHandler)) {
|
||||||
throw new RuntimeException(
|
throw new RuntimeException(
|
||||||
WRAPPED_LAMBDA.getTargetClass().getName()
|
wrappedLambda.getTargetClass().getName() + " is not an instance of RequestStreamHandler");
|
||||||
+ " is not an instance of RequestStreamHandler");
|
|
||||||
}
|
}
|
||||||
|
|
||||||
((RequestStreamHandler) WRAPPED_LAMBDA.getTargetObject())
|
((RequestStreamHandler) wrappedLambda.getTargetObject())
|
||||||
.handleRequest(inputStream, output, context);
|
.handleRequest(inputStream, output, context);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -17,7 +17,7 @@ public class TracingRequestWrapper extends TracingRequestWrapperBase<Object, Obj
|
||||||
}
|
}
|
||||||
|
|
||||||
// Visible for testing
|
// Visible for testing
|
||||||
TracingRequestWrapper(OpenTelemetrySdk openTelemetrySdk) {
|
TracingRequestWrapper(OpenTelemetrySdk openTelemetrySdk, WrappedLambda wrappedLambda) {
|
||||||
super(openTelemetrySdk);
|
super(openTelemetrySdk, wrappedLambda);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -17,18 +17,18 @@ import java.lang.reflect.Method;
|
||||||
*/
|
*/
|
||||||
abstract class TracingRequestWrapperBase<I, O> extends TracingRequestHandler<I, O> {
|
abstract class TracingRequestWrapperBase<I, O> extends TracingRequestHandler<I, O> {
|
||||||
|
|
||||||
|
private final WrappedLambda wrappedLambda;
|
||||||
|
|
||||||
protected TracingRequestWrapperBase() {
|
protected TracingRequestWrapperBase() {
|
||||||
this(OpenTelemetrySdkAutoConfiguration.initialize());
|
this(OpenTelemetrySdkAutoConfiguration.initialize(), WrappedLambda.fromConfiguration());
|
||||||
}
|
}
|
||||||
|
|
||||||
// Visible for testing
|
// Visible for testing
|
||||||
TracingRequestWrapperBase(OpenTelemetrySdk openTelemetrySdk) {
|
TracingRequestWrapperBase(OpenTelemetrySdk openTelemetrySdk, WrappedLambda wrappedLambda) {
|
||||||
super(openTelemetrySdk, WrapperConfiguration.flushTimeout());
|
super(openTelemetrySdk, WrapperConfiguration.flushTimeout());
|
||||||
|
this.wrappedLambda = wrappedLambda;
|
||||||
}
|
}
|
||||||
|
|
||||||
// visible for testing
|
|
||||||
static WrappedLambda WRAPPED_LAMBDA = WrappedLambda.fromConfiguration();
|
|
||||||
|
|
||||||
private Object[] createParametersArray(Method targetMethod, I input, Context context) {
|
private Object[] createParametersArray(Method targetMethod, I input, Context context) {
|
||||||
Class<?>[] parameterTypes = targetMethod.getParameterTypes();
|
Class<?>[] parameterTypes = targetMethod.getParameterTypes();
|
||||||
Object[] parameters = new Object[parameterTypes.length];
|
Object[] parameters = new Object[parameterTypes.length];
|
||||||
|
@ -51,12 +51,12 @@ abstract class TracingRequestWrapperBase<I, O> extends TracingRequestHandler<I,
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected O doHandleRequest(I input, Context context) {
|
protected O doHandleRequest(I input, Context context) {
|
||||||
Method targetMethod = WRAPPED_LAMBDA.getRequestTargetMethod();
|
Method targetMethod = wrappedLambda.getRequestTargetMethod();
|
||||||
Object[] parameters = createParametersArray(targetMethod, input, context);
|
Object[] parameters = createParametersArray(targetMethod, input, context);
|
||||||
|
|
||||||
O result;
|
O result;
|
||||||
try {
|
try {
|
||||||
result = (O) targetMethod.invoke(WRAPPED_LAMBDA.getTargetObject(), parameters);
|
result = (O) targetMethod.invoke(wrappedLambda.getTargetObject(), parameters);
|
||||||
} catch (IllegalAccessException e) {
|
} catch (IllegalAccessException e) {
|
||||||
throw new RuntimeException("Method is inaccessible", e);
|
throw new RuntimeException("Method is inaccessible", e);
|
||||||
} catch (InvocationTargetException e) {
|
} catch (InvocationTargetException e) {
|
||||||
|
|
|
@ -38,7 +38,7 @@ class TracingRequestApiGatewayWrapperTest extends TracingRequestWrapperTestBase
|
||||||
|
|
||||||
def "handler traced with trace propagation"() {
|
def "handler traced with trace propagation"() {
|
||||||
given:
|
given:
|
||||||
setLambda(TestApiGatewayHandler.getName() + "::handleRequest", { new TracingRequestApiGatewayWrapper(it) })
|
setLambda(TestApiGatewayHandler.getName() + "::handleRequest", TracingRequestApiGatewayWrapper.metaClass.&invokeConstructor)
|
||||||
|
|
||||||
def headers = ImmutableMap.builder()
|
def headers = ImmutableMap.builder()
|
||||||
.putAll(propagationHeaders())
|
.putAll(propagationHeaders())
|
||||||
|
@ -83,7 +83,7 @@ class TracingRequestApiGatewayWrapperTest extends TracingRequestWrapperTestBase
|
||||||
|
|
||||||
def "test empty request & response"() {
|
def "test empty request & response"() {
|
||||||
given:
|
given:
|
||||||
setLambda(TestApiGatewayHandler.getName() + "::handleRequest", { new TracingRequestApiGatewayWrapper(it) })
|
setLambda(TestApiGatewayHandler.getName() + "::handleRequest", TracingRequestApiGatewayWrapper.metaClass.&invokeConstructor)
|
||||||
|
|
||||||
def input = new APIGatewayProxyRequestEvent()
|
def input = new APIGatewayProxyRequestEvent()
|
||||||
.withBody("empty")
|
.withBody("empty")
|
||||||
|
|
|
@ -49,8 +49,7 @@ class TracingRequestStreamWrapperPropagationTest extends LibraryInstrumentationS
|
||||||
|
|
||||||
def setup() {
|
def setup() {
|
||||||
environmentVariables.set(WrappedLambda.OTEL_LAMBDA_HANDLER_ENV_KEY, "io.opentelemetry.instrumentation.awslambda.v1_0.TracingRequestStreamWrapperPropagationTest\$TestRequestHandler::handleRequest")
|
environmentVariables.set(WrappedLambda.OTEL_LAMBDA_HANDLER_ENV_KEY, "io.opentelemetry.instrumentation.awslambda.v1_0.TracingRequestStreamWrapperPropagationTest\$TestRequestHandler::handleRequest")
|
||||||
TracingRequestStreamWrapper.WRAPPED_LAMBDA = WrappedLambda.fromConfiguration()
|
wrapper = new TracingRequestStreamWrapper(testRunner().openTelemetrySdk, WrappedLambda.fromConfiguration())
|
||||||
wrapper = new TracingRequestStreamWrapper(testRunner().openTelemetrySdk)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
def cleanup() {
|
def cleanup() {
|
||||||
|
|
|
@ -45,8 +45,7 @@ class TracingRequestStreamWrapperTest extends LibraryInstrumentationSpecificatio
|
||||||
|
|
||||||
def setup() {
|
def setup() {
|
||||||
environmentVariables.set(WrappedLambda.OTEL_LAMBDA_HANDLER_ENV_KEY, "io.opentelemetry.instrumentation.awslambda.v1_0.TracingRequestStreamWrapperTest\$TestRequestHandler::handleRequest")
|
environmentVariables.set(WrappedLambda.OTEL_LAMBDA_HANDLER_ENV_KEY, "io.opentelemetry.instrumentation.awslambda.v1_0.TracingRequestStreamWrapperTest\$TestRequestHandler::handleRequest")
|
||||||
TracingRequestStreamWrapper.WRAPPED_LAMBDA = WrappedLambda.fromConfiguration()
|
wrapper = new TracingRequestStreamWrapper(testRunner().openTelemetrySdk, WrappedLambda.fromConfiguration())
|
||||||
wrapper = new TracingRequestStreamWrapper(testRunner().openTelemetrySdk)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
def cleanup() {
|
def cleanup() {
|
||||||
|
|
|
@ -27,7 +27,7 @@ class TracingRequestWrapperTest extends TracingRequestWrapperTestBase {
|
||||||
|
|
||||||
def "handler string traced"() {
|
def "handler string traced"() {
|
||||||
given:
|
given:
|
||||||
setLambda(TestRequestHandlerString.getName() + "::handleRequest", { new TracingRequestWrapper(it) })
|
setLambda(TestRequestHandlerString.getName() + "::handleRequest", TracingRequestWrapper.metaClass.&invokeConstructor)
|
||||||
|
|
||||||
when:
|
when:
|
||||||
def result = wrapper.handleRequest("hello", context)
|
def result = wrapper.handleRequest("hello", context)
|
||||||
|
@ -51,7 +51,7 @@ class TracingRequestWrapperTest extends TracingRequestWrapperTestBase {
|
||||||
|
|
||||||
def "handler with exception"() {
|
def "handler with exception"() {
|
||||||
given:
|
given:
|
||||||
setLambda(TestRequestHandlerString.getName() + "::handleRequest", { new TracingRequestWrapper(it) })
|
setLambda(TestRequestHandlerString.getName() + "::handleRequest", TracingRequestWrapper.metaClass.&invokeConstructor)
|
||||||
|
|
||||||
when:
|
when:
|
||||||
def thrown
|
def thrown
|
||||||
|
|
|
@ -31,7 +31,6 @@ class TracingRequestWrapperTestBase extends LibraryInstrumentationSpecification
|
||||||
|
|
||||||
def setLambda(handler, Closure<TracingRequestWrapperBase> wrapperConstructor) {
|
def setLambda(handler, Closure<TracingRequestWrapperBase> wrapperConstructor) {
|
||||||
environmentVariables.set(WrappedLambda.OTEL_LAMBDA_HANDLER_ENV_KEY, handler)
|
environmentVariables.set(WrappedLambda.OTEL_LAMBDA_HANDLER_ENV_KEY, handler)
|
||||||
TracingRequestWrapper.WRAPPED_LAMBDA = WrappedLambda.fromConfiguration()
|
wrapper = wrapperConstructor.call(testRunner().openTelemetrySdk, WrappedLambda.fromConfiguration())
|
||||||
wrapper = wrapperConstructor.call(testRunner().openTelemetrySdk)
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue