Skip to content

Commit 11f90db

Browse files
adinauerclaude
andauthored
feat(core): Add API to clear scope feature flags (#5426)
* feat(core): Add API to clear scope feature flags Allow feature flags stored on a scope to be cleared without resetting other scope data. Scope.clear now also resets the feature flag buffer so stale flag evaluations do not carry over after clearing a scope. Fixes #5422 Co-Authored-By: Claude <noreply@anthropic.com> * changelog --------- Co-authored-by: Claude <noreply@anthropic.com>
1 parent 48cc9d8 commit 11f90db

13 files changed

Lines changed: 83 additions & 0 deletions

CHANGELOG.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44

55
### Features
66

7+
- Add API to clear feature flags from scopes ([#5426](https://github.com/getsentry/sentry-java/pull/5426))
78
- Add support to configure reporting historical ANRs via `AndroidManifest.xml` using the `io.sentry.anr.report-historical` attribute ([#5387](https://github.com/getsentry/sentry-java/pull/5387))
89

910
### Dependencies

sentry/api/sentry.api

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -273,6 +273,7 @@ public final class io/sentry/CombinedScopeView : io/sentry/IScope {
273273
public fun clear ()V
274274
public fun clearAttachments ()V
275275
public fun clearBreadcrumbs ()V
276+
public fun clearFeatureFlags ()V
276277
public fun clearSession ()V
277278
public fun clearTransaction ()V
278279
public fun clone ()Lio/sentry/IScope;
@@ -901,6 +902,7 @@ public abstract interface class io/sentry/IScope {
901902
public abstract fun clear ()V
902903
public abstract fun clearAttachments ()V
903904
public abstract fun clearBreadcrumbs ()V
905+
public abstract fun clearFeatureFlags ()V
904906
public abstract fun clearSession ()V
905907
public abstract fun clearTransaction ()V
906908
public abstract fun clone ()Lio/sentry/IScope;
@@ -1715,6 +1717,7 @@ public final class io/sentry/NoOpScope : io/sentry/IScope {
17151717
public fun clear ()V
17161718
public fun clearAttachments ()V
17171719
public fun clearBreadcrumbs ()V
1720+
public fun clearFeatureFlags ()V
17181721
public fun clearSession ()V
17191722
public fun clearTransaction ()V
17201723
public fun clone ()Lio/sentry/IScope;
@@ -2401,6 +2404,7 @@ public final class io/sentry/Scope : io/sentry/IScope {
24012404
public fun clear ()V
24022405
public fun clearAttachments ()V
24032406
public fun clearBreadcrumbs ()V
2407+
public fun clearFeatureFlags ()V
24042408
public fun clearSession ()V
24052409
public fun clearTransaction ()V
24062410
public fun clone ()Lio/sentry/IScope;
@@ -5039,6 +5043,7 @@ public final class io/sentry/exception/SentryHttpClientException : java/lang/Exc
50395043

50405044
public final class io/sentry/featureflags/FeatureFlagBuffer : io/sentry/featureflags/IFeatureFlagBuffer {
50415045
public fun add (Ljava/lang/String;Ljava/lang/Boolean;)V
5046+
public fun clear ()V
50425047
public fun clone ()Lio/sentry/featureflags/IFeatureFlagBuffer;
50435048
public synthetic fun clone ()Ljava/lang/Object;
50445049
public static fun create (Lio/sentry/SentryOptions;)Lio/sentry/featureflags/IFeatureFlagBuffer;
@@ -5048,13 +5053,15 @@ public final class io/sentry/featureflags/FeatureFlagBuffer : io/sentry/featuref
50485053

50495054
public abstract interface class io/sentry/featureflags/IFeatureFlagBuffer {
50505055
public abstract fun add (Ljava/lang/String;Ljava/lang/Boolean;)V
5056+
public abstract fun clear ()V
50515057
public abstract fun clone ()Lio/sentry/featureflags/IFeatureFlagBuffer;
50525058
public abstract fun getFeatureFlags ()Lio/sentry/protocol/FeatureFlags;
50535059
}
50545060

50555061
public final class io/sentry/featureflags/NoOpFeatureFlagBuffer : io/sentry/featureflags/IFeatureFlagBuffer {
50565062
public fun <init> ()V
50575063
public fun add (Ljava/lang/String;Ljava/lang/Boolean;)V
5064+
public fun clear ()V
50585065
public fun clone ()Lio/sentry/featureflags/IFeatureFlagBuffer;
50595066
public synthetic fun clone ()Ljava/lang/Object;
50605067
public fun getFeatureFlags ()Lio/sentry/protocol/FeatureFlags;
@@ -5063,6 +5070,7 @@ public final class io/sentry/featureflags/NoOpFeatureFlagBuffer : io/sentry/feat
50635070

50645071
public final class io/sentry/featureflags/SpanFeatureFlagBuffer : io/sentry/featureflags/IFeatureFlagBuffer {
50655072
public fun add (Ljava/lang/String;Ljava/lang/Boolean;)V
5073+
public fun clear ()V
50665074
public fun clone ()Lio/sentry/featureflags/IFeatureFlagBuffer;
50675075
public synthetic fun clone ()Ljava/lang/Object;
50685076
public static fun create ()Lio/sentry/featureflags/IFeatureFlagBuffer;

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

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -549,6 +549,11 @@ public void addFeatureFlag(final @Nullable String flag, final @Nullable Boolean
549549
}
550550
}
551551

552+
@Override
553+
public void clearFeatureFlags() {
554+
getDefaultWriteScope().clearFeatureFlags();
555+
}
556+
552557
@Override
553558
public @Nullable FeatureFlags getFeatureFlags() {
554559
return getFeatureFlagBuffer().getFeatureFlags();

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

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -465,6 +465,8 @@ void setSpanContext(
465465

466466
void addFeatureFlag(final @Nullable String flag, final @Nullable Boolean result);
467467

468+
void clearFeatureFlags();
469+
468470
@ApiStatus.Internal
469471
@Nullable
470472
FeatureFlags getFeatureFlags();

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

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -321,6 +321,9 @@ public void removeAttribute(@Nullable String key) {}
321321
@Override
322322
public void addFeatureFlag(final @Nullable String flag, final @Nullable Boolean result) {}
323323

324+
@Override
325+
public void clearFeatureFlags() {}
326+
324327
@Override
325328
public @Nullable FeatureFlags getFeatureFlags() {
326329
return null;

sentry/src/main/java/io/sentry/Scope.java

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -574,6 +574,7 @@ public void clear() {
574574
eventProcessors.clear();
575575
clearTransaction();
576576
clearAttachments();
577+
clearFeatureFlags();
577578
}
578579

579580
/**
@@ -1211,6 +1212,11 @@ public void addFeatureFlag(final @Nullable String flag, final @Nullable Boolean
12111212
featureFlags.add(flag, result);
12121213
}
12131214

1215+
@Override
1216+
public void clearFeatureFlags() {
1217+
featureFlags.clear();
1218+
}
1219+
12141220
@Override
12151221
public @Nullable FeatureFlags getFeatureFlags() {
12161222
return featureFlags.getFeatureFlags();

sentry/src/main/java/io/sentry/featureflags/FeatureFlagBuffer.java

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -69,6 +69,13 @@ public void add(final @Nullable String flag, final @Nullable Boolean result) {
6969
}
7070
}
7171

72+
@Override
73+
public void clear() {
74+
try (final @NotNull ISentryLifecycleToken ignored = lock.acquire()) {
75+
flags.clear();
76+
}
77+
}
78+
7279
@Override
7380
public @Nullable FeatureFlags getFeatureFlags() {
7481
List<FeatureFlag> featureFlags = new ArrayList<>();

sentry/src/main/java/io/sentry/featureflags/IFeatureFlagBuffer.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,8 @@
99
public interface IFeatureFlagBuffer {
1010
void add(final @Nullable String flag, final @Nullable Boolean result);
1111

12+
void clear();
13+
1214
@Nullable
1315
FeatureFlags getFeatureFlags();
1416

sentry/src/main/java/io/sentry/featureflags/NoOpFeatureFlagBuffer.java

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,9 @@ public static NoOpFeatureFlagBuffer getInstance() {
1616
@Override
1717
public void add(final @Nullable String flag, final @Nullable Boolean result) {}
1818

19+
@Override
20+
public void clear() {}
21+
1922
@Override
2023
public @Nullable FeatureFlags getFeatureFlags() {
2124
return null;

sentry/src/main/java/io/sentry/featureflags/SpanFeatureFlagBuffer.java

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -48,6 +48,13 @@ public void add(final @Nullable String flag, final @Nullable Boolean result) {
4848
}
4949
}
5050

51+
@Override
52+
public void clear() {
53+
try (final @NotNull ISentryLifecycleToken ignored = lock.acquire()) {
54+
flags = null;
55+
}
56+
}
57+
5158
@Override
5259
public @Nullable FeatureFlags getFeatureFlags() {
5360
try (final @NotNull ISentryLifecycleToken ignored = lock.acquire()) {

0 commit comments

Comments
 (0)