Skip to content

Commit 5f39eb5

Browse files
adinauerclaude
andcommitted
feat(core): [Cache Tracing 2] Add enableCacheTracing option
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
1 parent 8925435 commit 5f39eb5

File tree

7 files changed

+82
-1
lines changed

7 files changed

+82
-1
lines changed

sentry-spring-7/src/main/java/io/sentry/spring7/cache/SentryCacheWrapper.java

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -213,6 +213,10 @@ public boolean invalidate() {
213213
}
214214

215215
private @Nullable ISpan startSpan(final @NotNull String operation, final @Nullable Object key) {
216+
if (!scopes.getOptions().isEnableCacheTracing()) {
217+
return null;
218+
}
219+
216220
final ISpan activeSpan = scopes.getSpan();
217221
if (activeSpan == null || activeSpan.isNoOp()) {
218222
return null;

sentry-spring-7/src/test/kotlin/io/sentry/spring7/cache/SentryCacheWrapperTest.kt

Lines changed: 18 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,12 +22,14 @@ class SentryCacheWrapperTest {
2222

2323
private lateinit var scopes: IScopes
2424
private lateinit var delegate: Cache
25+
private lateinit var options: SentryOptions
2526

2627
@BeforeTest
2728
fun setup() {
2829
scopes = mock()
2930
delegate = mock()
30-
whenever(scopes.options).thenReturn(SentryOptions())
31+
options = SentryOptions().apply { isEnableCacheTracing = true }
32+
whenever(scopes.options).thenReturn(options)
3133
whenever(delegate.name).thenReturn("testCache")
3234
}
3335

@@ -223,6 +225,21 @@ class SentryCacheWrapperTest {
223225
verify(delegate).get("myKey")
224226
}
225227

228+
// -- no span when option is disabled --
229+
230+
@Test
231+
fun `does not create span when enableCacheTracing is false`() {
232+
options.isEnableCacheTracing = false
233+
val tx = createTransaction()
234+
val wrapper = SentryCacheWrapper(delegate, scopes)
235+
whenever(delegate.get("myKey")).thenReturn(null)
236+
237+
wrapper.get("myKey")
238+
239+
verify(delegate).get("myKey")
240+
assertEquals(0, tx.spans.size)
241+
}
242+
226243
// -- error handling --
227244

228245
@Test

sentry/api/sentry.api

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -512,6 +512,7 @@ public final class io/sentry/ExternalOptions {
512512
public fun getTracesSampleRate ()Ljava/lang/Double;
513513
public fun isCaptureOpenTelemetryEvents ()Ljava/lang/Boolean;
514514
public fun isEnableBackpressureHandling ()Ljava/lang/Boolean;
515+
public fun isEnableCacheTracing ()Ljava/lang/Boolean;
515516
public fun isEnableDatabaseTransactionTracing ()Ljava/lang/Boolean;
516517
public fun isEnableLogs ()Ljava/lang/Boolean;
517518
public fun isEnableMetrics ()Ljava/lang/Boolean;
@@ -528,6 +529,7 @@ public final class io/sentry/ExternalOptions {
528529
public fun setDist (Ljava/lang/String;)V
529530
public fun setDsn (Ljava/lang/String;)V
530531
public fun setEnableBackpressureHandling (Ljava/lang/Boolean;)V
532+
public fun setEnableCacheTracing (Ljava/lang/Boolean;)V
531533
public fun setEnableDatabaseTransactionTracing (Ljava/lang/Boolean;)V
532534
public fun setEnableDeduplication (Ljava/lang/Boolean;)V
533535
public fun setEnableLogs (Ljava/lang/Boolean;)V
@@ -3598,6 +3600,7 @@ public class io/sentry/SentryOptions {
35983600
public fun isEnableAppStartProfiling ()Z
35993601
public fun isEnableAutoSessionTracking ()Z
36003602
public fun isEnableBackpressureHandling ()Z
3603+
public fun isEnableCacheTracing ()Z
36013604
public fun isEnableDatabaseTransactionTracing ()Z
36023605
public fun isEnableDeduplication ()Z
36033606
public fun isEnableEventSizeLimiting ()Z
@@ -3656,6 +3659,7 @@ public class io/sentry/SentryOptions {
36563659
public fun setEnableAppStartProfiling (Z)V
36573660
public fun setEnableAutoSessionTracking (Z)V
36583661
public fun setEnableBackpressureHandling (Z)V
3662+
public fun setEnableCacheTracing (Z)V
36593663
public fun setEnableDatabaseTransactionTracing (Z)V
36603664
public fun setEnableDeduplication (Z)V
36613665
public fun setEnableEventSizeLimiting (Z)V

sentry/src/main/java/io/sentry/ExternalOptions.java

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -54,6 +54,7 @@ public final class ExternalOptions {
5454
private @Nullable Boolean sendDefaultPii;
5555
private @Nullable Boolean enableBackpressureHandling;
5656
private @Nullable Boolean enableDatabaseTransactionTracing;
57+
private @Nullable Boolean enableCacheTracing;
5758
private @Nullable Boolean globalHubMode;
5859
private @Nullable Boolean forceInit;
5960
private @Nullable Boolean captureOpenTelemetryEvents;
@@ -155,6 +156,8 @@ public final class ExternalOptions {
155156
options.setEnableDatabaseTransactionTracing(
156157
propertiesProvider.getBooleanProperty("enable-database-transaction-tracing"));
157158

159+
options.setEnableCacheTracing(propertiesProvider.getBooleanProperty("enable-cache-tracing"));
160+
158161
options.setGlobalHubMode(propertiesProvider.getBooleanProperty("global-hub-mode"));
159162

160163
options.setCaptureOpenTelemetryEvents(
@@ -492,6 +495,14 @@ public void setEnableDatabaseTransactionTracing(
492495
return enableDatabaseTransactionTracing;
493496
}
494497

498+
public void setEnableCacheTracing(final @Nullable Boolean enableCacheTracing) {
499+
this.enableCacheTracing = enableCacheTracing;
500+
}
501+
502+
public @Nullable Boolean isEnableCacheTracing() {
503+
return enableCacheTracing;
504+
}
505+
495506
public void setGlobalHubMode(final @Nullable Boolean globalHubMode) {
496507
this.globalHubMode = globalHubMode;
497508
}

sentry/src/main/java/io/sentry/SentryOptions.java

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -485,6 +485,9 @@ public class SentryOptions {
485485
/** Whether database transaction spans (BEGIN, COMMIT, ROLLBACK) should be traced. */
486486
private boolean enableDatabaseTransactionTracing = false;
487487

488+
/** Whether cache operations (get, put, evict, clear) should be traced. */
489+
private boolean enableCacheTracing = false;
490+
488491
/** Date provider to retrieve the current date from. */
489492
@ApiStatus.Internal
490493
private final @NotNull LazyEvaluator<SentryDateProvider> dateProvider =
@@ -2616,6 +2619,24 @@ public void setEnableDatabaseTransactionTracing(boolean enableDatabaseTransactio
26162619
this.enableDatabaseTransactionTracing = enableDatabaseTransactionTracing;
26172620
}
26182621

2622+
/**
2623+
* Whether cache operations (get, put, evict, clear) should be traced.
2624+
*
2625+
* @return true if cache operations should be traced
2626+
*/
2627+
public boolean isEnableCacheTracing() {
2628+
return enableCacheTracing;
2629+
}
2630+
2631+
/**
2632+
* Whether cache operations (get, put, evict, clear) should be traced.
2633+
*
2634+
* @param enableCacheTracing true if cache operations should be traced
2635+
*/
2636+
public void setEnableCacheTracing(boolean enableCacheTracing) {
2637+
this.enableCacheTracing = enableCacheTracing;
2638+
}
2639+
26192640
/**
26202641
* Whether Sentry is enabled.
26212642
*
@@ -3475,6 +3496,9 @@ public void merge(final @NotNull ExternalOptions options) {
34753496
if (options.isEnableDatabaseTransactionTracing() != null) {
34763497
setEnableDatabaseTransactionTracing(options.isEnableDatabaseTransactionTracing());
34773498
}
3499+
if (options.isEnableCacheTracing() != null) {
3500+
setEnableCacheTracing(options.isEnableCacheTracing());
3501+
}
34783502
if (options.getMaxRequestBodySize() != null) {
34793503
setMaxRequestBodySize(options.getMaxRequestBodySize());
34803504
}

sentry/src/test/java/io/sentry/ExternalOptionsTest.kt

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -312,6 +312,20 @@ class ExternalOptionsTest {
312312
}
313313
}
314314

315+
@Test
316+
fun `creates options with enableCacheTracing set to true`() {
317+
withPropertiesFile("enable-cache-tracing=true") { options ->
318+
assertTrue(options.isEnableCacheTracing == true)
319+
}
320+
}
321+
322+
@Test
323+
fun `creates options with enableCacheTracing set to false`() {
324+
withPropertiesFile("enable-cache-tracing=false") { options ->
325+
assertTrue(options.isEnableCacheTracing == false)
326+
}
327+
}
328+
315329
@Test
316330
fun `creates options with cron defaults`() {
317331
withPropertiesFile(

sentry/src/test/java/io/sentry/SentryOptionsTest.kt

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -397,6 +397,7 @@ class SentryOptionsTest {
397397
externalOptions.ignoredErrors = listOf("Some error", "Another .*")
398398
externalOptions.isEnableBackpressureHandling = false
399399
externalOptions.isEnableDatabaseTransactionTracing = true
400+
externalOptions.isEnableCacheTracing = true
400401
externalOptions.maxRequestBodySize = SentryOptions.RequestSize.MEDIUM
401402
externalOptions.isSendDefaultPii = true
402403
externalOptions.isForceInit = true
@@ -459,6 +460,7 @@ class SentryOptionsTest {
459460
)
460461
assertFalse(options.isEnableBackpressureHandling)
461462
assertTrue(options.isEnableDatabaseTransactionTracing)
463+
assertTrue(options.isEnableCacheTracing)
462464
assertTrue(options.isForceInit)
463465
assertNotNull(options.cron)
464466
assertEquals(10L, options.cron?.defaultCheckinMargin)
@@ -677,6 +679,11 @@ class SentryOptionsTest {
677679
assertFalse(SentryOptions().isEnableDatabaseTransactionTracing)
678680
}
679681

682+
@Test
683+
fun `when options are initialized, enableCacheTracing is set to false by default`() {
684+
assertFalse(SentryOptions().isEnableCacheTracing)
685+
}
686+
680687
@Test
681688
fun `when options are initialized, metrics is enabled by default`() {
682689
assertTrue(SentryOptions().metrics.isEnabled)

0 commit comments

Comments
 (0)