Skip to content

Commit 5ca22e4

Browse files
authored
Fix span decoration probe EMITTING status (#7569)
Don't emit the status when no tag are set for the span
1 parent 3eb330d commit 5ca22e4

File tree

2 files changed

+23
-1
lines changed

2 files changed

+23
-1
lines changed

dd-java-agent/agent-debugger/src/main/java/com/datadog/debugger/probe/SpanDecorationProbe.java

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -232,7 +232,10 @@ private void decorateTags(SpanDecorationStatus status) {
232232
for (Pair<String, String> tag : tagsToDecorate) {
233233
agentSpan.setTag(tag.getLeft(), tag.getRight());
234234
}
235-
DebuggerAgent.getSink().getProbeStatusSink().addEmitting(probeId);
235+
if (!tagsToDecorate.isEmpty()) {
236+
// only send EMITTING status if we set at least one tag
237+
DebuggerAgent.getSink().getProbeStatusSink().addEmitting(probeId);
238+
}
236239
}
237240

238241
private void handleEvaluationErrors(SpanDecorationStatus status) {

dd-java-agent/agent-debugger/src/test/java/com/datadog/debugger/agent/SpanDecorationProbeInstrumentationTest.java

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@
1515
import static org.junit.jupiter.api.Assertions.assertNull;
1616
import static org.junit.jupiter.api.Assertions.assertTrue;
1717
import static org.mockito.Mockito.mock;
18+
import static org.mockito.Mockito.times;
1819
import static org.mockito.Mockito.verify;
1920
import static org.mockito.Mockito.when;
2021
import static utils.InstrumentationTestHelper.compileAndLoadClass;
@@ -155,6 +156,24 @@ public void methodActiveSpanCondition() throws IOException, URISyntaxException {
155156
assertEquals("5", span.getTags().get("tag1"));
156157
}
157158

159+
@Test
160+
public void methodActiveSpanConditionFalse() throws IOException, URISyntaxException {
161+
final String CLASS_NAME = "com.datadog.debugger.CapturedSnapshot20";
162+
SpanDecorationProbe.Decoration decoration =
163+
createDecoration(eq(ref("arg"), value("5")), "arg == '5'", "tag1", "{arg}");
164+
installSingleSpanDecoration(
165+
CLASS_NAME, ACTIVE, decoration, "process", "int (java.lang.String)");
166+
Class<?> testClass = compileAndLoadClass(CLASS_NAME);
167+
int result = Reflect.on(testClass).call("main", "0").get();
168+
assertEquals(84, result);
169+
assertEquals(1, traceInterceptor.getAllTraces().size());
170+
MutableSpan span = traceInterceptor.getAllTraces().get(0).get(0);
171+
// probe executed, but no tag set
172+
assertFalse(span.getTags().containsKey("tag1"));
173+
// EMITTING status is not sent
174+
verify(probeStatusSink, times(0)).addEmitting(ArgumentMatchers.eq(PROBE_ID));
175+
}
176+
158177
@Test
159178
public void methodTagEvalError() throws IOException, URISyntaxException {
160179
final String CLASS_NAME = "com.datadog.debugger.CapturedSnapshot20";

0 commit comments

Comments
 (0)