From 8812916e84a6e81ded286c1145cca0382cc3fb1f Mon Sep 17 00:00:00 2001 From: Markus Hintersteiner Date: Thu, 21 Dec 2023 12:18:03 +0100 Subject: [PATCH 1/6] Fix UserFeedback cache name conflicts with attached Event cache file name --- .../java/io/sentry/cache/EnvelopeCache.java | 15 +++++----- .../java/io/sentry/cache/EnvelopeCacheTest.kt | 30 +++++++++++++++++++ 2 files changed, 37 insertions(+), 8 deletions(-) diff --git a/sentry/src/main/java/io/sentry/cache/EnvelopeCache.java b/sentry/src/main/java/io/sentry/cache/EnvelopeCache.java index 0b5f8ac2fb7..8f57651ad15 100644 --- a/sentry/src/main/java/io/sentry/cache/EnvelopeCache.java +++ b/sentry/src/main/java/io/sentry/cache/EnvelopeCache.java @@ -174,7 +174,11 @@ public void store(final @NotNull SentryEnvelope envelope, final @NotNull Hint hi } else { options .getLogger() - .log(DEBUG, "Adding Envelope to offline storage: %s", envelopeFile.getAbsolutePath()); + .log( + DEBUG, + new Exception(), + "Adding Envelope to offline storage: %s", + envelopeFile.getAbsolutePath()); } writeEnvelopeToDisk(envelopeFile, envelope); @@ -362,16 +366,11 @@ public void discard(final @NotNull SentryEnvelope envelope) { * @return the file */ private synchronized @NotNull File getEnvelopeFile(final @NotNull SentryEnvelope envelope) { - String fileName; + final @NotNull String fileName; if (fileNameMap.containsKey(envelope)) { fileName = fileNameMap.get(envelope); } else { - if (envelope.getHeader().getEventId() != null) { - fileName = envelope.getHeader().getEventId().toString(); - } else { - fileName = UUID.randomUUID().toString(); - } - fileName += SUFFIX_ENVELOPE_FILE; + fileName = UUID.randomUUID() + SUFFIX_ENVELOPE_FILE; fileNameMap.put(envelope, fileName); } diff --git a/sentry/src/test/java/io/sentry/cache/EnvelopeCacheTest.kt b/sentry/src/test/java/io/sentry/cache/EnvelopeCacheTest.kt index 260c6ae9810..98751f8c448 100644 --- a/sentry/src/test/java/io/sentry/cache/EnvelopeCacheTest.kt +++ b/sentry/src/test/java/io/sentry/cache/EnvelopeCacheTest.kt @@ -1,6 +1,7 @@ package io.sentry.cache import io.sentry.DateUtils +import io.sentry.Hint import io.sentry.ILogger import io.sentry.NoOpLogger import io.sentry.SentryCrashLastRunState @@ -16,6 +17,7 @@ import io.sentry.cache.EnvelopeCache.SUFFIX_SESSION_FILE import io.sentry.hints.AbnormalExit import io.sentry.hints.SessionEndHint import io.sentry.hints.SessionStartHint +import io.sentry.protocol.SentryId import io.sentry.util.HintUtils import org.mockito.kotlin.mock import java.io.File @@ -317,4 +319,32 @@ class EnvelopeCacheTest { null ) } + + @Test + fun `two items with the same event id can be stored side-by-side`() { + val cache = fixture.getSUT() + + val eventId = SentryId() + + val envelopeA = SentryEnvelope.from( + fixture.options.serializer, + SentryEvent().apply { + setEventId(eventId) + }, + null + ) + + val envelopeB = SentryEnvelope.from( + fixture.options.serializer, + SentryEvent().apply { + setEventId(eventId) + }, + null + ) + + cache.store(envelopeA, Hint()) + cache.store(envelopeB, Hint()) + + assertEquals(2, cache.directory.list()?.size) + } } From b147a5035bc157429924a3cc2f50d1dbdb7cd569 Mon Sep 17 00:00:00 2001 From: Markus Hintersteiner Date: Thu, 21 Dec 2023 12:23:52 +0100 Subject: [PATCH 2/6] Add Changelog --- CHANGELOG.md | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 622193bee1a..ff3f1543ffc 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -10,6 +10,7 @@ - SchedulerFactoryBeanCustomizer now runs first so user customization is not overridden ([#3095](https://github.com/getsentry/sentry-java/pull/3095)) - If you are setting global job listeners please also add `SentryJobListener` +- Fix UserFeedback disk cache name conflicts with linked events ([#3116](https://github.com/getsentry/sentry-java/pull/3116)) ### Dependencies From b76b2faa0e13d7c83e02dbff54c9c822cb28d99e Mon Sep 17 00:00:00 2001 From: Markus Hintersteiner Date: Thu, 21 Dec 2023 12:27:33 +0100 Subject: [PATCH 3/6] Remove uneccesary Exception --- sentry/src/main/java/io/sentry/cache/EnvelopeCache.java | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/sentry/src/main/java/io/sentry/cache/EnvelopeCache.java b/sentry/src/main/java/io/sentry/cache/EnvelopeCache.java index 8f57651ad15..985f035824c 100644 --- a/sentry/src/main/java/io/sentry/cache/EnvelopeCache.java +++ b/sentry/src/main/java/io/sentry/cache/EnvelopeCache.java @@ -174,11 +174,7 @@ public void store(final @NotNull SentryEnvelope envelope, final @NotNull Hint hi } else { options .getLogger() - .log( - DEBUG, - new Exception(), - "Adding Envelope to offline storage: %s", - envelopeFile.getAbsolutePath()); + .log(DEBUG, "Adding Envelope to offline storage: %s", envelopeFile.getAbsolutePath()); } writeEnvelopeToDisk(envelopeFile, envelope); From 96351c0d566fc3be079e7b59504a3cdeeaa2657a Mon Sep 17 00:00:00 2001 From: Markus Hintersteiner Date: Mon, 22 Jan 2024 12:23:58 -0500 Subject: [PATCH 4/6] Fix method doc --- sentry/src/main/java/io/sentry/cache/EnvelopeCache.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/sentry/src/main/java/io/sentry/cache/EnvelopeCache.java b/sentry/src/main/java/io/sentry/cache/EnvelopeCache.java index f6d219a9730..3be857a4b2f 100644 --- a/sentry/src/main/java/io/sentry/cache/EnvelopeCache.java +++ b/sentry/src/main/java/io/sentry/cache/EnvelopeCache.java @@ -353,8 +353,8 @@ public void discard(final @NotNull SentryEnvelope envelope) { } /** - * Returns the envelope's file path. If the envelope has no eventId header, it generates a random - * file name to it. + * Returns the envelope's file path. If the envelope wasn't added to the cache beforehand, a + * random file name is assigned. * * @param envelope the SentryEnvelope object * @return the file From 68ef4540601c3796b954baa60902946501841574 Mon Sep 17 00:00:00 2001 From: Markus Hintersteiner Date: Tue, 23 Jan 2024 15:22:37 -0500 Subject: [PATCH 5/6] Update CHANGELOG.md --- CHANGELOG.md | 1 - 1 file changed, 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 045074d057e..93ce7868a8e 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -48,7 +48,6 @@ - SchedulerFactoryBeanCustomizer now runs first so user customization is not overridden ([#3095](https://github.com/getsentry/sentry-java/pull/3095)) - If you are setting global job listeners please also add `SentryJobListener` - Ensure serialVersionUID of Exception classes are unique ([#3115](https://github.com/getsentry/sentry-java/pull/3115)) -<<<<<<< HEAD - Get rid of "is not eligible for getting processed by all BeanPostProcessors" warnings in Spring Boot ([#3108](https://github.com/getsentry/sentry-java/pull/3108)) - Fix missing `release` and other fields for ANRs reported with `mechanism:AppExitInfo` ([#3074](https://github.com/getsentry/sentry-java/pull/3074)) From 86b4d36a5e4afb7aed8675337863a537ed5187a3 Mon Sep 17 00:00:00 2001 From: Markus Hintersteiner Date: Tue, 23 Jan 2024 15:23:08 -0500 Subject: [PATCH 6/6] Update CHANGELOG.md --- CHANGELOG.md | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 93ce7868a8e..3dcdacf6f06 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -15,6 +15,7 @@ ### Fixes - Fix not eligible for auto proxying warnings ([#3154](https://github.com/getsentry/sentry-java/pull/3154)) +- Fix UserFeedback disk cache name conflicts with linked events ([#3116](https://github.com/getsentry/sentry-java/pull/3116)) ### Breaking changes @@ -24,10 +25,6 @@ - Get a certificate for your server through e.g. [Let's Encrypt](https://letsencrypt.org/) - Fork the SDK and add the hostname verifier back -### Fixes - -- Fix UserFeedback disk cache name conflicts with linked events ([#3116](https://github.com/getsentry/sentry-java/pull/3116)) - ### Dependencies - Bump Native SDK from v0.6.7 to v0.7.0 ([#3133](https://github.com/getsentry/sentry-java/pull/3133))