From 44252431da9ccc63092ea82753df72bec5488563 Mon Sep 17 00:00:00 2001 From: Erik the Implementer Date: Tue, 21 Apr 2026 13:55:00 +0200 Subject: [PATCH 1/3] Move shape_handle into Logger metadata for No-consumer error Keep the log message static so Sentry deduplicates these events instead of treating every shape handle variant as a distinct issue. --- .changeset/fix-no-consumer-log-shape-handle.md | 5 +++++ packages/sync-service/lib/electric/shape_cache.ex | 3 ++- packages/sync-service/test/electric/shape_cache_test.exs | 2 +- 3 files changed, 8 insertions(+), 2 deletions(-) create mode 100644 .changeset/fix-no-consumer-log-shape-handle.md diff --git a/.changeset/fix-no-consumer-log-shape-handle.md b/.changeset/fix-no-consumer-log-shape-handle.md new file mode 100644 index 0000000000..3bd662b712 --- /dev/null +++ b/.changeset/fix-no-consumer-log-shape-handle.md @@ -0,0 +1,5 @@ +--- +'@core/sync-service': patch +--- + +Emit `shape_handle` as Logger metadata (instead of interpolating it into the message body) for the "No consumer process when waiting on initial snapshot creation" error. This keeps the message text static so Sentry can deduplicate these events properly during incidents. diff --git a/packages/sync-service/lib/electric/shape_cache.ex b/packages/sync-service/lib/electric/shape_cache.ex index e8d704bc69..6d37a61d2b 100644 --- a/packages/sync-service/lib/electric/shape_cache.ex +++ b/packages/sync-service/lib/electric/shape_cache.ex @@ -189,7 +189,8 @@ defmodule Electric.ShapeCache do ]) Logger.error( - "No consumer process when waiting on initial snapshot creation for #{shape_handle}" + "No consumer process when waiting on initial snapshot creation", + shape_handle: shape_handle ) {:error, :unknown} diff --git a/packages/sync-service/test/electric/shape_cache_test.exs b/packages/sync-service/test/electric/shape_cache_test.exs index 320bba5e29..d172b2df39 100644 --- a/packages/sync-service/test/electric/shape_cache_test.exs +++ b/packages/sync-service/test/electric/shape_cache_test.exs @@ -1070,7 +1070,7 @@ defmodule Electric.ShapeCacheTest do assert String.contains?( log, - "[error] No consumer process when waiting on initial snapshot creation for #{shape_handle}" + "[error] No consumer process when waiting on initial snapshot creation" ) assert_receive {ShapeCache.ShapeCleaner, :cleanup, ^shape_handle} From 693ee4ee7d4afab1f797da7906830d7d4a613510 Mon Sep 17 00:00:00 2001 From: Erik the Implementer Date: Tue, 21 Apr 2026 14:23:57 +0200 Subject: [PATCH 2/3] Assert shape_handle appears in captured log metadata Co-Authored-By: Claude Opus 4.7 --- packages/sync-service/test/electric/shape_cache_test.exs | 3 +++ 1 file changed, 3 insertions(+) diff --git a/packages/sync-service/test/electric/shape_cache_test.exs b/packages/sync-service/test/electric/shape_cache_test.exs index d172b2df39..06acb14bc6 100644 --- a/packages/sync-service/test/electric/shape_cache_test.exs +++ b/packages/sync-service/test/electric/shape_cache_test.exs @@ -1073,6 +1073,9 @@ defmodule Electric.ShapeCacheTest do "[error] No consumer process when waiting on initial snapshot creation" ) + assert String.contains?(log, shape_handle), + "expected shape_handle #{shape_handle} to be present in log metadata" + assert_receive {ShapeCache.ShapeCleaner, :cleanup, ^shape_handle} assert_receive {ShapeCache.ShapeCleaner, :cleanup, ^subshape_handle} end From 3a97db3709a40ae7ba263394dceb7966a6d7a040 Mon Sep 17 00:00:00 2001 From: Oleksii Sholik Date: Tue, 21 Apr 2026 16:16:02 +0200 Subject: [PATCH 3/3] fixup! Assert shape_handle appears in captured log metadata --- packages/sync-service/test/electric/shape_cache_test.exs | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/packages/sync-service/test/electric/shape_cache_test.exs b/packages/sync-service/test/electric/shape_cache_test.exs index 06acb14bc6..b943b79709 100644 --- a/packages/sync-service/test/electric/shape_cache_test.exs +++ b/packages/sync-service/test/electric/shape_cache_test.exs @@ -1070,12 +1070,9 @@ defmodule Electric.ShapeCacheTest do assert String.contains?( log, - "[error] No consumer process when waiting on initial snapshot creation" + "shape_handle=#{shape_handle} [error] No consumer process when waiting on initial snapshot creation" ) - assert String.contains?(log, shape_handle), - "expected shape_handle #{shape_handle} to be present in log metadata" - assert_receive {ShapeCache.ShapeCleaner, :cleanup, ^shape_handle} assert_receive {ShapeCache.ShapeCleaner, :cleanup, ^subshape_handle} end