diff --git a/CHANGELOG.md b/CHANGELOG.md index c0d6b1dbe1d..36913c4541c 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -12,6 +12,7 @@ - Android: `SentryUserFeedbackDialog`: use `SentryUserFeedbackForm` instead - Android: the `SentryUserFeedbackButton` view and composable: call `Sentry.feedback().show()` from your own button instead - Remove deprecated Hub compatibility APIs in favor of `IScopes` and `Scopes` ([#6223](https://github.com/getsentry/sentry-java/pull/6223)) +- Remove the deprecated `IEnvelopeCache.store(...)` methods. Custom `IEnvelopeCache` implementations must implement `storeEnvelope(envelope, hint)` instead and return whether the envelope was stored ([#6468](https://github.com/getsentry/sentry-java/pull/6468)) - Remove the aggregate Sentry Logs and Metrics enable options from all configuration surfaces: - Java API: `options.getLogs().setEnabled(...)` and `options.getMetrics().setEnabled(...)` - Properties files: `logs.enabled` and `metrics.enabled` diff --git a/sentry-android-core/api/sentry-android-core.api b/sentry-android-core/api/sentry-android-core.api index 5be86ecddaa..8c026d0a363 100644 --- a/sentry-android-core/api/sentry-android-core.api +++ b/sentry-android-core/api/sentry-android-core.api @@ -758,7 +758,6 @@ public final class io/sentry/android/core/cache/AndroidEnvelopeCache : io/sentry public static fun markAnrReported (Lio/sentry/SentryOptions;J)V public static fun markMemoryLimiterReported (Lio/sentry/SentryOptions;J)V public static fun markTombstoneReported (Lio/sentry/SentryOptions;J)V - public fun store (Lio/sentry/SentryEnvelope;Lio/sentry/Hint;)V public fun storeEnvelope (Lio/sentry/SentryEnvelope;Lio/sentry/Hint;)Z } diff --git a/sentry-android-core/src/main/java/io/sentry/android/core/cache/AndroidEnvelopeCache.java b/sentry-android-core/src/main/java/io/sentry/android/core/cache/AndroidEnvelopeCache.java index 13148097289..81af4f4f828 100644 --- a/sentry-android-core/src/main/java/io/sentry/android/core/cache/AndroidEnvelopeCache.java +++ b/sentry-android-core/src/main/java/io/sentry/android/core/cache/AndroidEnvelopeCache.java @@ -56,18 +56,8 @@ public AndroidEnvelopeCache(final @NotNull SentryAndroidOptions options) { this.currentDateProvider = currentDateProvider; } - @SuppressWarnings("deprecation") - @Override - public void store(@NotNull SentryEnvelope envelope, @NotNull Hint hint) { - storeInternalAndroid(envelope, hint); - } - @Override public boolean storeEnvelope(@NotNull SentryEnvelope envelope, @NotNull Hint hint) { - return storeInternalAndroid(envelope, hint); - } - - private boolean storeInternalAndroid(@NotNull SentryEnvelope envelope, @NotNull Hint hint) { final boolean didStore = super.storeEnvelope(envelope, hint); final SentryAndroidOptions options = (SentryAndroidOptions) this.options; diff --git a/sentry-android-core/src/test/java/io/sentry/android/core/SentryAndroidTest.kt b/sentry-android-core/src/test/java/io/sentry/android/core/SentryAndroidTest.kt index c94fd5890ca..ac2c2933e40 100644 --- a/sentry-android-core/src/test/java/io/sentry/android/core/SentryAndroidTest.kt +++ b/sentry-android-core/src/test/java/io/sentry/android/core/SentryAndroidTest.kt @@ -648,7 +648,7 @@ class SentryAndroidTest { private class CustomEnvelopCache : IEnvelopeCache { override fun iterator(): MutableIterator = TODO() - override fun store(envelope: SentryEnvelope, hint: Hint) = Unit + override fun storeEnvelope(envelope: SentryEnvelope, hint: Hint) = true override fun discard(envelope: SentryEnvelope) = Unit } diff --git a/sentry-android-core/src/test/java/io/sentry/android/core/cache/AndroidEnvelopeCacheTest.kt b/sentry-android-core/src/test/java/io/sentry/android/core/cache/AndroidEnvelopeCacheTest.kt index 47163c0e841..ac6b5737dce 100644 --- a/sentry-android-core/src/test/java/io/sentry/android/core/cache/AndroidEnvelopeCacheTest.kt +++ b/sentry-android-core/src/test/java/io/sentry/android/core/cache/AndroidEnvelopeCacheTest.kt @@ -2,6 +2,7 @@ package io.sentry.android.core.cache import com.google.common.truth.Truth.assertThat import io.sentry.DateUtils +import io.sentry.Hint import io.sentry.ISerializer import io.sentry.NoOpLogger import io.sentry.SentryEnvelope @@ -90,7 +91,7 @@ class AndroidEnvelopeCacheTest { fun `when no uncaught hint exists, does not write startup crash file`() { val cache = fixture.getSut(tmpDir) - cache.store(fixture.envelope) + cache.storeEnvelope(fixture.envelope, Hint()) assertFalse(fixture.startupCrashMarkerFile.exists()) } @@ -155,7 +156,7 @@ class AndroidEnvelopeCacheTest { fun `when no AnrV2 hint exists, does not write last anr report file`() { val cache = fixture.getSut(tmpDir) - cache.store(fixture.envelope) + cache.storeEnvelope(fixture.envelope, Hint()) assertFalse(fixture.lastReportedAnrFile.exists()) } diff --git a/sentry/api/sentry.api b/sentry/api/sentry.api index 9affbccd017..49b6e5e820d 100644 --- a/sentry/api/sentry.api +++ b/sentry/api/sentry.api @@ -4682,16 +4682,13 @@ public class io/sentry/cache/EnvelopeCache : io/sentry/cache/IEnvelopeCache { public fun iterator ()Ljava/util/Iterator; public fun movePreviousSession (Ljava/io/File;Ljava/io/File;)V public fun persistCurrentSession (Lio/sentry/Session;)V - public fun store (Lio/sentry/SentryEnvelope;Lio/sentry/Hint;)V public fun storeEnvelope (Lio/sentry/SentryEnvelope;Lio/sentry/Hint;)Z public fun waitPreviousSessionFlush ()Z } public abstract interface class io/sentry/cache/IEnvelopeCache : java/lang/Iterable { public abstract fun discard (Lio/sentry/SentryEnvelope;)V - public fun store (Lio/sentry/SentryEnvelope;)V - public abstract fun store (Lio/sentry/SentryEnvelope;Lio/sentry/Hint;)V - public fun storeEnvelope (Lio/sentry/SentryEnvelope;Lio/sentry/Hint;)Z + public abstract fun storeEnvelope (Lio/sentry/SentryEnvelope;Lio/sentry/Hint;)Z } public final class io/sentry/cache/PersistingOptionsObserver : io/sentry/IOptionsObserver { @@ -7450,7 +7447,6 @@ public final class io/sentry/transport/NoOpEnvelopeCache : io/sentry/cache/IEnve public fun discard (Lio/sentry/SentryEnvelope;)V public static fun getInstance ()Lio/sentry/transport/NoOpEnvelopeCache; public fun iterator ()Ljava/util/Iterator; - public fun store (Lio/sentry/SentryEnvelope;Lio/sentry/Hint;)V public fun storeEnvelope (Lio/sentry/SentryEnvelope;Lio/sentry/Hint;)Z } diff --git a/sentry/src/main/java/io/sentry/cache/EnvelopeCache.java b/sentry/src/main/java/io/sentry/cache/EnvelopeCache.java index d3f473cfbc9..3fde2a97f5a 100644 --- a/sentry/src/main/java/io/sentry/cache/EnvelopeCache.java +++ b/sentry/src/main/java/io/sentry/cache/EnvelopeCache.java @@ -101,18 +101,8 @@ public EnvelopeCache( previousSessionLatch = new CountDownLatch(1); } - @SuppressWarnings("deprecation") - @Override - public void store(final @NotNull SentryEnvelope envelope, final @NotNull Hint hint) { - storeInternal(envelope, hint); - } - @Override public boolean storeEnvelope(final @NotNull SentryEnvelope envelope, final @NotNull Hint hint) { - return storeInternal(envelope, hint); - } - - private boolean storeInternal(final @NotNull SentryEnvelope envelope, final @NotNull Hint hint) { Objects.requireNonNull(envelope, "Envelope is required."); // Create the cache dir lazily on the first write so Sentry.init doesn't block on the mkdirs. @@ -421,7 +411,7 @@ public void discard(final @NotNull SentryEnvelope envelope) { * *

This only computes a path and never creates the directory, so that {@link * #discard(SentryEnvelope)} doesn't resurrect a cache dir it is only deleting from. Writers go - * through {@link #storeInternal}, which creates the directory up front. + * through {@link #storeEnvelope}, which creates the directory up front. * * @param envelope the SentryEnvelope object * @return the file diff --git a/sentry/src/main/java/io/sentry/cache/IEnvelopeCache.java b/sentry/src/main/java/io/sentry/cache/IEnvelopeCache.java index ec25ce32884..966c6b83dcf 100644 --- a/sentry/src/main/java/io/sentry/cache/IEnvelopeCache.java +++ b/sentry/src/main/java/io/sentry/cache/IEnvelopeCache.java @@ -6,18 +6,12 @@ public interface IEnvelopeCache extends Iterable { - @Deprecated - void store(@NotNull SentryEnvelope envelope, @NotNull Hint hint); - - default boolean storeEnvelope(@NotNull SentryEnvelope envelope, @NotNull Hint hint) { - store(envelope, hint); - return true; - } - - @Deprecated - default void store(@NotNull SentryEnvelope envelope) { - storeEnvelope(envelope, new Hint()); - } + /** + * Stores an envelope. + * + * @return whether the envelope was stored + */ + boolean storeEnvelope(@NotNull SentryEnvelope envelope, @NotNull Hint hint); void discard(@NotNull SentryEnvelope envelope); } diff --git a/sentry/src/main/java/io/sentry/transport/NoOpEnvelopeCache.java b/sentry/src/main/java/io/sentry/transport/NoOpEnvelopeCache.java index 8f9d7fbd565..bbf8e0245ff 100644 --- a/sentry/src/main/java/io/sentry/transport/NoOpEnvelopeCache.java +++ b/sentry/src/main/java/io/sentry/transport/NoOpEnvelopeCache.java @@ -16,10 +16,6 @@ public static NoOpEnvelopeCache getInstance() { return instance; } - @SuppressWarnings("deprecation") - @Override - public void store(@NotNull SentryEnvelope envelope, @NotNull Hint hint) {} - @Override public boolean storeEnvelope(@NotNull SentryEnvelope envelope, @NotNull Hint hint) { return false; diff --git a/sentry/src/test/java/io/sentry/SentryTest.kt b/sentry/src/test/java/io/sentry/SentryTest.kt index b87338fbd5d..382af89355a 100644 --- a/sentry/src/test/java/io/sentry/SentryTest.kt +++ b/sentry/src/test/java/io/sentry/SentryTest.kt @@ -1816,7 +1816,7 @@ class SentryTest { private class CustomEnvelopCache : IEnvelopeCache { override fun iterator(): MutableIterator = TODO() - override fun store(envelope: SentryEnvelope, hint: Hint) = Unit + override fun storeEnvelope(envelope: SentryEnvelope, hint: Hint) = true override fun discard(envelope: SentryEnvelope) = Unit } diff --git a/sentry/src/test/java/io/sentry/cache/EnvelopeCacheTest.kt b/sentry/src/test/java/io/sentry/cache/EnvelopeCacheTest.kt index 0cc2c968195..179c2222b6d 100644 --- a/sentry/src/test/java/io/sentry/cache/EnvelopeCacheTest.kt +++ b/sentry/src/test/java/io/sentry/cache/EnvelopeCacheTest.kt @@ -76,7 +76,10 @@ class EnvelopeCacheTest { assertEquals(0, nofFiles()) - cache.store(SentryEnvelope.from(fixture.options.serializer, createSession(), null)) + cache.storeEnvelope( + SentryEnvelope.from(fixture.options.serializer, createSession(), null), + Hint(), + ) assertEquals(1, nofFiles()) @@ -91,7 +94,10 @@ class EnvelopeCacheTest { assertTrue(file.deleteRecursively()) assertFalse(file.exists()) - cache.store(SentryEnvelope.from(fixture.options.serializer, createSession(), null)) + cache.storeEnvelope( + SentryEnvelope.from(fixture.options.serializer, createSession(), null), + Hint(), + ) assertTrue(file.exists()) assertEquals(1, file.list()?.size) @@ -157,7 +163,7 @@ class EnvelopeCacheTest { assertTrue(currentFile.exists()) HintUtils.setTypeCheckHint(hints, SessionEndHint()) - cache.store(envelope, hints) + cache.storeEnvelope(envelope, hints) assertFalse(currentFile.exists()) file.deleteRecursively() @@ -394,7 +400,7 @@ class EnvelopeCacheTest { // since the first store call would set as readCrashedLastRun=true SentryCrashLastRunState.getInstance().reset() - cache.store(newEnvelope, hints) + cache.storeEnvelope(newEnvelope, hints) file.deleteRecursively() // passing empty string since readCrashedLastRun is already set @@ -719,8 +725,8 @@ class EnvelopeCacheTest { null, ) - cache.store(envelopeA, Hint()) - cache.store(envelopeB, Hint()) + cache.storeEnvelope(envelopeA, Hint()) + cache.storeEnvelope(envelopeB, Hint()) assertEquals(2, cache.directory.file.list()?.size) } @@ -789,7 +795,7 @@ class EnvelopeCacheTest { // Second call should be idempotent: previous_session.json should be preserved // This simulates the race where both MovePreviousSession runnable and - // storeInternal (SessionStart) both call movePreviousSession + // storeEnvelope (SessionStart) both call movePreviousSession cache.movePreviousSession(currentSessionFile, previousSessionFile) // previous_session.json should still exist with original content