Skip to content

Commit 7a4b72c

Browse files
committed
fix(sentry-tracing): switch sentry spans on enter and exit
1 parent 96b35c7 commit 7a4b72c

File tree

1 file changed

+36
-7
lines changed

1 file changed

+36
-7
lines changed

sentry-tracing/src/layer.rs

Lines changed: 36 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -221,15 +221,48 @@ where
221221
sentry_span.set_data(key, value);
222222
}
223223

224-
sentry_core::configure_scope(|scope| scope.set_span(Some(sentry_span.clone())));
225-
226224
let mut extensions = span.extensions_mut();
227225
extensions.insert(SentrySpanData {
228226
sentry_span,
229227
parent_sentry_span,
230228
});
231229
}
232230

231+
/// Sets entered span as *current* sentry span. A tracing span can be
232+
/// entered and existed multiple times, for example, when using a `tracing::Instrumented` future.
233+
fn on_enter(&self, id: &span::Id, ctx: Context<'_, S>) {
234+
let span = match ctx.span(&id) {
235+
Some(span) => span,
236+
None => return,
237+
};
238+
239+
let extensions = span.extensions();
240+
let SentrySpanData { sentry_span, .. } = match extensions.get::<SentrySpanData>() {
241+
Some(data) => data,
242+
None => return,
243+
};
244+
245+
sentry_core::configure_scope(|scope| scope.set_span(Some(sentry_span.clone())));
246+
}
247+
248+
/// Set exited span's parent as *current* sentry span.
249+
fn on_exit(&self, id: &span::Id, ctx: Context<'_, S>) {
250+
let span = match ctx.span(&id) {
251+
Some(span) => span,
252+
None => return,
253+
};
254+
255+
let extensions = span.extensions();
256+
let SentrySpanData {
257+
parent_sentry_span, ..
258+
} = match extensions.get::<SentrySpanData>() {
259+
Some(data) => data,
260+
None => return,
261+
};
262+
263+
sentry_core::configure_scope(|scope| scope.set_span(parent_sentry_span.clone()));
264+
}
265+
233266
/// When a span gets closed, finish the underlying sentry span, and set back
234267
/// its parent as the *current* sentry span.
235268
fn on_close(&self, id: span::Id, ctx: Context<'_, S>) {
@@ -239,16 +272,12 @@ where
239272
};
240273

241274
let mut extensions = span.extensions_mut();
242-
let SentrySpanData {
243-
sentry_span,
244-
parent_sentry_span,
245-
} = match extensions.remove::<SentrySpanData>() {
275+
let SentrySpanData { sentry_span, .. } = match extensions.remove::<SentrySpanData>() {
246276
Some(data) => data,
247277
None => return,
248278
};
249279

250280
sentry_span.finish();
251-
sentry_core::configure_scope(|scope| scope.set_span(parent_sentry_span));
252281
}
253282

254283
/// Implement the writing of extra data to span

0 commit comments

Comments
 (0)