Skip to content

Commit 4bd47bf

Browse files
authored
Test latest version of spring-cloud-aws (#14207)
1 parent 922537e commit 4bd47bf

File tree

4 files changed

+56
-6
lines changed

4 files changed

+56
-6
lines changed

instrumentation/spring/spring-cloud-aws-3.0/javaagent/build.gradle.kts

Lines changed: 1 addition & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -12,17 +12,13 @@ muzzle {
1212
}
1313

1414
dependencies {
15-
// current latest release 3.3.0-M1 has parent that is from central because of that we can't use
16-
// library here and have to use compileOnly + testImplementation to avoid resolving the broken
17-
// version
18-
compileOnly("io.awspring.cloud:spring-cloud-aws-starter-sqs:3.0.0")
15+
library("io.awspring.cloud:spring-cloud-aws-starter-sqs:3.0.0")
1916
implementation(project(":instrumentation:aws-sdk:aws-sdk-2.2:library"))
2017

2118
testInstrumentation(project(":instrumentation:aws-sdk:aws-sdk-2.2:javaagent"))
2219

2320
testImplementation("org.elasticmq:elasticmq-rest-sqs_2.13")
2421

25-
testImplementation("io.awspring.cloud:spring-cloud-aws-starter-sqs:3.0.0")
2622
testLibrary("org.springframework.boot:spring-boot-starter-test:3.0.0")
2723
testLibrary("org.springframework.boot:spring-boot-starter-web:3.0.0")
2824
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,45 @@
1+
/*
2+
* Copyright The OpenTelemetry Authors
3+
* SPDX-License-Identifier: Apache-2.0
4+
*/
5+
6+
package io.opentelemetry.javaagent.instrumentation.spring.aws;
7+
8+
import static net.bytebuddy.matcher.ElementMatchers.named;
9+
import static net.bytebuddy.matcher.ElementMatchers.namedOneOf;
10+
import static net.bytebuddy.matcher.ElementMatchers.returns;
11+
import static net.bytebuddy.matcher.ElementMatchers.takesArgument;
12+
13+
import io.opentelemetry.javaagent.extension.instrumentation.TypeInstrumentation;
14+
import io.opentelemetry.javaagent.extension.instrumentation.TypeTransformer;
15+
import net.bytebuddy.asm.Advice;
16+
import net.bytebuddy.description.type.TypeDescription;
17+
import net.bytebuddy.matcher.ElementMatcher;
18+
import org.springframework.messaging.Message;
19+
20+
public class MessageHeaderUtilsInstrumentation implements TypeInstrumentation {
21+
22+
@Override
23+
public ElementMatcher<TypeDescription> typeMatcher() {
24+
return named("io.awspring.cloud.sqs.MessageHeaderUtils");
25+
}
26+
27+
@Override
28+
public void transform(TypeTransformer transformer) {
29+
transformer.applyAdviceToMethod(
30+
namedOneOf("addHeaderIfAbsent", "addHeadersIfAbsent", "removeHeaderIfPresent")
31+
.and(returns(named("org.springframework.messaging.Message")))
32+
.and(takesArgument(0, named("org.springframework.messaging.Message"))),
33+
this.getClass().getName() + "$PreserveContextAdvice");
34+
}
35+
36+
@SuppressWarnings("unused")
37+
public static class PreserveContextAdvice {
38+
39+
@Advice.OnMethodExit(suppress = Throwable.class)
40+
public static void methodExit(
41+
@Advice.Argument(0) Message<?> original, @Advice.Return Message<?> result) {
42+
SpringAwsUtil.copyTracingState(original, result);
43+
}
44+
}
45+
}

instrumentation/spring/spring-cloud-aws-3.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/spring/aws/SpringAwsSqsInstrumentationModule.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,7 @@ public List<TypeInstrumentation> typeInstrumentations() {
3737
new AbstractMessageConvertingMessageSourceInstrumentation(),
3838
new MessagingMessageListenerAdapterInstrumentation(),
3939
new SqsTemplateInstrumentation(),
40-
new AcknowledgementExecutionContextInstrumentation());
40+
new AcknowledgementExecutionContextInstrumentation(),
41+
new MessageHeaderUtilsInstrumentation());
4142
}
4243
}

instrumentation/spring/spring-cloud-aws-3.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/spring/aws/SpringAwsUtil.java

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -53,6 +53,14 @@ public static void attachTracingState(Object originalMessage, Message<?> convert
5353
tracingContextField.set(convertedMessage, new TracingContext(tracingList, message));
5454
}
5555

56+
public static void copyTracingState(Message<?> original, Message<?> transformed) {
57+
if (original == transformed) {
58+
return;
59+
}
60+
61+
tracingContextField.set(transformed, tracingContextField.get(original));
62+
}
63+
5664
public static MessageScope handleMessage(Message<?> message) {
5765
TracingContext tracingContext = tracingContextField.get(message);
5866
if (tracingContext == null) {

0 commit comments

Comments
 (0)