Use instance field for wrapped lambda instead of static. (#2579)

This commit is contained in:
Anuraag Agrawal 2021-03-16 18:24:23 +09:00 committed by GitHub
parent 150b52ca19
commit f3bc02f2e7
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
9 changed files with 25 additions and 29 deletions

View File

@ -21,7 +21,7 @@ public class TracingRequestApiGatewayWrapper
}
// Visible for testing
TracingRequestApiGatewayWrapper(OpenTelemetrySdk openTelemetrySdk) {
super(openTelemetrySdk);
TracingRequestApiGatewayWrapper(OpenTelemetrySdk openTelemetrySdk, WrappedLambda wrappedLambda) {
super(openTelemetrySdk, wrappedLambda);
}
}

View File

@ -21,29 +21,28 @@ import java.io.OutputStream;
*/
public class TracingRequestStreamWrapper extends TracingRequestStreamHandler {
// visible for testing
static WrappedLambda WRAPPED_LAMBDA = WrappedLambda.fromConfiguration();
private final WrappedLambda wrappedLambda;
public TracingRequestStreamWrapper() {
this(OpenTelemetrySdkAutoConfiguration.initialize());
this(OpenTelemetrySdkAutoConfiguration.initialize(), WrappedLambda.fromConfiguration());
}
// Visible for testing
TracingRequestStreamWrapper(OpenTelemetrySdk openTelemetrySdk) {
TracingRequestStreamWrapper(OpenTelemetrySdk openTelemetrySdk, WrappedLambda wrappedLambda) {
super(openTelemetrySdk, WrapperConfiguration.flushTimeout());
this.wrappedLambda = wrappedLambda;
}
@Override
protected void doHandleRequest(InputStream inputStream, OutputStream output, Context context)
throws IOException {
if (!(WRAPPED_LAMBDA.getTargetObject() instanceof RequestStreamHandler)) {
if (!(wrappedLambda.getTargetObject() instanceof RequestStreamHandler)) {
throw new RuntimeException(
WRAPPED_LAMBDA.getTargetClass().getName()
+ " is not an instance of RequestStreamHandler");
wrappedLambda.getTargetClass().getName() + " is not an instance of RequestStreamHandler");
}
((RequestStreamHandler) WRAPPED_LAMBDA.getTargetObject())
((RequestStreamHandler) wrappedLambda.getTargetObject())
.handleRequest(inputStream, output, context);
}
}

View File

@ -17,7 +17,7 @@ public class TracingRequestWrapper extends TracingRequestWrapperBase<Object, Obj
}
// Visible for testing
TracingRequestWrapper(OpenTelemetrySdk openTelemetrySdk) {
super(openTelemetrySdk);
TracingRequestWrapper(OpenTelemetrySdk openTelemetrySdk, WrappedLambda wrappedLambda) {
super(openTelemetrySdk, wrappedLambda);
}
}

View File

@ -17,18 +17,18 @@ import java.lang.reflect.Method;
*/
abstract class TracingRequestWrapperBase<I, O> extends TracingRequestHandler<I, O> {
private final WrappedLambda wrappedLambda;
protected TracingRequestWrapperBase() {
this(OpenTelemetrySdkAutoConfiguration.initialize());
this(OpenTelemetrySdkAutoConfiguration.initialize(), WrappedLambda.fromConfiguration());
}
// Visible for testing
TracingRequestWrapperBase(OpenTelemetrySdk openTelemetrySdk) {
TracingRequestWrapperBase(OpenTelemetrySdk openTelemetrySdk, WrappedLambda wrappedLambda) {
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) {
Class<?>[] parameterTypes = targetMethod.getParameterTypes();
Object[] parameters = new Object[parameterTypes.length];
@ -51,12 +51,12 @@ abstract class TracingRequestWrapperBase<I, O> extends TracingRequestHandler<I,
@Override
protected O doHandleRequest(I input, Context context) {
Method targetMethod = WRAPPED_LAMBDA.getRequestTargetMethod();
Method targetMethod = wrappedLambda.getRequestTargetMethod();
Object[] parameters = createParametersArray(targetMethod, input, context);
O result;
try {
result = (O) targetMethod.invoke(WRAPPED_LAMBDA.getTargetObject(), parameters);
result = (O) targetMethod.invoke(wrappedLambda.getTargetObject(), parameters);
} catch (IllegalAccessException e) {
throw new RuntimeException("Method is inaccessible", e);
} catch (InvocationTargetException e) {

View File

@ -38,7 +38,7 @@ class TracingRequestApiGatewayWrapperTest extends TracingRequestWrapperTestBase
def "handler traced with trace propagation"() {
given:
setLambda(TestApiGatewayHandler.getName() + "::handleRequest", { new TracingRequestApiGatewayWrapper(it) })
setLambda(TestApiGatewayHandler.getName() + "::handleRequest", TracingRequestApiGatewayWrapper.metaClass.&invokeConstructor)
def headers = ImmutableMap.builder()
.putAll(propagationHeaders())
@ -83,7 +83,7 @@ class TracingRequestApiGatewayWrapperTest extends TracingRequestWrapperTestBase
def "test empty request & response"() {
given:
setLambda(TestApiGatewayHandler.getName() + "::handleRequest", { new TracingRequestApiGatewayWrapper(it) })
setLambda(TestApiGatewayHandler.getName() + "::handleRequest", TracingRequestApiGatewayWrapper.metaClass.&invokeConstructor)
def input = new APIGatewayProxyRequestEvent()
.withBody("empty")

View File

@ -49,8 +49,7 @@ class TracingRequestStreamWrapperPropagationTest extends LibraryInstrumentationS
def setup() {
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)
wrapper = new TracingRequestStreamWrapper(testRunner().openTelemetrySdk, WrappedLambda.fromConfiguration())
}
def cleanup() {

View File

@ -45,8 +45,7 @@ class TracingRequestStreamWrapperTest extends LibraryInstrumentationSpecificatio
def setup() {
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)
wrapper = new TracingRequestStreamWrapper(testRunner().openTelemetrySdk, WrappedLambda.fromConfiguration())
}
def cleanup() {

View File

@ -27,7 +27,7 @@ class TracingRequestWrapperTest extends TracingRequestWrapperTestBase {
def "handler string traced"() {
given:
setLambda(TestRequestHandlerString.getName() + "::handleRequest", { new TracingRequestWrapper(it) })
setLambda(TestRequestHandlerString.getName() + "::handleRequest", TracingRequestWrapper.metaClass.&invokeConstructor)
when:
def result = wrapper.handleRequest("hello", context)
@ -51,7 +51,7 @@ class TracingRequestWrapperTest extends TracingRequestWrapperTestBase {
def "handler with exception"() {
given:
setLambda(TestRequestHandlerString.getName() + "::handleRequest", { new TracingRequestWrapper(it) })
setLambda(TestRequestHandlerString.getName() + "::handleRequest", TracingRequestWrapper.metaClass.&invokeConstructor)
when:
def thrown

View File

@ -31,7 +31,6 @@ class TracingRequestWrapperTestBase extends LibraryInstrumentationSpecification
def setLambda(handler, Closure<TracingRequestWrapperBase> wrapperConstructor) {
environmentVariables.set(WrappedLambda.OTEL_LAMBDA_HANDLER_ENV_KEY, handler)
TracingRequestWrapper.WRAPPED_LAMBDA = WrappedLambda.fromConfiguration()
wrapper = wrapperConstructor.call(testRunner().openTelemetrySdk)
wrapper = wrapperConstructor.call(testRunner().openTelemetrySdk, WrappedLambda.fromConfiguration())
}
}