From e2de1872c3ae719db538eabe6839117c10c70632 Mon Sep 17 00:00:00 2001 From: Alexander Dinauer Date: Mon, 21 Jul 2025 09:15:00 +0200 Subject: [PATCH 01/10] Let queue drain on a restart --- .../io/sentry/ShutdownHookIntegration.java | 2 +- .../sentry/transport/AsyncHttpTransport.java | 27 ++++++++++--------- 2 files changed, 16 insertions(+), 13 deletions(-) diff --git a/sentry/src/main/java/io/sentry/ShutdownHookIntegration.java b/sentry/src/main/java/io/sentry/ShutdownHookIntegration.java index 3d5bccc3d7..b4096a72f1 100644 --- a/sentry/src/main/java/io/sentry/ShutdownHookIntegration.java +++ b/sentry/src/main/java/io/sentry/ShutdownHookIntegration.java @@ -32,7 +32,7 @@ public void register(final @NotNull IScopes scopes, final @NotNull SentryOptions Objects.requireNonNull(options, "SentryOptions is required"); if (options.isEnableShutdownHook()) { - thread = new Thread(() -> scopes.flush(options.getFlushTimeoutMillis())); + thread = new Thread(() -> scopes.flush(options.getFlushTimeoutMillis()), "sentry-shutdownhook"); handleShutdownInProgress( () -> { runtime.addShutdownHook(thread); diff --git a/sentry/src/main/java/io/sentry/transport/AsyncHttpTransport.java b/sentry/src/main/java/io/sentry/transport/AsyncHttpTransport.java index 24f954c0c1..9c8eb9bb55 100644 --- a/sentry/src/main/java/io/sentry/transport/AsyncHttpTransport.java +++ b/sentry/src/main/java/io/sentry/transport/AsyncHttpTransport.java @@ -174,20 +174,23 @@ public void close(final boolean isRestarting) throws IOException { executor.shutdown(); options.getLogger().log(SentryLevel.DEBUG, "Shutting down"); try { - // We need a small timeout to be able to save to disk any rejected envelope - long timeout = isRestarting ? 0 : options.getFlushTimeoutMillis(); - if (!executor.awaitTermination(timeout, TimeUnit.MILLISECONDS)) { - options + // only stop sending events on a real shutdown, not on a restart + if (!isRestarting) { + // We need a small timeout to be able to save to disk any rejected envelope + long timeout = options.getFlushTimeoutMillis(); + if (!executor.awaitTermination(timeout, TimeUnit.MILLISECONDS)) { + options .getLogger() .log( - SentryLevel.WARNING, - "Failed to shutdown the async connection async sender within " - + timeout - + " ms. Trying to force it now."); - executor.shutdownNow(); - if (currentRunnable != null) { - // We store to disk any envelope that is currently being sent - executor.getRejectedExecutionHandler().rejectedExecution(currentRunnable, executor); + SentryLevel.WARNING, + "Failed to shutdown the async connection async sender within " + + timeout + + " ms. Trying to force it now."); + executor.shutdownNow(); + if (currentRunnable != null) { + // We store to disk any envelope that is currently being sent + executor.getRejectedExecutionHandler().rejectedExecution(currentRunnable, executor); + } } } } catch (InterruptedException e) { From 4ca9d75c6bf24b2f7ff3c5aa7991e89a32d937fa Mon Sep 17 00:00:00 2001 From: Sentry Github Bot Date: Mon, 21 Jul 2025 07:21:45 +0000 Subject: [PATCH 02/10] Format code --- .../java/io/sentry/samples/console/Main.java | 16 ++++++++-------- .../systemtest/ConsoleApplicationSystemTest.kt | 4 ++-- .../io/sentry/systemtest/util/TestHelper.kt | 3 +-- .../java/io/sentry/ShutdownHookIntegration.java | 3 ++- .../io/sentry/transport/AsyncHttpTransport.java | 12 ++++++------ 5 files changed, 19 insertions(+), 19 deletions(-) diff --git a/sentry-samples/sentry-samples-console-opentelemetry-noagent/src/main/java/io/sentry/samples/console/Main.java b/sentry-samples/sentry-samples-console-opentelemetry-noagent/src/main/java/io/sentry/samples/console/Main.java index d552968f31..8af939c32b 100644 --- a/sentry-samples/sentry-samples-console-opentelemetry-noagent/src/main/java/io/sentry/samples/console/Main.java +++ b/sentry-samples/sentry-samples-console-opentelemetry-noagent/src/main/java/io/sentry/samples/console/Main.java @@ -4,7 +4,6 @@ import io.opentelemetry.api.trace.Span; import io.opentelemetry.api.trace.StatusCode; import io.opentelemetry.context.Scope; -import io.opentelemetry.sdk.OpenTelemetrySdk; import io.opentelemetry.sdk.autoconfigure.AutoConfiguredOpenTelemetrySdk; import io.sentry.Breadcrumb; import io.sentry.EventProcessor; @@ -27,13 +26,14 @@ public class Main { public static void main(String[] args) throws InterruptedException { AutoConfiguredOpenTelemetrySdk.builder() .setResultAsGlobal() - .addPropertiesSupplier(() -> { - final Map properties = new HashMap<>(); - properties.put("otel.logs.exporter", "none"); - properties.put("otel.metrics.exporter", "none"); - properties.put("otel.traces.exporter", "none"); - return properties; - }) + .addPropertiesSupplier( + () -> { + final Map properties = new HashMap<>(); + properties.put("otel.logs.exporter", "none"); + properties.put("otel.metrics.exporter", "none"); + properties.put("otel.traces.exporter", "none"); + return properties; + }) .build(); Sentry.addBreadcrumb( diff --git a/sentry-samples/sentry-samples-console-opentelemetry-noagent/src/test/kotlin/sentry/systemtest/ConsoleApplicationSystemTest.kt b/sentry-samples/sentry-samples-console-opentelemetry-noagent/src/test/kotlin/sentry/systemtest/ConsoleApplicationSystemTest.kt index 40a34a78ae..04a5beeb8f 100644 --- a/sentry-samples/sentry-samples-console-opentelemetry-noagent/src/test/kotlin/sentry/systemtest/ConsoleApplicationSystemTest.kt +++ b/sentry-samples/sentry-samples-console-opentelemetry-noagent/src/test/kotlin/sentry/systemtest/ConsoleApplicationSystemTest.kt @@ -24,7 +24,7 @@ class ConsoleApplicationSystemTest { jarFile, mapOf( "SENTRY_DSN" to testHelper.dsn, -// "SENTRY_AUTO_INIT" to "false", + // "SENTRY_AUTO_INIT" to "false", "SENTRY_TRACES_SAMPLE_RATE" to "1.0", "SENTRY_ENABLE_PRETTY_SERIALIZATION_OUTPUT" to "false", "SENTRY_DEBUG" to "true", @@ -32,7 +32,7 @@ class ConsoleApplicationSystemTest { "OTEL_LOGS_EXPORTER" to "none", "OTEL_TRACES_EXPORTER" to "none", ), - enableOtelAutoConfig = true + enableOtelAutoConfig = true, ) process.waitFor(30, TimeUnit.SECONDS) diff --git a/sentry-system-test-support/src/main/kotlin/io/sentry/systemtest/util/TestHelper.kt b/sentry-system-test-support/src/main/kotlin/io/sentry/systemtest/util/TestHelper.kt index 0117f66d38..73b2acd2ae 100644 --- a/sentry-system-test-support/src/main/kotlin/io/sentry/systemtest/util/TestHelper.kt +++ b/sentry-system-test-support/src/main/kotlin/io/sentry/systemtest/util/TestHelper.kt @@ -299,8 +299,7 @@ class TestHelper(backendUrl: String) { processBuilderList.add(jar.absolutePath) val processBuilder = - ProcessBuilder(processBuilderList) - .inheritIO() // forward i/o to current process + ProcessBuilder(processBuilderList).inheritIO() // forward i/o to current process processBuilder.environment().putAll(env) diff --git a/sentry/src/main/java/io/sentry/ShutdownHookIntegration.java b/sentry/src/main/java/io/sentry/ShutdownHookIntegration.java index b4096a72f1..9a70e31cee 100644 --- a/sentry/src/main/java/io/sentry/ShutdownHookIntegration.java +++ b/sentry/src/main/java/io/sentry/ShutdownHookIntegration.java @@ -32,7 +32,8 @@ public void register(final @NotNull IScopes scopes, final @NotNull SentryOptions Objects.requireNonNull(options, "SentryOptions is required"); if (options.isEnableShutdownHook()) { - thread = new Thread(() -> scopes.flush(options.getFlushTimeoutMillis()), "sentry-shutdownhook"); + thread = + new Thread(() -> scopes.flush(options.getFlushTimeoutMillis()), "sentry-shutdownhook"); handleShutdownInProgress( () -> { runtime.addShutdownHook(thread); diff --git a/sentry/src/main/java/io/sentry/transport/AsyncHttpTransport.java b/sentry/src/main/java/io/sentry/transport/AsyncHttpTransport.java index 9c8eb9bb55..149c04f2f8 100644 --- a/sentry/src/main/java/io/sentry/transport/AsyncHttpTransport.java +++ b/sentry/src/main/java/io/sentry/transport/AsyncHttpTransport.java @@ -180,12 +180,12 @@ public void close(final boolean isRestarting) throws IOException { long timeout = options.getFlushTimeoutMillis(); if (!executor.awaitTermination(timeout, TimeUnit.MILLISECONDS)) { options - .getLogger() - .log( - SentryLevel.WARNING, - "Failed to shutdown the async connection async sender within " - + timeout - + " ms. Trying to force it now."); + .getLogger() + .log( + SentryLevel.WARNING, + "Failed to shutdown the async connection async sender within " + + timeout + + " ms. Trying to force it now."); executor.shutdownNow(); if (currentRunnable != null) { // We store to disk any envelope that is currently being sent From 6886aef3d2ffac719abdc38f43b1e1a0449a044c Mon Sep 17 00:00:00 2001 From: Sentry Github Bot Date: Mon, 21 Jul 2025 12:29:59 +0000 Subject: [PATCH 03/10] Format code --- .../kotlin/sentry/systemtest/ConsoleApplicationSystemTest.kt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sentry-samples/sentry-samples-console-opentelemetry-noagent/src/test/kotlin/sentry/systemtest/ConsoleApplicationSystemTest.kt b/sentry-samples/sentry-samples-console-opentelemetry-noagent/src/test/kotlin/sentry/systemtest/ConsoleApplicationSystemTest.kt index 7f5453c9a0..427c930653 100644 --- a/sentry-samples/sentry-samples-console-opentelemetry-noagent/src/test/kotlin/sentry/systemtest/ConsoleApplicationSystemTest.kt +++ b/sentry-samples/sentry-samples-console-opentelemetry-noagent/src/test/kotlin/sentry/systemtest/ConsoleApplicationSystemTest.kt @@ -31,7 +31,7 @@ class ConsoleApplicationSystemTest { "OTEL_METRICS_EXPORTER" to "none", "OTEL_LOGS_EXPORTER" to "none", "OTEL_TRACES_EXPORTER" to "none", - ) + ), ) process.waitFor(30, TimeUnit.SECONDS) From 7cbb0ccbfdbf70f775929e0b5545946188ad4d24 Mon Sep 17 00:00:00 2001 From: Alexander Dinauer Date: Tue, 22 Jul 2025 09:35:57 +0200 Subject: [PATCH 04/10] Update sentry-samples/sentry-samples-console-opentelemetry-noagent/src/test/kotlin/sentry/systemtest/ConsoleApplicationSystemTest.kt --- .../kotlin/sentry/systemtest/ConsoleApplicationSystemTest.kt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sentry-samples/sentry-samples-console-opentelemetry-noagent/src/test/kotlin/sentry/systemtest/ConsoleApplicationSystemTest.kt b/sentry-samples/sentry-samples-console-opentelemetry-noagent/src/test/kotlin/sentry/systemtest/ConsoleApplicationSystemTest.kt index 427c930653..7f5453c9a0 100644 --- a/sentry-samples/sentry-samples-console-opentelemetry-noagent/src/test/kotlin/sentry/systemtest/ConsoleApplicationSystemTest.kt +++ b/sentry-samples/sentry-samples-console-opentelemetry-noagent/src/test/kotlin/sentry/systemtest/ConsoleApplicationSystemTest.kt @@ -31,7 +31,7 @@ class ConsoleApplicationSystemTest { "OTEL_METRICS_EXPORTER" to "none", "OTEL_LOGS_EXPORTER" to "none", "OTEL_TRACES_EXPORTER" to "none", - ), + ) ) process.waitFor(30, TimeUnit.SECONDS) From a00be8017f8879dfea582f717995ccc4bbdff4da Mon Sep 17 00:00:00 2001 From: Alexander Dinauer Date: Mon, 21 Jul 2025 09:15:00 +0200 Subject: [PATCH 05/10] Let queue drain on a restart --- .../io/sentry/ShutdownHookIntegration.java | 2 +- .../sentry/transport/AsyncHttpTransport.java | 27 ++++++++++--------- 2 files changed, 16 insertions(+), 13 deletions(-) diff --git a/sentry/src/main/java/io/sentry/ShutdownHookIntegration.java b/sentry/src/main/java/io/sentry/ShutdownHookIntegration.java index 3d5bccc3d7..b4096a72f1 100644 --- a/sentry/src/main/java/io/sentry/ShutdownHookIntegration.java +++ b/sentry/src/main/java/io/sentry/ShutdownHookIntegration.java @@ -32,7 +32,7 @@ public void register(final @NotNull IScopes scopes, final @NotNull SentryOptions Objects.requireNonNull(options, "SentryOptions is required"); if (options.isEnableShutdownHook()) { - thread = new Thread(() -> scopes.flush(options.getFlushTimeoutMillis())); + thread = new Thread(() -> scopes.flush(options.getFlushTimeoutMillis()), "sentry-shutdownhook"); handleShutdownInProgress( () -> { runtime.addShutdownHook(thread); diff --git a/sentry/src/main/java/io/sentry/transport/AsyncHttpTransport.java b/sentry/src/main/java/io/sentry/transport/AsyncHttpTransport.java index 24f954c0c1..9c8eb9bb55 100644 --- a/sentry/src/main/java/io/sentry/transport/AsyncHttpTransport.java +++ b/sentry/src/main/java/io/sentry/transport/AsyncHttpTransport.java @@ -174,20 +174,23 @@ public void close(final boolean isRestarting) throws IOException { executor.shutdown(); options.getLogger().log(SentryLevel.DEBUG, "Shutting down"); try { - // We need a small timeout to be able to save to disk any rejected envelope - long timeout = isRestarting ? 0 : options.getFlushTimeoutMillis(); - if (!executor.awaitTermination(timeout, TimeUnit.MILLISECONDS)) { - options + // only stop sending events on a real shutdown, not on a restart + if (!isRestarting) { + // We need a small timeout to be able to save to disk any rejected envelope + long timeout = options.getFlushTimeoutMillis(); + if (!executor.awaitTermination(timeout, TimeUnit.MILLISECONDS)) { + options .getLogger() .log( - SentryLevel.WARNING, - "Failed to shutdown the async connection async sender within " - + timeout - + " ms. Trying to force it now."); - executor.shutdownNow(); - if (currentRunnable != null) { - // We store to disk any envelope that is currently being sent - executor.getRejectedExecutionHandler().rejectedExecution(currentRunnable, executor); + SentryLevel.WARNING, + "Failed to shutdown the async connection async sender within " + + timeout + + " ms. Trying to force it now."); + executor.shutdownNow(); + if (currentRunnable != null) { + // We store to disk any envelope that is currently being sent + executor.getRejectedExecutionHandler().rejectedExecution(currentRunnable, executor); + } } } } catch (InterruptedException e) { From ebbbe4c19ef8b8837c40d4f7c8129d55d33f2910 Mon Sep 17 00:00:00 2001 From: Sentry Github Bot Date: Mon, 21 Jul 2025 07:21:45 +0000 Subject: [PATCH 06/10] Format code --- .../kotlin/io/sentry/systemtest/util/TestHelper.kt | 3 +-- .../main/java/io/sentry/ShutdownHookIntegration.java | 3 ++- .../java/io/sentry/transport/AsyncHttpTransport.java | 12 ++++++------ 3 files changed, 9 insertions(+), 9 deletions(-) diff --git a/sentry-system-test-support/src/main/kotlin/io/sentry/systemtest/util/TestHelper.kt b/sentry-system-test-support/src/main/kotlin/io/sentry/systemtest/util/TestHelper.kt index 0117f66d38..73b2acd2ae 100644 --- a/sentry-system-test-support/src/main/kotlin/io/sentry/systemtest/util/TestHelper.kt +++ b/sentry-system-test-support/src/main/kotlin/io/sentry/systemtest/util/TestHelper.kt @@ -299,8 +299,7 @@ class TestHelper(backendUrl: String) { processBuilderList.add(jar.absolutePath) val processBuilder = - ProcessBuilder(processBuilderList) - .inheritIO() // forward i/o to current process + ProcessBuilder(processBuilderList).inheritIO() // forward i/o to current process processBuilder.environment().putAll(env) diff --git a/sentry/src/main/java/io/sentry/ShutdownHookIntegration.java b/sentry/src/main/java/io/sentry/ShutdownHookIntegration.java index b4096a72f1..9a70e31cee 100644 --- a/sentry/src/main/java/io/sentry/ShutdownHookIntegration.java +++ b/sentry/src/main/java/io/sentry/ShutdownHookIntegration.java @@ -32,7 +32,8 @@ public void register(final @NotNull IScopes scopes, final @NotNull SentryOptions Objects.requireNonNull(options, "SentryOptions is required"); if (options.isEnableShutdownHook()) { - thread = new Thread(() -> scopes.flush(options.getFlushTimeoutMillis()), "sentry-shutdownhook"); + thread = + new Thread(() -> scopes.flush(options.getFlushTimeoutMillis()), "sentry-shutdownhook"); handleShutdownInProgress( () -> { runtime.addShutdownHook(thread); diff --git a/sentry/src/main/java/io/sentry/transport/AsyncHttpTransport.java b/sentry/src/main/java/io/sentry/transport/AsyncHttpTransport.java index 9c8eb9bb55..149c04f2f8 100644 --- a/sentry/src/main/java/io/sentry/transport/AsyncHttpTransport.java +++ b/sentry/src/main/java/io/sentry/transport/AsyncHttpTransport.java @@ -180,12 +180,12 @@ public void close(final boolean isRestarting) throws IOException { long timeout = options.getFlushTimeoutMillis(); if (!executor.awaitTermination(timeout, TimeUnit.MILLISECONDS)) { options - .getLogger() - .log( - SentryLevel.WARNING, - "Failed to shutdown the async connection async sender within " - + timeout - + " ms. Trying to force it now."); + .getLogger() + .log( + SentryLevel.WARNING, + "Failed to shutdown the async connection async sender within " + + timeout + + " ms. Trying to force it now."); executor.shutdownNow(); if (currentRunnable != null) { // We store to disk any envelope that is currently being sent From abcd734d17c53dc38860f561ffdcd9c359e7349f Mon Sep 17 00:00:00 2001 From: Sentry Github Bot Date: Mon, 21 Jul 2025 12:29:59 +0000 Subject: [PATCH 07/10] Format code --- .../kotlin/sentry/systemtest/ConsoleApplicationSystemTest.kt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sentry-samples/sentry-samples-console-opentelemetry-noagent/src/test/kotlin/sentry/systemtest/ConsoleApplicationSystemTest.kt b/sentry-samples/sentry-samples-console-opentelemetry-noagent/src/test/kotlin/sentry/systemtest/ConsoleApplicationSystemTest.kt index 7f5453c9a0..427c930653 100644 --- a/sentry-samples/sentry-samples-console-opentelemetry-noagent/src/test/kotlin/sentry/systemtest/ConsoleApplicationSystemTest.kt +++ b/sentry-samples/sentry-samples-console-opentelemetry-noagent/src/test/kotlin/sentry/systemtest/ConsoleApplicationSystemTest.kt @@ -31,7 +31,7 @@ class ConsoleApplicationSystemTest { "OTEL_METRICS_EXPORTER" to "none", "OTEL_LOGS_EXPORTER" to "none", "OTEL_TRACES_EXPORTER" to "none", - ) + ), ) process.waitFor(30, TimeUnit.SECONDS) From a5ba264f4629e07201506fcb8040ca1d1202fd60 Mon Sep 17 00:00:00 2001 From: Alexander Dinauer Date: Tue, 22 Jul 2025 09:35:57 +0200 Subject: [PATCH 08/10] Update sentry-samples/sentry-samples-console-opentelemetry-noagent/src/test/kotlin/sentry/systemtest/ConsoleApplicationSystemTest.kt --- .../kotlin/sentry/systemtest/ConsoleApplicationSystemTest.kt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sentry-samples/sentry-samples-console-opentelemetry-noagent/src/test/kotlin/sentry/systemtest/ConsoleApplicationSystemTest.kt b/sentry-samples/sentry-samples-console-opentelemetry-noagent/src/test/kotlin/sentry/systemtest/ConsoleApplicationSystemTest.kt index 427c930653..7f5453c9a0 100644 --- a/sentry-samples/sentry-samples-console-opentelemetry-noagent/src/test/kotlin/sentry/systemtest/ConsoleApplicationSystemTest.kt +++ b/sentry-samples/sentry-samples-console-opentelemetry-noagent/src/test/kotlin/sentry/systemtest/ConsoleApplicationSystemTest.kt @@ -31,7 +31,7 @@ class ConsoleApplicationSystemTest { "OTEL_METRICS_EXPORTER" to "none", "OTEL_LOGS_EXPORTER" to "none", "OTEL_TRACES_EXPORTER" to "none", - ), + ) ) process.waitFor(30, TimeUnit.SECONDS) From d4b771feb29c950d57784a6362c289ef9aa530f9 Mon Sep 17 00:00:00 2001 From: Alexander Dinauer Date: Tue, 29 Jul 2025 16:24:53 +0200 Subject: [PATCH 09/10] adapt tests --- .../transport/AsyncHttpTransportTest.kt | 21 ++++++++++++------- 1 file changed, 14 insertions(+), 7 deletions(-) diff --git a/sentry/src/test/java/io/sentry/transport/AsyncHttpTransportTest.kt b/sentry/src/test/java/io/sentry/transport/AsyncHttpTransportTest.kt index c7ed2b46aa..c3a7f2ce04 100644 --- a/sentry/src/test/java/io/sentry/transport/AsyncHttpTransportTest.kt +++ b/sentry/src/test/java/io/sentry/transport/AsyncHttpTransportTest.kt @@ -352,16 +352,22 @@ class AsyncHttpTransportTest { } @Test - fun `close with isRestarting true does not await termination`() { - fixture.sentryOptions.flushTimeoutMillis = 123 + fun `close shuts down the executor and runs executing runnable through rejectedExecutionHandler`() { + val rejectedExecutionHandler = mock() val sut = fixture.getSUT() - sut.close(true) + val runnable = mock() - verify(fixture.executor).awaitTermination(eq(0), eq(TimeUnit.MILLISECONDS)) + // Emulate a runnable currently being executed + sut.injectForField("currentRunnable", runnable) + whenever(fixture.executor.rejectedExecutionHandler).thenReturn(rejectedExecutionHandler) + sut.close(false) + + verify(fixture.executor).shutdownNow() + verify(rejectedExecutionHandler).rejectedExecution(eq(runnable), eq(fixture.executor)) } @Test - fun `close shuts down the executor and runs executing runnable through rejectedExecutionHandler`() { + fun `does not shut down executor immediately on restart`() { val rejectedExecutionHandler = mock() val sut = fixture.getSUT() val runnable = mock() @@ -371,8 +377,9 @@ class AsyncHttpTransportTest { whenever(fixture.executor.rejectedExecutionHandler).thenReturn(rejectedExecutionHandler) sut.close(true) - verify(fixture.executor).shutdownNow() - verify(rejectedExecutionHandler).rejectedExecution(eq(runnable), eq(fixture.executor)) + verify(fixture.executor).shutdown() + verify(fixture.executor, never()).shutdownNow() + verify(rejectedExecutionHandler, never()).rejectedExecution(eq(runnable), eq(fixture.executor)) } @Test From af99ae79ea5e6126e641419929f391361293c84c Mon Sep 17 00:00:00 2001 From: Alexander Dinauer Date: Tue, 29 Jul 2025 16:29:09 +0200 Subject: [PATCH 10/10] changelog --- CHANGELOG.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index dd255f9fb2..ad2f1486f1 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -30,6 +30,8 @@ - This was causing Sentry SDK to log warnings: "Sentry Log is disabled and this 'logger' call is a no-op." - Do not use Sentry logging API in Log4j2 if logs are disabled ([#4573](https://github.com/getsentry/sentry-java/pull/4573)) - This was causing Sentry SDK to log warnings: "Sentry Log is disabled and this 'logger' call is a no-op." +- SDKs send queue is no longer shutdown immediately on re-init ([#4564](https://github.com/getsentry/sentry-java/pull/4564)) + - This means we're no longer losing events that have been enqueued right before SDK re-init. ## 8.17.0