Skip to content

Commit c32340a

Browse files
committed
RUM-9899: Fix root span removal
1 parent 3a1eb9a commit c32340a

File tree

3 files changed

+32
-3
lines changed

3 files changed

+32
-3
lines changed

features/dd-sdk-android-trace-internal/api/dd-sdk-android-trace-internal.api

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3004,7 +3004,6 @@ public class com/datadog/trace/core/PendingTrace : com/datadog/trace/bootstrap/i
30043004
public fun setSamplingPriorityIfNecessary ()V
30053005
public fun size ()I
30063006
public fun touch ()V
3007-
public fun unregisterSpan (Lcom/datadog/trace/core/DDSpan;)V
30083007
public fun write ()V
30093008
public fun writeOnBufferFull ()Z
30103009
}

features/dd-sdk-android-trace-internal/src/main/java/com/datadog/trace/core/PendingTrace.java

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -223,9 +223,8 @@ void registerSpan(final DDSpan span) {
223223
}
224224
}
225225

226-
public void unregisterSpan(final DDSpan span){
226+
void unregisterSpan(final DDSpan span){
227227
PENDING_REFERENCE_COUNT.decrementAndGet(this);
228-
ROOT_SPAN.compareAndSet(this, span, null);
229228
if (pendingTraceBuffer.longRunningSpansEnabled()){
230229
spans.remove(span);
231230
}

features/dd-sdk-android-trace-internal/src/test/kotlin/com/datadog/trace/core/PendingTraceTest.kt

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -187,6 +187,37 @@ internal class PendingTraceTest : PendingTraceTestBase() {
187187
assertThat(trace.spans).containsExactlyInAnyOrder(unfinishedSpan, unfinishedSpan2)
188188
}
189189

190+
@Test
191+
fun `do not drop root span when drop is called`() {
192+
// Given
193+
val tracer = mock<CoreTracer>()
194+
val traceConfig = mock<CoreTracer.ConfigSnapshot>()
195+
val buffer = mock<PendingTraceBuffer>()
196+
val healthMetrics = mock<HealthMetrics>()
197+
whenever(tracer.captureTraceConfig()).thenReturn(traceConfig)
198+
whenever(traceConfig.serviceMapping).thenReturn(emptyMap())
199+
val trace = createInstanceWithoutTypeCheck(
200+
PendingTrace::class.java,
201+
tracer,
202+
DDTraceId.from(0),
203+
buffer,
204+
mock<TimeSource>(),
205+
mock<ConfigSnapshot>(),
206+
false,
207+
healthMetrics
208+
)
209+
rootSpan = createSimpleSpan(trace)
210+
trace.registerSpan(rootSpan)
211+
212+
// When
213+
trace.unregisterSpan(rootSpan)
214+
215+
// Then
216+
assertThat(trace.pendingReferenceCount).isEqualTo(0)
217+
assertThat(trace.spans).isEmpty()
218+
assertThat(trace.rootSpan).isEqualTo(rootSpan)
219+
}
220+
190221
private fun createSimpleSpan(trace: PendingTrace): DDSpan {
191222
return createSimpleSpanWithID(trace, 1)
192223
}

0 commit comments

Comments
 (0)