Skip to content

Commit 8cf3731

Browse files
committed
attach active span to scope
1 parent d2b5881 commit 8cf3731

File tree

13 files changed

+80
-12
lines changed

13 files changed

+80
-12
lines changed

sentry-opentelemetry/sentry-opentelemetry-extra/src/main/java/io/sentry/opentelemetry/SentryContextWrapper.java

Lines changed: 17 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -41,39 +41,44 @@ private <V> boolean isOpentelemetrySpan(final @NotNull ContextKey<V> contextKey)
4141
}
4242

4343
private static @NotNull Context forkCurrentScope(final @NotNull Context context) {
44+
final @Nullable OtelSpanWrapper sentrySpan = getCurrentSpanFromGlobalStorage(context);
45+
final @Nullable IScopes spanScopes = sentrySpan == null ? null : sentrySpan.getScopes();
46+
final @NotNull IScopes forkedScopes = forkCurrentScopeInternal(context, spanScopes);
47+
if (sentrySpan != null) {
48+
forkedScopes.setActiveSpan(sentrySpan);
49+
}
50+
return context.with(SENTRY_SCOPES_KEY, forkedScopes);
51+
}
52+
53+
private static @NotNull IScopes forkCurrentScopeInternal(
54+
final @NotNull Context context, final @Nullable IScopes spanScopes) {
4455
final @Nullable IScopes scopesInContext = context.get(SENTRY_SCOPES_KEY);
45-
final @Nullable IScopes spanScopes = getCurrentSpanScopesFromGlobalStorage(context);
4656

4757
if (scopesInContext != null && spanScopes != null) {
4858
if (scopesInContext.isAncestorOf(spanScopes)) {
49-
return context.with(
50-
SENTRY_SCOPES_KEY, spanScopes.forkedCurrentScope("contextwrapper.spanancestor"));
59+
return spanScopes.forkedCurrentScope("contextwrapper.spanancestor");
5160
}
5261
}
5362

5463
if (scopesInContext != null) {
55-
return context.with(
56-
SENTRY_SCOPES_KEY, scopesInContext.forkedCurrentScope("contextwrapper.scopeincontext"));
64+
return scopesInContext.forkedCurrentScope("contextwrapper.scopeincontext");
5765
}
5866

5967
if (spanScopes != null) {
60-
return context.with(
61-
SENTRY_SCOPES_KEY, spanScopes.forkedCurrentScope("contextwrapper.spanscope"));
68+
return spanScopes.forkedCurrentScope("contextwrapper.spanscope");
6269
}
6370

64-
return context.with(SENTRY_SCOPES_KEY, Sentry.forkedRootScopes("contextwrapper.fallback"));
71+
return Sentry.forkedRootScopes("contextwrapper.fallback");
6572
}
6673

67-
private static @Nullable IScopes getCurrentSpanScopesFromGlobalStorage(
74+
private static @Nullable OtelSpanWrapper getCurrentSpanFromGlobalStorage(
6875
final @NotNull Context context) {
6976
@Nullable final Span span = Span.fromContextOrNull(context);
7077

7178
if (span != null) {
7279
final @Nullable OtelSpanWrapper sentrySpan =
7380
SentryWeakSpanStorage.getInstance().getSentrySpan(span.getSpanContext());
74-
if (sentrySpan != null) {
75-
return sentrySpan.getScopes();
76-
}
81+
return sentrySpan;
7782
}
7883

7984
return null;

sentry/api/sentry.api

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -279,6 +279,7 @@ public final class io/sentry/CombinedScopeView : io/sentry/IScope {
279279
public fun removeExtra (Ljava/lang/String;)V
280280
public fun removeTag (Ljava/lang/String;)V
281281
public fun replaceOptions (Lio/sentry/SentryOptions;)V
282+
public fun setActiveSpan (Lio/sentry/ISpan;)V
282283
public fun setContexts (Ljava/lang/String;Ljava/lang/Boolean;)V
283284
public fun setContexts (Ljava/lang/String;Ljava/lang/Character;)V
284285
public fun setContexts (Ljava/lang/String;Ljava/lang/Number;)V
@@ -580,6 +581,7 @@ public final class io/sentry/HubAdapter : io/sentry/IHub {
580581
public fun removeExtra (Ljava/lang/String;)V
581582
public fun removeTag (Ljava/lang/String;)V
582583
public fun reportFullyDisplayed ()V
584+
public fun setActiveSpan (Lio/sentry/ISpan;)V
583585
public fun setExtra (Ljava/lang/String;Ljava/lang/String;)V
584586
public fun setFingerprint (Ljava/util/List;)V
585587
public fun setLevel (Lio/sentry/SentryLevel;)V
@@ -644,6 +646,7 @@ public final class io/sentry/HubScopesWrapper : io/sentry/IHub {
644646
public fun removeExtra (Ljava/lang/String;)V
645647
public fun removeTag (Ljava/lang/String;)V
646648
public fun reportFullyDisplayed ()V
649+
public fun setActiveSpan (Lio/sentry/ISpan;)V
647650
public fun setExtra (Ljava/lang/String;Ljava/lang/String;)V
648651
public fun setFingerprint (Ljava/util/List;)V
649652
public fun setLevel (Lio/sentry/SentryLevel;)V
@@ -770,6 +773,7 @@ public abstract interface class io/sentry/IScope {
770773
public abstract fun removeExtra (Ljava/lang/String;)V
771774
public abstract fun removeTag (Ljava/lang/String;)V
772775
public abstract fun replaceOptions (Lio/sentry/SentryOptions;)V
776+
public abstract fun setActiveSpan (Lio/sentry/ISpan;)V
773777
public abstract fun setContexts (Ljava/lang/String;Ljava/lang/Boolean;)V
774778
public abstract fun setContexts (Ljava/lang/String;Ljava/lang/Character;)V
775779
public abstract fun setContexts (Ljava/lang/String;Ljava/lang/Number;)V
@@ -876,6 +880,7 @@ public abstract interface class io/sentry/IScopes {
876880
public abstract fun removeTag (Ljava/lang/String;)V
877881
public fun reportFullDisplayed ()V
878882
public abstract fun reportFullyDisplayed ()V
883+
public abstract fun setActiveSpan (Lio/sentry/ISpan;)V
879884
public abstract fun setExtra (Ljava/lang/String;Ljava/lang/String;)V
880885
public abstract fun setFingerprint (Ljava/util/List;)V
881886
public abstract fun setLevel (Lio/sentry/SentryLevel;)V
@@ -1385,6 +1390,7 @@ public final class io/sentry/NoOpHub : io/sentry/IHub {
13851390
public fun removeExtra (Ljava/lang/String;)V
13861391
public fun removeTag (Ljava/lang/String;)V
13871392
public fun reportFullyDisplayed ()V
1393+
public fun setActiveSpan (Lio/sentry/ISpan;)V
13881394
public fun setExtra (Ljava/lang/String;Ljava/lang/String;)V
13891395
public fun setFingerprint (Ljava/util/List;)V
13901396
public fun setLevel (Lio/sentry/SentryLevel;)V
@@ -1447,6 +1453,7 @@ public final class io/sentry/NoOpScope : io/sentry/IScope {
14471453
public fun removeExtra (Ljava/lang/String;)V
14481454
public fun removeTag (Ljava/lang/String;)V
14491455
public fun replaceOptions (Lio/sentry/SentryOptions;)V
1456+
public fun setActiveSpan (Lio/sentry/ISpan;)V
14501457
public fun setContexts (Ljava/lang/String;Ljava/lang/Boolean;)V
14511458
public fun setContexts (Ljava/lang/String;Ljava/lang/Character;)V
14521459
public fun setContexts (Ljava/lang/String;Ljava/lang/Number;)V
@@ -1523,6 +1530,7 @@ public final class io/sentry/NoOpScopes : io/sentry/IScopes {
15231530
public fun removeExtra (Ljava/lang/String;)V
15241531
public fun removeTag (Ljava/lang/String;)V
15251532
public fun reportFullyDisplayed ()V
1533+
public fun setActiveSpan (Lio/sentry/ISpan;)V
15261534
public fun setExtra (Ljava/lang/String;Ljava/lang/String;)V
15271535
public fun setFingerprint (Ljava/util/List;)V
15281536
public fun setLevel (Lio/sentry/SentryLevel;)V
@@ -1919,6 +1927,7 @@ public final class io/sentry/Scope : io/sentry/IScope {
19191927
public fun removeExtra (Ljava/lang/String;)V
19201928
public fun removeTag (Ljava/lang/String;)V
19211929
public fun replaceOptions (Lio/sentry/SentryOptions;)V
1930+
public fun setActiveSpan (Lio/sentry/ISpan;)V
19221931
public fun setContexts (Ljava/lang/String;Ljava/lang/Boolean;)V
19231932
public fun setContexts (Ljava/lang/String;Ljava/lang/Character;)V
19241933
public fun setContexts (Ljava/lang/String;Ljava/lang/Number;)V
@@ -2038,6 +2047,7 @@ public final class io/sentry/Scopes : io/sentry/IScopes, io/sentry/metrics/Metri
20382047
public fun removeExtra (Ljava/lang/String;)V
20392048
public fun removeTag (Ljava/lang/String;)V
20402049
public fun reportFullyDisplayed ()V
2050+
public fun setActiveSpan (Lio/sentry/ISpan;)V
20412051
public fun setExtra (Ljava/lang/String;Ljava/lang/String;)V
20422052
public fun setFingerprint (Ljava/util/List;)V
20432053
public fun setLevel (Lio/sentry/SentryLevel;)V
@@ -2103,6 +2113,7 @@ public final class io/sentry/ScopesAdapter : io/sentry/IScopes {
21032113
public fun removeExtra (Ljava/lang/String;)V
21042114
public fun removeTag (Ljava/lang/String;)V
21052115
public fun reportFullyDisplayed ()V
2116+
public fun setActiveSpan (Lio/sentry/ISpan;)V
21062117
public fun setExtra (Ljava/lang/String;Ljava/lang/String;)V
21072118
public fun setFingerprint (Ljava/util/List;)V
21082119
public fun setLevel (Lio/sentry/SentryLevel;)V

sentry/src/main/java/io/sentry/CombinedScopeView.java

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -84,6 +84,11 @@ public void setTransaction(@NotNull String transaction) {
8484
return globalScope.getSpan();
8585
}
8686

87+
@Override
88+
public void setActiveSpan(final @Nullable ISpan span) {
89+
scope.setActiveSpan(span);
90+
}
91+
8792
@Override
8893
public void setTransaction(@Nullable ITransaction transaction) {
8994
getDefaultWriteScope().setTransaction(transaction);

sentry/src/main/java/io/sentry/HubAdapter.java

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -297,6 +297,11 @@ public void setSpanContext(
297297
return Sentry.getCurrentScopes().getSpan();
298298
}
299299

300+
@Override
301+
public void setActiveSpan(final @Nullable ISpan span) {
302+
Sentry.getCurrentScopes().setActiveSpan(span);
303+
}
304+
300305
@Override
301306
@ApiStatus.Internal
302307
public @Nullable ITransaction getTransaction() {

sentry/src/main/java/io/sentry/HubScopesWrapper.java

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -290,6 +290,11 @@ public void setSpanContext(
290290
return scopes.getSpan();
291291
}
292292

293+
@Override
294+
public void setActiveSpan(final @Nullable ISpan span) {
295+
scopes.setActiveSpan(span);
296+
}
297+
293298
@ApiStatus.Internal
294299
@Override
295300
public @Nullable ITransaction getTransaction() {

sentry/src/main/java/io/sentry/IScope.java

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -47,6 +47,9 @@ public interface IScope {
4747
@Nullable
4848
ISpan getSpan();
4949

50+
@ApiStatus.Internal
51+
void setActiveSpan(@Nullable ISpan span);
52+
5053
/**
5154
* Sets the current active transaction
5255
*

sentry/src/main/java/io/sentry/IScopes.java

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -614,6 +614,9 @@ void setSpanContext(
614614
@Nullable
615615
ISpan getSpan();
616616

617+
@ApiStatus.Internal
618+
void setActiveSpan(@Nullable ISpan span);
619+
617620
/**
618621
* Returns the transaction.
619622
*

sentry/src/main/java/io/sentry/NoOpHub.java

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -260,6 +260,9 @@ public void setSpanContext(
260260
return null;
261261
}
262262

263+
@Override
264+
public void setActiveSpan(final @Nullable ISpan span) {}
265+
263266
@Override
264267
public @Nullable ITransaction getTransaction() {
265268
return null;

sentry/src/main/java/io/sentry/NoOpScope.java

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -49,6 +49,9 @@ public void setTransaction(@NotNull String transaction) {}
4949
return null;
5050
}
5151

52+
@Override
53+
public void setActiveSpan(final @Nullable ISpan span) {}
54+
5255
@Override
5356
public void setTransaction(@Nullable ITransaction transaction) {}
5457

sentry/src/main/java/io/sentry/NoOpScopes.java

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -255,6 +255,9 @@ public void setSpanContext(
255255
return null;
256256
}
257257

258+
@Override
259+
public void setActiveSpan(final @Nullable ISpan span) {}
260+
258261
@Override
259262
public @Nullable ITransaction getTransaction() {
260263
return null;

0 commit comments

Comments
 (0)