Skip to content

Commit 28dc62b

Browse files
committed
fix: add non panicking version of FinishedSpan::consume
1 parent ddcf5f9 commit 28dc62b

File tree

1 file changed

+14
-8
lines changed

1 file changed

+14
-8
lines changed

opentelemetry-sdk/src/trace/span.rs

Lines changed: 14 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -294,7 +294,7 @@ impl FinishedSpan {
294294
pub fn new(span_data: crate::trace::SpanData) -> Self {
295295
FinishedSpan {
296296
span: Some(span_data),
297-
is_last_processor: false,
297+
is_last_processor: true,
298298
is_consumed: false,
299299
}
300300
}
@@ -314,16 +314,22 @@ impl FinishedSpan {
314314
if self.is_consumed {
315315
opentelemetry::otel_error!(name: "FinishedSpan.ConsumeTwice", message = "consume called twice on FinishedSpan in the same span processor");
316316
}
317+
self.try_consume()
318+
.expect("Span data has already been consumed")
319+
}
320+
321+
/// Takes ownership of the span data in the `FinishedSpan`.
322+
///
323+
/// Returns `None` if the span data has already been consumed.
324+
pub fn try_consume(&mut self) -> Option<crate::trace::SpanData> {
325+
if self.is_consumed {
326+
return None;
327+
}
317328
self.is_consumed = true;
318329
if self.is_last_processor {
319-
self.span
320-
.take()
321-
.expect("Span data has already been consumed")
330+
self.span.take()
322331
} else {
323-
self.span
324-
.as_ref()
325-
.expect("Span data has already been consumed")
326-
.clone()
332+
self.span.clone()
327333
}
328334
}
329335
}

0 commit comments

Comments
 (0)