Skip to content

Commit a183d30

Browse files
committed
Ensure that invalid spans/traces to not trigger snapshot registration.
1 parent b9facdd commit a183d30

File tree

4 files changed

+51
-30
lines changed

4 files changed

+51
-30
lines changed

profiler/src/main/java/com/splunk/opentelemetry/profiler/snapshot/SnapshotProfilingSignalPropagator.java

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -50,8 +50,12 @@ public <C> void inject(Context context, C carrier, TextMapSetter<C> setter) {
5050
@Override
5151
public <C> Context extract(Context context, C carrier, TextMapGetter<C> getter) {
5252
Volume volume = Volume.fromString(getter.get(carrier, PROFILING_SIGNAL));
53+
if (volume == Volume.OFF) {
54+
return context;
55+
}
56+
5357
SpanContext spanContext = Span.fromContext(context).getSpanContext();
54-
if (volume == Volume.HIGHEST) {
58+
if (spanContext.isValid()) {
5559
registry.register(spanContext);
5660
}
5761
return context;

profiler/src/test/java/com/splunk/opentelemetry/profiler/snapshot/DistributedProfilingSignalTest.java

Lines changed: 0 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -23,11 +23,7 @@
2323
import com.splunk.opentelemetry.profiler.snapshot.simulation.ExitCall;
2424
import com.splunk.opentelemetry.profiler.snapshot.simulation.Message;
2525
import com.splunk.opentelemetry.profiler.snapshot.simulation.Server;
26-
import io.opentelemetry.api.trace.SpanContext;
2726
import java.time.Duration;
28-
import java.util.Collections;
29-
import java.util.HashSet;
30-
import java.util.Set;
3127
import java.util.function.UnaryOperator;
3228
import org.junit.jupiter.api.Test;
3329
import org.junit.jupiter.api.extension.RegisterExtension;
@@ -88,28 +84,4 @@ private UnaryOperator<Message> delayOf(Duration duration) {
8884
}
8985
};
9086
}
91-
92-
private static class RecordingTraceRegistry extends TraceRegistry {
93-
private final Set<String> registeredTraceIds = new HashSet<>();
94-
95-
@Override
96-
public void register(SpanContext spanContext) {
97-
registeredTraceIds.add(spanContext.getTraceId());
98-
super.register(spanContext);
99-
}
100-
101-
@Override
102-
public boolean isRegistered(SpanContext spanContext) {
103-
return super.isRegistered(spanContext);
104-
}
105-
106-
@Override
107-
public void unregister(SpanContext spanContext) {
108-
super.unregister(spanContext);
109-
}
110-
111-
Set<String> registeredTraceIds() {
112-
return Collections.unmodifiableSet(registeredTraceIds);
113-
}
114-
}
11587
}
Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
package com.splunk.opentelemetry.profiler.snapshot;
2+
3+
import io.opentelemetry.api.trace.SpanContext;
4+
5+
import java.util.Collections;
6+
import java.util.HashSet;
7+
import java.util.Set;
8+
9+
/**
10+
* Test only version of {@link TraceRegistry} that keeps a record of every trace ID registered over
11+
* the lifetime of the instance.
12+
*/
13+
class RecordingTraceRegistry extends TraceRegistry {
14+
private final Set<String> registeredTraceIds = new HashSet<>();
15+
16+
@Override
17+
public void register(SpanContext spanContext) {
18+
registeredTraceIds.add(spanContext.getTraceId());
19+
super.register(spanContext);
20+
}
21+
22+
@Override
23+
public boolean isRegistered(SpanContext spanContext) {
24+
return super.isRegistered(spanContext);
25+
}
26+
27+
@Override
28+
public void unregister(SpanContext spanContext) {
29+
super.unregister(spanContext);
30+
}
31+
32+
Set<String> registeredTraceIds() {
33+
return Collections.unmodifiableSet(registeredTraceIds);
34+
}
35+
}

profiler/src/test/java/com/splunk/opentelemetry/profiler/snapshot/SnapshotProfilingSignalPropagatorTest.java

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,7 @@ class SnapshotProfilingSignalPropagatorTest {
3232

3333
@RegisterExtension public final ObservableCarrier carrier = new ObservableCarrier();
3434

35-
private final TraceRegistry registry = new TraceRegistry();
35+
private final RecordingTraceRegistry registry = new RecordingTraceRegistry();
3636
private final SnapshotProfilingSignalPropagator propagator =
3737
new SnapshotProfilingSignalPropagator(registry);
3838

@@ -105,6 +105,16 @@ void doNotRegisterTraceForProfilingWhenTraceSnapshotVolumeIsMissing(Tracer trace
105105
assertThat(registry.isRegistered(span.getSpanContext())).isFalse();
106106
}
107107

108+
@Test
109+
void doNotRegisterTraceForProfilingWhenSpanIsNotFoundInContext() {
110+
carrier.set("splunk.trace.snapshot.volume", Volume.HIGHEST.toString());
111+
var context = Context.current();
112+
113+
propagator.extract(context, carrier, carrier);
114+
115+
assertEquals(Collections.emptySet(), registry.registeredTraceIds());
116+
}
117+
108118
@Test
109119
void extractReturnsProvidedContextWhenNotRegisteringTraceForProfiling(Tracer tracer) {
110120
var span = tracer.spanBuilder("span").startSpan();

0 commit comments

Comments
 (0)