Skip to content

Commit 32c64c4

Browse files
authored
Protect mdb from instrumenting multiple time the same event (#8062)
1 parent 2b24697 commit 32c64c4

File tree

2 files changed

+12
-0
lines changed

2 files changed

+12
-0
lines changed

dd-java-agent/instrumentation/jakarta-jms/src/main/java/datadog/trace/instrumentation/jakarta/jms/MDBMessageConsumerInstrumentation.java

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,11 +19,13 @@
1919
import com.google.auto.service.AutoService;
2020
import datadog.trace.agent.tooling.Instrumenter;
2121
import datadog.trace.agent.tooling.InstrumenterModule;
22+
import datadog.trace.bootstrap.CallDepthThreadLocalMap;
2223
import datadog.trace.bootstrap.instrumentation.api.AgentScope;
2324
import datadog.trace.bootstrap.instrumentation.api.AgentSpan;
2425
import jakarta.jms.Destination;
2526
import jakarta.jms.JMSException;
2627
import jakarta.jms.Message;
28+
import jakarta.jms.MessageListener;
2729
import net.bytebuddy.asm.Advice;
2830
import net.bytebuddy.description.type.TypeDescription;
2931
import net.bytebuddy.matcher.ElementMatcher;
@@ -72,6 +74,9 @@ public void methodAdvice(MethodTransformer transformer) {
7274
public static class MDBAdvice {
7375
@Advice.OnMethodEnter(suppress = Throwable.class)
7476
public static AgentScope methodEnter(@Advice.Argument(0) final Message message) {
77+
if (CallDepthThreadLocalMap.incrementCallDepth(MessageListener.class) > 0) {
78+
return null;
79+
}
7580
AgentSpan.Context propagatedContext = propagate().extract(message, GETTER);
7681
AgentSpan span = startSpan(JMS_CONSUME, propagatedContext);
7782
CONSUMER_DECORATE.afterStart(span);
@@ -93,6 +98,7 @@ public static AgentScope methodEnter(@Advice.Argument(0) final Message message)
9398
public static void methodExit(
9499
@Advice.Enter AgentScope scope, @Advice.Thrown final Throwable throwable) {
95100
if (null != scope) {
101+
CallDepthThreadLocalMap.reset(MessageListener.class);
96102
CONSUMER_DECORATE.onError(scope, throwable);
97103
scope.close();
98104
scope.span().finish();

dd-java-agent/instrumentation/jms/src/main/java/datadog/trace/instrumentation/jms/MDBMessageConsumerInstrumentation.java

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,11 +19,13 @@
1919
import com.google.auto.service.AutoService;
2020
import datadog.trace.agent.tooling.Instrumenter;
2121
import datadog.trace.agent.tooling.InstrumenterModule;
22+
import datadog.trace.bootstrap.CallDepthThreadLocalMap;
2223
import datadog.trace.bootstrap.instrumentation.api.AgentScope;
2324
import datadog.trace.bootstrap.instrumentation.api.AgentSpan;
2425
import javax.jms.Destination;
2526
import javax.jms.JMSException;
2627
import javax.jms.Message;
28+
import javax.jms.MessageListener;
2729
import net.bytebuddy.asm.Advice;
2830
import net.bytebuddy.description.type.TypeDescription;
2931
import net.bytebuddy.matcher.ElementMatcher;
@@ -72,6 +74,9 @@ public void methodAdvice(MethodTransformer transformer) {
7274
public static class MDBAdvice {
7375
@Advice.OnMethodEnter(suppress = Throwable.class)
7476
public static AgentScope methodEnter(@Advice.Argument(0) final Message message) {
77+
if (CallDepthThreadLocalMap.incrementCallDepth(MessageListener.class) > 0) {
78+
return null;
79+
}
7580
AgentSpan.Context propagatedContext = propagate().extract(message, GETTER);
7681
AgentSpan span = startSpan(JMS_CONSUME, propagatedContext);
7782
CONSUMER_DECORATE.afterStart(span);
@@ -93,6 +98,7 @@ public static AgentScope methodEnter(@Advice.Argument(0) final Message message)
9398
public static void methodExit(
9499
@Advice.Enter AgentScope scope, @Advice.Thrown final Throwable throwable) {
95100
if (null != scope) {
101+
CallDepthThreadLocalMap.reset(MessageListener.class);
96102
CONSUMER_DECORATE.onError(scope, throwable);
97103
scope.close();
98104
scope.span().finish();

0 commit comments

Comments
 (0)