Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -213,6 +213,10 @@ public boolean invalidate() {
}

private @Nullable ISpan startSpan(final @NotNull String operation, final @Nullable Object key) {
if (!scopes.getOptions().isEnableCacheTracing()) {
return null;
}

final ISpan activeSpan = scopes.getSpan();
if (activeSpan == null || activeSpan.isNoOp()) {
return null;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -22,12 +22,14 @@ class SentryCacheWrapperTest {

private lateinit var scopes: IScopes
private lateinit var delegate: Cache
private lateinit var options: SentryOptions

@BeforeTest
fun setup() {
scopes = mock()
delegate = mock()
whenever(scopes.options).thenReturn(SentryOptions())
options = SentryOptions().apply { isEnableCacheTracing = true }
whenever(scopes.options).thenReturn(options)
whenever(delegate.name).thenReturn("testCache")
}

Expand Down Expand Up @@ -223,6 +225,21 @@ class SentryCacheWrapperTest {
verify(delegate).get("myKey")
}

// -- no span when option is disabled --

@Test
fun `does not create span when enableCacheTracing is false`() {
options.isEnableCacheTracing = false
val tx = createTransaction()
val wrapper = SentryCacheWrapper(delegate, scopes)
whenever(delegate.get("myKey")).thenReturn(null)

wrapper.get("myKey")

verify(delegate).get("myKey")
assertEquals(0, tx.spans.size)
}

// -- error handling --

@Test
Expand Down
4 changes: 4 additions & 0 deletions sentry/api/sentry.api
Original file line number Diff line number Diff line change
Expand Up @@ -512,6 +512,7 @@ public final class io/sentry/ExternalOptions {
public fun getTracesSampleRate ()Ljava/lang/Double;
public fun isCaptureOpenTelemetryEvents ()Ljava/lang/Boolean;
public fun isEnableBackpressureHandling ()Ljava/lang/Boolean;
public fun isEnableCacheTracing ()Ljava/lang/Boolean;
public fun isEnableDatabaseTransactionTracing ()Ljava/lang/Boolean;
public fun isEnableLogs ()Ljava/lang/Boolean;
public fun isEnableMetrics ()Ljava/lang/Boolean;
Expand All @@ -528,6 +529,7 @@ public final class io/sentry/ExternalOptions {
public fun setDist (Ljava/lang/String;)V
public fun setDsn (Ljava/lang/String;)V
public fun setEnableBackpressureHandling (Ljava/lang/Boolean;)V
public fun setEnableCacheTracing (Ljava/lang/Boolean;)V
public fun setEnableDatabaseTransactionTracing (Ljava/lang/Boolean;)V
public fun setEnableDeduplication (Ljava/lang/Boolean;)V
public fun setEnableLogs (Ljava/lang/Boolean;)V
Expand Down Expand Up @@ -3598,6 +3600,7 @@ public class io/sentry/SentryOptions {
public fun isEnableAppStartProfiling ()Z
public fun isEnableAutoSessionTracking ()Z
public fun isEnableBackpressureHandling ()Z
public fun isEnableCacheTracing ()Z
public fun isEnableDatabaseTransactionTracing ()Z
public fun isEnableDeduplication ()Z
public fun isEnableEventSizeLimiting ()Z
Expand Down Expand Up @@ -3656,6 +3659,7 @@ public class io/sentry/SentryOptions {
public fun setEnableAppStartProfiling (Z)V
public fun setEnableAutoSessionTracking (Z)V
public fun setEnableBackpressureHandling (Z)V
public fun setEnableCacheTracing (Z)V
public fun setEnableDatabaseTransactionTracing (Z)V
public fun setEnableDeduplication (Z)V
public fun setEnableEventSizeLimiting (Z)V
Expand Down
11 changes: 11 additions & 0 deletions sentry/src/main/java/io/sentry/ExternalOptions.java
Original file line number Diff line number Diff line change
Expand Up @@ -54,6 +54,7 @@ public final class ExternalOptions {
private @Nullable Boolean sendDefaultPii;
private @Nullable Boolean enableBackpressureHandling;
private @Nullable Boolean enableDatabaseTransactionTracing;
private @Nullable Boolean enableCacheTracing;
private @Nullable Boolean globalHubMode;
private @Nullable Boolean forceInit;
private @Nullable Boolean captureOpenTelemetryEvents;
Expand Down Expand Up @@ -155,6 +156,8 @@ public final class ExternalOptions {
options.setEnableDatabaseTransactionTracing(
propertiesProvider.getBooleanProperty("enable-database-transaction-tracing"));

options.setEnableCacheTracing(propertiesProvider.getBooleanProperty("enable-cache-tracing"));

options.setGlobalHubMode(propertiesProvider.getBooleanProperty("global-hub-mode"));

options.setCaptureOpenTelemetryEvents(
Expand Down Expand Up @@ -492,6 +495,14 @@ public void setEnableDatabaseTransactionTracing(
return enableDatabaseTransactionTracing;
}

public void setEnableCacheTracing(final @Nullable Boolean enableCacheTracing) {
this.enableCacheTracing = enableCacheTracing;
}

public @Nullable Boolean isEnableCacheTracing() {
return enableCacheTracing;
}

public void setGlobalHubMode(final @Nullable Boolean globalHubMode) {
this.globalHubMode = globalHubMode;
}
Expand Down
24 changes: 24 additions & 0 deletions sentry/src/main/java/io/sentry/SentryOptions.java
Original file line number Diff line number Diff line change
Expand Up @@ -485,6 +485,9 @@ public class SentryOptions {
/** Whether database transaction spans (BEGIN, COMMIT, ROLLBACK) should be traced. */
private boolean enableDatabaseTransactionTracing = false;

/** Whether cache operations (get, put, evict, clear) should be traced. */
private boolean enableCacheTracing = false;

/** Date provider to retrieve the current date from. */
@ApiStatus.Internal
private final @NotNull LazyEvaluator<SentryDateProvider> dateProvider =
Expand Down Expand Up @@ -2616,6 +2619,24 @@ public void setEnableDatabaseTransactionTracing(boolean enableDatabaseTransactio
this.enableDatabaseTransactionTracing = enableDatabaseTransactionTracing;
}

/**
* Whether cache operations (get, put, evict, clear) should be traced.
*
* @return true if cache operations should be traced
*/
public boolean isEnableCacheTracing() {
return enableCacheTracing;
}

/**
* Whether cache operations (get, put, evict, clear) should be traced.
*
* @param enableCacheTracing true if cache operations should be traced
*/
public void setEnableCacheTracing(boolean enableCacheTracing) {
this.enableCacheTracing = enableCacheTracing;
}

/**
* Whether Sentry is enabled.
*
Expand Down Expand Up @@ -3475,6 +3496,9 @@ public void merge(final @NotNull ExternalOptions options) {
if (options.isEnableDatabaseTransactionTracing() != null) {
setEnableDatabaseTransactionTracing(options.isEnableDatabaseTransactionTracing());
}
if (options.isEnableCacheTracing() != null) {
setEnableCacheTracing(options.isEnableCacheTracing());
}
if (options.getMaxRequestBodySize() != null) {
setMaxRequestBodySize(options.getMaxRequestBodySize());
}
Expand Down
14 changes: 14 additions & 0 deletions sentry/src/test/java/io/sentry/ExternalOptionsTest.kt
Original file line number Diff line number Diff line change
Expand Up @@ -312,6 +312,20 @@ class ExternalOptionsTest {
}
}

@Test
fun `creates options with enableCacheTracing set to true`() {
withPropertiesFile("enable-cache-tracing=true") { options ->
assertTrue(options.isEnableCacheTracing == true)
}
}

@Test
fun `creates options with enableCacheTracing set to false`() {
withPropertiesFile("enable-cache-tracing=false") { options ->
assertTrue(options.isEnableCacheTracing == false)
}
}

@Test
fun `creates options with cron defaults`() {
withPropertiesFile(
Expand Down
7 changes: 7 additions & 0 deletions sentry/src/test/java/io/sentry/SentryOptionsTest.kt
Original file line number Diff line number Diff line change
Expand Up @@ -397,6 +397,7 @@ class SentryOptionsTest {
externalOptions.ignoredErrors = listOf("Some error", "Another .*")
externalOptions.isEnableBackpressureHandling = false
externalOptions.isEnableDatabaseTransactionTracing = true
externalOptions.isEnableCacheTracing = true
externalOptions.maxRequestBodySize = SentryOptions.RequestSize.MEDIUM
externalOptions.isSendDefaultPii = true
externalOptions.isForceInit = true
Expand Down Expand Up @@ -459,6 +460,7 @@ class SentryOptionsTest {
)
assertFalse(options.isEnableBackpressureHandling)
assertTrue(options.isEnableDatabaseTransactionTracing)
assertTrue(options.isEnableCacheTracing)
assertTrue(options.isForceInit)
assertNotNull(options.cron)
assertEquals(10L, options.cron?.defaultCheckinMargin)
Expand Down Expand Up @@ -677,6 +679,11 @@ class SentryOptionsTest {
assertFalse(SentryOptions().isEnableDatabaseTransactionTracing)
}

@Test
fun `when options are initialized, enableCacheTracing is set to false by default`() {
assertFalse(SentryOptions().isEnableCacheTracing)
}

@Test
fun `when options are initialized, metrics is enabled by default`() {
assertTrue(SentryOptions().metrics.isEnabled)
Expand Down
Loading