Skip to content

Commit 6ee5169

Browse files
authored
Hubs / Scopes Merge 18 - Implement pushScope ,popScope and withScope for Scopes (#3321)
* replace hub with scopes * Add Scopes * Introduce `IScopes` interface. * Replace `IHub` with `IScopes` in core * Replace `IHub` with `IScopes` in android core * Replace `IHub` with `IScopes` in android integrations * Replace `IHub` with `IScopes` in apollo integrations * Replace `IHub` with `IScopes` in okhttp integration * Replace `IHub` with `IScopes` in graphql integration * Replace `IHub` with `IScopes` in logging integrations * Replace `IHub` with `IScopes` in more integrations * Replace `IHub` with `IScopes` in OTel integration * Replace `IHub` with `IScopes` in Spring 5 / Spring Boot 2 integrations * Replace `IHub` with `IScopes` in Spring 6 / Spring Boot 3 integrations * Replace `IHub` with `IScopes` in samples * gitscopes -> github * Replace ThreadLocal with ScopesStorage * Move client and throwable to span map to scope * Add global scope * use global scope in Scopes * Implement pushScope popScope and withScope for Scopes
1 parent 6390bc6 commit 6ee5169

File tree

14 files changed

+106
-38
lines changed

14 files changed

+106
-38
lines changed

sentry-spring-jakarta/src/test/kotlin/io/sentry/spring/jakarta/webflux/SentryWebFluxTracingFilterTest.kt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -252,10 +252,10 @@ class SentryWebFluxTracingFilterTest {
252252
verify(fixture.scopes, times(3)).isEnabled
253253
verify(fixture.scopes, times(2)).options
254254
verify(fixture.scopes).continueTrace(anyOrNull(), anyOrNull())
255-
verify(fixture.scopes).pushScope()
255+
verify(fixture.scopes).pushScope() // TODO don't
256256
verify(fixture.scopes).addBreadcrumb(any<Breadcrumb>(), any<Hint>())
257257
verify(fixture.scopes).configureScope(any<ScopeCallback>())
258-
verify(fixture.scopes).popScope()
258+
verify(fixture.scopes).popScope() // TODO don't
259259
verifyNoMoreInteractions(fixture.scopes)
260260
}
261261
}

sentry-spring/src/main/java/io/sentry/spring/webflux/SentryWebFilter.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -81,7 +81,7 @@ isTracingEnabled && shouldTraceRequest(requestHub, request)
8181
if (transaction != null) {
8282
finishTransaction(serverWebExchange, transaction);
8383
}
84-
requestHub.popScope();
84+
requestHub.popScope(); // TODO don't
8585
// TODO token based cleanup instead?
8686
Sentry.setCurrentScopes(NoOpScopes.getInstance());
8787
})
@@ -96,7 +96,7 @@ isTracingEnabled && shouldTraceRequest(requestHub, request)
9696
() -> {
9797
serverWebExchange.getAttributes().put(SENTRY_SCOPES_KEY, requestHub);
9898
Sentry.setCurrentScopes(requestHub);
99-
requestHub.pushScope();
99+
requestHub.pushScope(); // TODO don't
100100
final ServerHttpResponse response = serverWebExchange.getResponse();
101101

102102
final Hint hint = new Hint();

sentry-spring/src/test/kotlin/io/sentry/spring/webflux/SentryWebFluxTracingFilterTest.kt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -253,10 +253,10 @@ class SentryWebFluxTracingFilterTest {
253253
verify(fixture.scopes).isEnabled
254254
verify(fixture.scopes, times(2)).options
255255
verify(fixture.scopes).continueTrace(anyOrNull(), anyOrNull())
256-
verify(fixture.scopes).pushScope()
256+
verify(fixture.scopes).pushScope() // TODO don't
257257
verify(fixture.scopes).addBreadcrumb(any<Breadcrumb>(), any<Hint>())
258258
verify(fixture.scopes).configureScope(any<ScopeCallback>())
259-
verify(fixture.scopes).popScope()
259+
verify(fixture.scopes).popScope() // TODO don't
260260
verifyNoMoreInteractions(fixture.scopes)
261261
}
262262
}

sentry/api/sentry.api

Lines changed: 63 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -456,7 +456,7 @@ public final class io/sentry/Hub : io/sentry/IHub, io/sentry/metrics/MetricsApi$
456456
public fun isHealthy ()Z
457457
public fun metrics ()Lio/sentry/metrics/MetricsApi;
458458
public fun popScope ()V
459-
public fun pushScope ()V
459+
public fun pushScope ()Lio/sentry/ISentryLifecycleToken;
460460
public fun removeExtra (Ljava/lang/String;)V
461461
public fun removeTag (Ljava/lang/String;)V
462462
public fun reportFullyDisplayed ()V
@@ -510,7 +510,60 @@ public final class io/sentry/HubAdapter : io/sentry/IHub {
510510
public fun isHealthy ()Z
511511
public fun metrics ()Lio/sentry/metrics/MetricsApi;
512512
public fun popScope ()V
513-
public fun pushScope ()V
513+
public fun pushScope ()Lio/sentry/ISentryLifecycleToken;
514+
public fun removeExtra (Ljava/lang/String;)V
515+
public fun removeTag (Ljava/lang/String;)V
516+
public fun reportFullyDisplayed ()V
517+
public fun setExtra (Ljava/lang/String;Ljava/lang/String;)V
518+
public fun setFingerprint (Ljava/util/List;)V
519+
public fun setLevel (Lio/sentry/SentryLevel;)V
520+
public fun setSpanContext (Ljava/lang/Throwable;Lio/sentry/ISpan;Ljava/lang/String;)V
521+
public fun setTag (Ljava/lang/String;Ljava/lang/String;)V
522+
public fun setTransaction (Ljava/lang/String;)V
523+
public fun setUser (Lio/sentry/protocol/User;)V
524+
public fun startSession ()V
525+
public fun startTransaction (Lio/sentry/TransactionContext;Lio/sentry/TransactionOptions;)Lio/sentry/ITransaction;
526+
public fun traceHeaders ()Lio/sentry/SentryTraceHeader;
527+
public fun withScope (Lio/sentry/ScopeCallback;)V
528+
}
529+
530+
public final class io/sentry/HubScopesWrapper : io/sentry/IHub {
531+
public fun <init> (Lio/sentry/IScopes;)V
532+
public fun addBreadcrumb (Lio/sentry/Breadcrumb;)V
533+
public fun addBreadcrumb (Lio/sentry/Breadcrumb;Lio/sentry/Hint;)V
534+
public fun bindClient (Lio/sentry/ISentryClient;)V
535+
public fun captureCheckIn (Lio/sentry/CheckIn;)Lio/sentry/protocol/SentryId;
536+
public fun captureEnvelope (Lio/sentry/SentryEnvelope;Lio/sentry/Hint;)Lio/sentry/protocol/SentryId;
537+
public fun captureEvent (Lio/sentry/SentryEvent;Lio/sentry/Hint;)Lio/sentry/protocol/SentryId;
538+
public fun captureEvent (Lio/sentry/SentryEvent;Lio/sentry/Hint;Lio/sentry/ScopeCallback;)Lio/sentry/protocol/SentryId;
539+
public fun captureException (Ljava/lang/Throwable;Lio/sentry/Hint;)Lio/sentry/protocol/SentryId;
540+
public fun captureException (Ljava/lang/Throwable;Lio/sentry/Hint;Lio/sentry/ScopeCallback;)Lio/sentry/protocol/SentryId;
541+
public fun captureMessage (Ljava/lang/String;Lio/sentry/SentryLevel;)Lio/sentry/protocol/SentryId;
542+
public fun captureMessage (Ljava/lang/String;Lio/sentry/SentryLevel;Lio/sentry/ScopeCallback;)Lio/sentry/protocol/SentryId;
543+
public fun captureTransaction (Lio/sentry/protocol/SentryTransaction;Lio/sentry/TraceContext;Lio/sentry/Hint;Lio/sentry/ProfilingTraceData;)Lio/sentry/protocol/SentryId;
544+
public fun captureUserFeedback (Lio/sentry/UserFeedback;)V
545+
public fun clearBreadcrumbs ()V
546+
public fun clone ()Lio/sentry/IHub;
547+
public synthetic fun clone ()Ljava/lang/Object;
548+
public fun close ()V
549+
public fun close (Z)V
550+
public fun configureScope (Lio/sentry/ScopeCallback;)V
551+
public fun continueTrace (Ljava/lang/String;Ljava/util/List;)Lio/sentry/TransactionContext;
552+
public fun endSession ()V
553+
public fun flush (J)V
554+
public fun getBaggage ()Lio/sentry/BaggageHeader;
555+
public fun getLastEventId ()Lio/sentry/protocol/SentryId;
556+
public fun getOptions ()Lio/sentry/SentryOptions;
557+
public fun getRateLimiter ()Lio/sentry/transport/RateLimiter;
558+
public fun getSpan ()Lio/sentry/ISpan;
559+
public fun getTraceparent ()Lio/sentry/SentryTraceHeader;
560+
public fun getTransaction ()Lio/sentry/ITransaction;
561+
public fun isCrashedLastRun ()Ljava/lang/Boolean;
562+
public fun isEnabled ()Z
563+
public fun isHealthy ()Z
564+
public fun metrics ()Lio/sentry/metrics/MetricsApi;
565+
public fun popScope ()V
566+
public fun pushScope ()Lio/sentry/ISentryLifecycleToken;
514567
public fun removeExtra (Ljava/lang/String;)V
515568
public fun removeTag (Ljava/lang/String;)V
516569
public fun reportFullyDisplayed ()V
@@ -781,7 +834,7 @@ public abstract interface class io/sentry/IScopes {
781834
public fun isNoOp ()Z
782835
public abstract fun metrics ()Lio/sentry/metrics/MetricsApi;
783836
public abstract fun popScope ()V
784-
public abstract fun pushScope ()V
837+
public abstract fun pushScope ()Lio/sentry/ISentryLifecycleToken;
785838
public abstract fun removeExtra (Ljava/lang/String;)V
786839
public abstract fun removeTag (Ljava/lang/String;)V
787840
public fun reportFullDisplayed ()V
@@ -1271,7 +1324,7 @@ public final class io/sentry/NoOpHub : io/sentry/IHub {
12711324
public fun isNoOp ()Z
12721325
public fun metrics ()Lio/sentry/metrics/MetricsApi;
12731326
public fun popScope ()V
1274-
public fun pushScope ()V
1327+
public fun pushScope ()Lio/sentry/ISentryLifecycleToken;
12751328
public fun removeExtra (Ljava/lang/String;)V
12761329
public fun removeTag (Ljava/lang/String;)V
12771330
public fun reportFullyDisplayed ()V
@@ -1396,7 +1449,7 @@ public final class io/sentry/NoOpScopes : io/sentry/IScopes {
13961449
public fun isNoOp ()Z
13971450
public fun metrics ()Lio/sentry/metrics/MetricsApi;
13981451
public fun popScope ()V
1399-
public fun pushScope ()V
1452+
public fun pushScope ()Lio/sentry/ISentryLifecycleToken;
14001453
public fun removeExtra (Ljava/lang/String;)V
14011454
public fun removeTag (Ljava/lang/String;)V
14021455
public fun reportFullyDisplayed ()V
@@ -1869,9 +1922,10 @@ public final class io/sentry/Scopes : io/sentry/IScopes, io/sentry/metrics/Metri
18691922
public fun isCrashedLastRun ()Ljava/lang/Boolean;
18701923
public fun isEnabled ()Z
18711924
public fun isHealthy ()Z
1925+
public fun makeCurrent ()Lio/sentry/ISentryLifecycleToken;
18721926
public fun metrics ()Lio/sentry/metrics/MetricsApi;
18731927
public fun popScope ()V
1874-
public fun pushScope ()V
1928+
public fun pushScope ()Lio/sentry/ISentryLifecycleToken;
18751929
public fun removeExtra (Ljava/lang/String;)V
18761930
public fun removeTag (Ljava/lang/String;)V
18771931
public fun reportFullyDisplayed ()V
@@ -1925,7 +1979,7 @@ public final class io/sentry/ScopesAdapter : io/sentry/IScopes {
19251979
public fun isHealthy ()Z
19261980
public fun metrics ()Lio/sentry/metrics/MetricsApi;
19271981
public fun popScope ()V
1928-
public fun pushScope ()V
1982+
public fun pushScope ()Lio/sentry/ISentryLifecycleToken;
19291983
public fun removeExtra (Ljava/lang/String;)V
19301984
public fun removeTag (Ljava/lang/String;)V
19311985
public fun reportFullyDisplayed ()V
@@ -2020,13 +2074,13 @@ public final class io/sentry/Sentry {
20202074
public static fun isHealthy ()Z
20212075
public static fun metrics ()Lio/sentry/metrics/MetricsApi;
20222076
public static fun popScope ()V
2023-
public static fun pushScope ()V
2077+
public static fun pushScope ()Lio/sentry/ISentryLifecycleToken;
20242078
public static fun removeExtra (Ljava/lang/String;)V
20252079
public static fun removeTag (Ljava/lang/String;)V
20262080
public static fun reportFullDisplayed ()V
20272081
public static fun reportFullyDisplayed ()V
20282082
public static fun setCurrentHub (Lio/sentry/IHub;)V
2029-
public static fun setCurrentScopes (Lio/sentry/IScopes;)V
2083+
public static fun setCurrentScopes (Lio/sentry/IScopes;)Lio/sentry/ISentryLifecycleToken;
20302084
public static fun setExtra (Ljava/lang/String;Ljava/lang/String;)V
20312085
public static fun setFingerprint (Ljava/util/List;)V
20322086
public static fun setLevel (Lio/sentry/SentryLevel;)V

sentry/src/main/java/io/sentry/Hub.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -526,7 +526,7 @@ public void removeExtra(final @NotNull String key) {
526526
}
527527

528528
@Override
529-
public void pushScope() {
529+
public @NotNull ISentryLifecycleToken pushScope() {
530530
if (!isEnabled()) {
531531
options
532532
.getLogger()
@@ -536,6 +536,7 @@ public void pushScope() {
536536
final StackItem newItem = new StackItem(options, item.getClient(), item.getScope().clone());
537537
stack.push(newItem);
538538
}
539+
return NoOpScopesStorage.NoOpScopesLifecycleToken.getInstance();
539540
}
540541

541542
@Override

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

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -154,8 +154,8 @@ public void removeExtra(@NotNull String key) {
154154
}
155155

156156
@Override
157-
public void pushScope() {
158-
Sentry.pushScope();
157+
public @NotNull ISentryLifecycleToken pushScope() {
158+
return Sentry.pushScope();
159159
}
160160

161161
@Override

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

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -149,8 +149,8 @@ public void removeExtra(@NotNull String key) {
149149
}
150150

151151
@Override
152-
public void pushScope() {
153-
scopes.pushScope();
152+
public @NotNull ISentryLifecycleToken pushScope() {
153+
return scopes.pushScope();
154154
}
155155

156156
@Override

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

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -306,7 +306,8 @@ default void addBreadcrumb(@NotNull String message, @NotNull String category) {
306306
SentryId getLastEventId();
307307

308308
/** Pushes a new scope while inheriting the current scope's data. */
309-
void pushScope();
309+
@NotNull
310+
ISentryLifecycleToken pushScope();
310311

311312
/** Removes the first scope */
312313
void popScope();

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

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -124,7 +124,9 @@ public void removeExtra(@NotNull String key) {}
124124
}
125125

126126
@Override
127-
public void pushScope() {}
127+
public @NotNull ISentryLifecycleToken pushScope() {
128+
return NoOpScopesStorage.NoOpScopesLifecycleToken.getInstance();
129+
}
128130

129131
@Override
130132
public void popScope() {}

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

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -122,7 +122,9 @@ public void removeExtra(@NotNull String key) {}
122122
}
123123

124124
@Override
125-
public void pushScope() {}
125+
public @NotNull ISentryLifecycleToken pushScope() {
126+
return NoOpScopesStorage.NoOpScopesLifecycleToken.getInstance();
127+
}
126128

127129
@Override
128130
public void popScope() {}

0 commit comments

Comments
 (0)