Ignore aws sdk v2 presign requests (#9275)
This commit is contained in:
parent
04436a13b3
commit
a9d5acc745
|
@ -84,6 +84,22 @@ dependencies {
|
||||||
testLibrary("software.amazon.awssdk:ses:2.2.0")
|
testLibrary("software.amazon.awssdk:ses:2.2.0")
|
||||||
}
|
}
|
||||||
|
|
||||||
|
val latestDepTest = findProperty("testLatestDeps") as Boolean
|
||||||
|
|
||||||
|
testing {
|
||||||
|
suites {
|
||||||
|
val s3PresignerTest by registering(JvmTestSuite::class) {
|
||||||
|
dependencies {
|
||||||
|
if (latestDepTest) {
|
||||||
|
implementation("software.amazon.awssdk:s3:+")
|
||||||
|
} else {
|
||||||
|
implementation("software.amazon.awssdk:s3:2.10.12")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
tasks {
|
tasks {
|
||||||
val testExperimentalSqs by registering(Test::class) {
|
val testExperimentalSqs by registering(Test::class) {
|
||||||
group = "verification"
|
group = "verification"
|
||||||
|
@ -93,6 +109,7 @@ tasks {
|
||||||
|
|
||||||
check {
|
check {
|
||||||
dependsOn(testExperimentalSqs)
|
dependsOn(testExperimentalSqs)
|
||||||
|
dependsOn(testing.suites)
|
||||||
}
|
}
|
||||||
|
|
||||||
withType<Test>().configureEach {
|
withType<Test>().configureEach {
|
||||||
|
|
|
@ -5,6 +5,7 @@
|
||||||
|
|
||||||
package io.opentelemetry.javaagent.instrumentation.awssdk.v2_2;
|
package io.opentelemetry.javaagent.instrumentation.awssdk.v2_2;
|
||||||
|
|
||||||
|
import static io.opentelemetry.javaagent.extension.matcher.AgentElementMatchers.hasClassesNamed;
|
||||||
import static net.bytebuddy.matcher.ElementMatchers.none;
|
import static net.bytebuddy.matcher.ElementMatchers.none;
|
||||||
|
|
||||||
import com.google.auto.service.AutoService;
|
import com.google.auto.service.AutoService;
|
||||||
|
@ -12,6 +13,7 @@ import io.opentelemetry.instrumentation.awssdk.v2_2.SnsAdviceBridge;
|
||||||
import io.opentelemetry.javaagent.extension.instrumentation.InstrumentationModule;
|
import io.opentelemetry.javaagent.extension.instrumentation.InstrumentationModule;
|
||||||
import io.opentelemetry.javaagent.extension.instrumentation.TypeTransformer;
|
import io.opentelemetry.javaagent.extension.instrumentation.TypeTransformer;
|
||||||
import net.bytebuddy.asm.Advice;
|
import net.bytebuddy.asm.Advice;
|
||||||
|
import net.bytebuddy.matcher.ElementMatcher;
|
||||||
|
|
||||||
@AutoService(InstrumentationModule.class)
|
@AutoService(InstrumentationModule.class)
|
||||||
public class SnsInstrumentationModule extends AbstractAwsSdkInstrumentationModule {
|
public class SnsInstrumentationModule extends AbstractAwsSdkInstrumentationModule {
|
||||||
|
@ -20,6 +22,11 @@ public class SnsInstrumentationModule extends AbstractAwsSdkInstrumentationModul
|
||||||
super("aws-sdk-2.2-sns");
|
super("aws-sdk-2.2-sns");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public ElementMatcher.Junction<ClassLoader> classLoaderMatcher() {
|
||||||
|
return hasClassesNamed("software.amazon.awssdk.services.sns.SnsClient");
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void doTransform(TypeTransformer transformer) {
|
public void doTransform(TypeTransformer transformer) {
|
||||||
transformer.applyAdviceToMethod(
|
transformer.applyAdviceToMethod(
|
||||||
|
|
|
@ -5,6 +5,7 @@
|
||||||
|
|
||||||
package io.opentelemetry.javaagent.instrumentation.awssdk.v2_2;
|
package io.opentelemetry.javaagent.instrumentation.awssdk.v2_2;
|
||||||
|
|
||||||
|
import static io.opentelemetry.javaagent.extension.matcher.AgentElementMatchers.hasClassesNamed;
|
||||||
import static net.bytebuddy.matcher.ElementMatchers.none;
|
import static net.bytebuddy.matcher.ElementMatchers.none;
|
||||||
|
|
||||||
import com.google.auto.service.AutoService;
|
import com.google.auto.service.AutoService;
|
||||||
|
@ -12,6 +13,7 @@ import io.opentelemetry.instrumentation.awssdk.v2_2.SqsAdviceBridge;
|
||||||
import io.opentelemetry.javaagent.extension.instrumentation.InstrumentationModule;
|
import io.opentelemetry.javaagent.extension.instrumentation.InstrumentationModule;
|
||||||
import io.opentelemetry.javaagent.extension.instrumentation.TypeTransformer;
|
import io.opentelemetry.javaagent.extension.instrumentation.TypeTransformer;
|
||||||
import net.bytebuddy.asm.Advice;
|
import net.bytebuddy.asm.Advice;
|
||||||
|
import net.bytebuddy.matcher.ElementMatcher;
|
||||||
|
|
||||||
@AutoService(InstrumentationModule.class)
|
@AutoService(InstrumentationModule.class)
|
||||||
public class SqsInstrumentationModule extends AbstractAwsSdkInstrumentationModule {
|
public class SqsInstrumentationModule extends AbstractAwsSdkInstrumentationModule {
|
||||||
|
@ -20,6 +22,11 @@ public class SqsInstrumentationModule extends AbstractAwsSdkInstrumentationModul
|
||||||
super("aws-sdk-2.2-sqs");
|
super("aws-sdk-2.2-sqs");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public ElementMatcher.Junction<ClassLoader> classLoaderMatcher() {
|
||||||
|
return hasClassesNamed("software.amazon.awssdk.services.sqs.SqsClient");
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void doTransform(TypeTransformer transformer) {
|
public void doTransform(TypeTransformer transformer) {
|
||||||
transformer.applyAdviceToMethod(
|
transformer.applyAdviceToMethod(
|
||||||
|
|
|
@ -0,0 +1,69 @@
|
||||||
|
/*
|
||||||
|
* Copyright The OpenTelemetry Authors
|
||||||
|
* SPDX-License-Identifier: Apache-2.0
|
||||||
|
*/
|
||||||
|
|
||||||
|
import static org.assertj.core.api.Assertions.assertThat;
|
||||||
|
|
||||||
|
import io.opentelemetry.api.trace.Span;
|
||||||
|
import io.opentelemetry.instrumentation.testing.junit.AgentInstrumentationExtension;
|
||||||
|
import io.opentelemetry.instrumentation.testing.junit.InstrumentationExtension;
|
||||||
|
import java.time.Duration;
|
||||||
|
import org.junit.jupiter.api.BeforeAll;
|
||||||
|
import org.junit.jupiter.api.Test;
|
||||||
|
import org.junit.jupiter.api.extension.RegisterExtension;
|
||||||
|
import software.amazon.awssdk.auth.credentials.AwsBasicCredentials;
|
||||||
|
import software.amazon.awssdk.auth.credentials.StaticCredentialsProvider;
|
||||||
|
import software.amazon.awssdk.regions.Region;
|
||||||
|
import software.amazon.awssdk.services.s3.S3Client;
|
||||||
|
import software.amazon.awssdk.services.s3.presigner.S3Presigner;
|
||||||
|
import software.amazon.awssdk.services.s3.presigner.model.GetObjectPresignRequest;
|
||||||
|
import software.amazon.awssdk.services.s3.presigner.model.PutObjectPresignRequest;
|
||||||
|
|
||||||
|
class S3PresignerTest {
|
||||||
|
@RegisterExtension
|
||||||
|
static final InstrumentationExtension testing = AgentInstrumentationExtension.create();
|
||||||
|
|
||||||
|
private static final StaticCredentialsProvider CREDENTIALS_PROVIDER =
|
||||||
|
StaticCredentialsProvider.create(
|
||||||
|
AwsBasicCredentials.create("my-access-key", "my-secret-key"));
|
||||||
|
|
||||||
|
private static S3Presigner s3Presigner;
|
||||||
|
|
||||||
|
@BeforeAll
|
||||||
|
static void setUp() {
|
||||||
|
// trigger adding tracing interceptor
|
||||||
|
S3Client.builder()
|
||||||
|
.region(Region.AP_NORTHEAST_1)
|
||||||
|
.credentialsProvider(CREDENTIALS_PROVIDER)
|
||||||
|
.build();
|
||||||
|
|
||||||
|
s3Presigner =
|
||||||
|
S3Presigner.builder()
|
||||||
|
.region(Region.AP_NORTHEAST_1)
|
||||||
|
.credentialsProvider(CREDENTIALS_PROVIDER)
|
||||||
|
.build();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
void testPresignGetObject() {
|
||||||
|
s3Presigner.presignGetObject(
|
||||||
|
GetObjectPresignRequest.builder()
|
||||||
|
.getObjectRequest(builder -> builder.bucket("test").key("test"))
|
||||||
|
.signatureDuration(Duration.ofDays(1))
|
||||||
|
.build());
|
||||||
|
|
||||||
|
assertThat(Span.current().getSpanContext().isValid()).isFalse();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
void testPresignPutObject() {
|
||||||
|
s3Presigner.presignPutObject(
|
||||||
|
PutObjectPresignRequest.builder()
|
||||||
|
.putObjectRequest(builder -> builder.bucket("test").key("test"))
|
||||||
|
.signatureDuration(Duration.ofDays(1))
|
||||||
|
.build());
|
||||||
|
|
||||||
|
assertThat(Span.current().getSpanContext().isValid()).isFalse();
|
||||||
|
}
|
||||||
|
}
|
|
@ -17,6 +17,7 @@ import io.opentelemetry.instrumentation.api.instrumenter.Instrumenter;
|
||||||
import io.opentelemetry.semconv.trace.attributes.SemanticAttributes;
|
import io.opentelemetry.semconv.trace.attributes.SemanticAttributes;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import javax.annotation.Nullable;
|
import javax.annotation.Nullable;
|
||||||
|
import software.amazon.awssdk.auth.signer.AwsSignerExecutionAttribute;
|
||||||
import software.amazon.awssdk.awscore.AwsResponse;
|
import software.amazon.awssdk.awscore.AwsResponse;
|
||||||
import software.amazon.awssdk.core.ClientType;
|
import software.amazon.awssdk.core.ClientType;
|
||||||
import software.amazon.awssdk.core.SdkRequest;
|
import software.amazon.awssdk.core.SdkRequest;
|
||||||
|
@ -89,6 +90,14 @@ final class TracingExecutionInterceptor implements ExecutionInterceptor {
|
||||||
|
|
||||||
io.opentelemetry.context.Context parentOtelContext = io.opentelemetry.context.Context.current();
|
io.opentelemetry.context.Context parentOtelContext = io.opentelemetry.context.Context.current();
|
||||||
SdkRequest request = context.request();
|
SdkRequest request = context.request();
|
||||||
|
|
||||||
|
// Ignore presign request. These requests don't run all interceptor methods and the span created
|
||||||
|
// here would never be ended and scope closed.
|
||||||
|
if (executionAttributes.getAttribute(AwsSignerExecutionAttribute.PRESIGNER_EXPIRATION)
|
||||||
|
!= null) {
|
||||||
|
return request;
|
||||||
|
}
|
||||||
|
|
||||||
executionAttributes.putAttribute(SDK_REQUEST_ATTRIBUTE, request);
|
executionAttributes.putAttribute(SDK_REQUEST_ATTRIBUTE, request);
|
||||||
|
|
||||||
if (!requestInstrumenter.shouldStart(parentOtelContext, executionAttributes)) {
|
if (!requestInstrumenter.shouldStart(parentOtelContext, executionAttributes)) {
|
||||||
|
|
Loading…
Reference in New Issue