diff --git a/.changeset/fix-report-shape-db-stats-noproc.md b/.changeset/fix-report-shape-db-stats-noproc.md new file mode 100644 index 0000000000..9b43a1d81e --- /dev/null +++ b/.changeset/fix-report-shape-db-stats-noproc.md @@ -0,0 +1,5 @@ +--- +'@core/sync-service': patch +--- + +Guard `report_shape_db_stats` telemetry poller against `:noproc` exits when the shape status GenServer terminates during stack restarts, mirroring the existing handling in `report_retained_wal_size`. diff --git a/packages/sync-service/lib/electric/stack_supervisor/telemetry.ex b/packages/sync-service/lib/electric/stack_supervisor/telemetry.ex index ed74295ed5..3983ae487c 100644 --- a/packages/sync-service/lib/electric/stack_supervisor/telemetry.ex +++ b/packages/sync-service/lib/electric/stack_supervisor/telemetry.ex @@ -138,15 +138,20 @@ defmodule Electric.StackSupervisor.Telemetry do end def report_shape_db_stats(stack_id, _telemetry_opts) do - case Electric.ShapeCache.ShapeStatus.ShapeDb.statistics(stack_id) do - {:ok, stats} -> - Electric.Telemetry.OpenTelemetry.execute( - [:electric, :shape_db, :sqlite], - stats, - %{stack_id: stack_id} - ) + try do + case Electric.ShapeCache.ShapeStatus.ShapeDb.statistics(stack_id) do + {:ok, stats} -> + Electric.Telemetry.OpenTelemetry.execute( + [:electric, :shape_db, :sqlite], + stats, + %{stack_id: stack_id} + ) - _ -> + _ -> + :ok + end + catch + :exit, {:noproc, _} -> :ok end end