Feng Ruohang
f8ca4a8656
fix(replication): keep resync Completed status honest about object counts
...
resyncBucket could publish and persist a Completed resync status that did
not actually cover every object, in two ways:
1. It joined only the producer workers before the deferred markStatus ran,
not the goroutine that folds each worker result into the status, so a
Completed status could omit the last object (or a failed object) until the
periodic ~1m flush (issue #136 ). The same finalization also closed the
result channel on early-return paths while workers were still in flight,
risking a send-on-closed-channel panic and a lost result.
2. markStatus persists under its own background context, so if the parent
context was cancelled during the drain - workers then return without
sending their computed result - or a worker dropped a result on the
resync-cancel signal, a bare Completed was still recorded with counts that
no longer matched the objects seen.
Fixes (count integrity only; the inherited cancellation deadlock, walker leak,
and single-token routing are tracked as separate follow-ups):
- Centralize shutdown in a resyncResults helper whose finish() stops the
workers (closes inputs, waits for them to exit) before closing the result
channel and waiting for the consumer to drain, then lets the deferred
markStatus persist the final counts. finish() now runs on every exit path.
- Record a dropped result via sendResyncResult (a worker consuming the
resync-cancel token returns without sending), and in the finalizer downgrade
a Completed status to Failed via finalResyncStatus when the parent context
was cancelled or a worker aborted - so a persisted Completed never
misrepresents an incomplete resync.
Deterministic tests: an on-disk round-trip of the terminal status (complete
counts stay Completed; parent-cancel-during-drain and worker-abort each
downgrade to Failed), and testing/synctest drain/worker-order assertions that
fail deterministically if a finish() wait is removed. The inherited
cancellation structure (inline Walk, the dispatch send, the worker cancel
branches) is left unchanged for the follow-ups.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com >
Claude-Session: https://claude.ai/code/session_01L7qJqWwy8oFA6aCXWRzXQe
Signed-off-by: Feng Ruohang <rh@vonng.com >
2026-09-06 15:28:55 +08:00
..
2024-06-05 00:51:13 -07:00
2026-09-03 20:54:40 +08:00
2026-09-05 16:21:12 +08:00
2026-09-05 16:21:12 +08:00
2026-09-03 20:54:40 +08:00
2026-08-06 08:46:58 +08:00
2026-09-03 20:54:40 +08:00
2026-09-03 20:54:40 +08:00
2026-09-03 20:54:40 +08:00
2026-09-03 20:54:40 +08:00
2026-09-03 20:54:40 +08:00
2026-09-03 20:54:40 +08:00
2026-09-03 20:54:40 +08:00
2026-09-03 20:54:40 +08:00
2026-09-03 20:54:40 +08:00
2026-09-03 20:54:40 +08:00
2025-08-28 19:39:48 -07:00
2025-10-10 11:57:03 -07:00
2026-09-03 20:54:40 +08:00
2025-03-29 17:56:02 -07:00
2026-08-27 09:05:49 +08:00
2026-09-05 14:50:00 +08:00
2026-08-06 08:46:58 +08:00
2026-09-05 15:33:23 +08:00
2025-09-28 13:59:21 -07:00
2026-08-04 22:48:06 +08:00
2026-09-03 20:54:40 +08:00
2026-09-03 20:54:40 +08:00
2025-05-27 08:19:03 -07:00
2026-08-04 23:02:16 +08:00
2026-09-03 20:54:40 +08:00
2026-09-03 20:54:40 +08:00
2026-08-04 23:02:16 +08:00
2026-09-03 20:54:40 +08:00
2025-09-28 13:59:21 -07:00
2025-09-28 13:59:21 -07:00
2026-09-03 20:54:40 +08:00
2025-09-28 13:59:21 -07:00
2025-09-28 13:59:21 -07:00
2026-03-14 17:39:57 +08:00
2026-09-03 20:54:40 +08:00
2025-09-28 13:59:21 -07:00
2025-09-28 13:59:21 -07:00
2026-03-14 17:39:57 +08:00
2026-09-03 20:54:40 +08:00
2025-09-28 13:59:21 -07:00
2025-09-28 13:59:21 -07:00
2024-01-08 15:22:28 -08:00
2026-09-03 20:54:40 +08:00
2025-09-28 13:59:21 -07:00
2025-09-28 13:59:21 -07:00
2026-03-14 17:39:57 +08:00
2026-09-03 20:54:40 +08:00
2025-09-28 13:59:21 -07:00
2025-09-28 13:59:21 -07:00
2026-09-03 20:54:40 +08:00
2026-08-04 23:02:16 +08:00
2025-08-28 19:39:48 -07:00
2025-04-09 07:28:39 -07:00
2025-01-17 11:19:30 -08:00
2024-01-30 18:11:45 -08:00
2025-09-28 13:59:21 -07:00
2025-03-29 17:56:02 -07:00
2025-09-28 13:59:21 -07:00
2025-09-28 13:59:21 -07:00
2026-09-03 20:54:40 +08:00
2026-08-29 09:10:58 +08:00
2026-08-29 01:33:24 +08:00
2026-09-03 20:54:40 +08:00
2026-09-03 00:45:02 +08:00
2026-09-02 14:06:56 +08:00
2026-09-03 20:54:40 +08:00
2022-10-24 17:44:15 -07:00
2026-09-02 07:08:02 +08:00
2026-09-03 20:54:40 +08:00
2025-03-29 17:56:02 -07:00
2024-06-10 08:50:49 -07:00
2026-09-03 20:54:40 +08:00
2026-09-03 20:54:40 +08:00
2026-09-03 20:54:40 +08:00
2025-09-28 13:59:21 -07:00
2026-08-25 19:24:44 +05:00
2026-08-25 19:24:44 +05:00
2026-09-02 07:20:53 +08:00
2026-09-03 20:54:40 +08:00
2026-09-03 20:54:40 +08:00
2026-09-03 20:54:40 +08:00
2026-09-05 16:58:11 +08:00
2026-09-03 20:54:40 +08:00
2026-09-03 20:54:40 +08:00
2026-09-03 20:54:40 +08:00
2026-09-03 20:54:40 +08:00
2025-09-28 13:59:21 -07:00
2026-09-06 15:28:55 +08:00
2026-09-03 20:54:40 +08:00
2025-09-28 13:59:21 -07:00
2025-09-28 13:59:21 -07:00
2024-08-15 05:04:40 -07:00
2025-02-18 08:25:55 -08:00
2025-09-28 13:59:21 -07:00
2026-03-21 13:49:36 +08:00
2025-04-09 07:28:39 -07:00
2025-09-28 13:59:21 -07:00
2026-09-06 15:28:55 +08:00
2026-09-03 20:54:40 +08:00
2025-09-28 13:59:21 -07:00
2025-09-28 13:59:21 -07:00
2025-09-28 13:59:21 -07:00
2025-09-28 13:59:21 -07:00
2026-09-03 20:54:40 +08:00
2022-10-24 17:44:15 -07:00
2026-08-06 12:43:58 +08:00
2026-08-29 16:00:21 +08:00
2026-09-03 20:54:40 +08:00
2026-09-05 15:51:24 +08:00
2023-09-18 10:00:54 -07:00
2025-04-09 07:28:39 -07:00
2026-09-03 20:54:40 +08:00
2026-08-06 08:46:58 +08:00
2026-08-06 08:46:58 +08:00
2023-06-19 17:53:08 -07:00
2026-08-24 02:22:20 +08:00
2026-09-03 20:54:40 +08:00
2026-09-03 20:54:40 +08:00
2025-08-28 19:39:48 -07:00
2026-09-03 20:54:40 +08:00
2023-07-08 07:31:42 -07:00
2024-03-17 23:42:40 -07:00
2025-08-28 19:39:48 -07:00
2025-09-30 23:06:01 -07:00
2026-09-03 20:54:40 +08:00
2025-09-28 13:59:21 -07:00
2025-09-28 13:59:21 -07:00
2025-09-28 13:59:21 -07:00
2024-01-12 23:51:08 -08:00
2026-08-24 01:08:46 +08:00
2024-03-10 01:15:15 -08:00
2024-05-08 17:51:34 -07:00
2026-08-04 23:02:16 +08:00
2026-09-03 20:54:40 +08:00
2025-09-28 13:59:21 -07:00
2026-09-03 20:54:40 +08:00
2026-09-02 20:04:57 +08:00
2025-08-28 19:39:48 -07:00
2025-09-28 13:59:21 -07:00
2026-09-02 14:06:56 +08:00
2025-08-28 19:39:48 -07:00
2026-09-03 20:54:40 +08:00
2026-09-03 20:54:40 +08:00
2026-09-03 20:54:40 +08:00
2025-04-09 07:28:39 -07:00
2026-08-04 23:00:21 +08:00
2025-08-28 19:39:48 -07:00
2026-08-04 22:48:06 +08:00
2026-08-04 22:48:06 +08:00
2025-08-28 19:39:48 -07:00
2024-05-14 17:11:04 -07:00
2022-08-04 16:10:08 -07:00
2025-08-28 19:39:48 -07:00
2025-08-28 19:39:48 -07:00
2025-08-28 19:39:48 -07:00
2025-09-28 13:59:21 -07:00
2026-09-03 20:54:40 +08:00
2025-08-28 19:39:48 -07:00
2025-08-28 19:39:48 -07:00
2026-09-03 20:54:40 +08:00
2026-09-03 20:54:40 +08:00
2025-10-23 21:05:31 -07:00
2026-08-29 19:28:06 +08:00
2026-09-05 15:33:23 +08:00
2026-08-24 12:20:52 +08:00
2026-09-05 15:33:23 +08:00
2026-08-04 23:00:31 +08:00
2025-10-23 21:05:31 -07:00
2026-09-03 20:54:40 +08:00
2025-09-28 13:59:21 -07:00
2025-09-28 13:59:21 -07:00
2025-08-28 19:39:48 -07:00
2026-09-03 20:54:40 +08:00
2025-09-28 13:59:21 -07:00
2025-09-28 13:59:21 -07:00
2026-09-03 20:54:40 +08:00
2026-09-03 20:54:40 +08:00
2025-08-28 19:39:48 -07:00
2026-09-03 20:54:40 +08:00
2024-01-30 18:11:45 -08:00
2026-09-03 20:54:40 +08:00
2024-04-04 05:04:40 -07:00
2026-09-03 20:54:40 +08:00
2026-08-06 08:46:58 +08:00
2026-08-04 23:02:16 +08:00
2025-08-28 19:39:48 -07:00
2026-09-03 20:54:40 +08:00
2026-09-03 20:54:40 +08:00
2026-08-06 08:46:58 +08:00
2025-08-28 19:39:48 -07:00
2026-09-03 20:54:40 +08:00
2026-09-03 20:54:40 +08:00
2026-09-03 20:54:40 +08:00
2025-05-16 07:27:42 -07:00
2025-09-28 13:59:21 -07:00
2026-09-02 02:31:20 +08:00
2026-09-03 20:54:40 +08:00
2026-08-04 23:02:16 +08:00
2024-06-26 00:44:34 -07:00
2026-08-06 17:27:22 +08:00
2026-08-06 19:09:26 +08:00
2023-01-23 16:42:47 +05:30
2024-09-24 10:13:00 -07:00
2025-09-28 13:59:21 -07:00
2024-09-24 10:13:00 -07:00
2024-05-05 09:56:21 -07:00
2025-08-28 19:39:48 -07:00
2025-08-28 19:39:48 -07:00
2024-10-10 16:40:37 -07:00
2026-09-03 20:54:40 +08:00
2026-09-03 20:54:40 +08:00
2026-09-03 20:54:40 +08:00
2024-03-04 18:50:24 -08:00
2026-08-06 08:46:58 +08:00
2024-04-05 08:17:08 -07:00
2024-04-05 08:17:08 -07:00
2025-08-28 19:39:48 -07:00
2026-09-03 20:54:40 +08:00
2026-09-03 20:54:40 +08:00
2026-09-03 20:54:40 +08:00
2024-05-07 16:55:37 -07:00
2025-09-28 13:59:21 -07:00
2025-09-28 13:59:21 -07:00
2023-07-05 10:40:45 -07:00
2026-08-04 23:02:16 +08:00
2025-09-28 13:59:21 -07:00
2026-09-03 20:54:40 +08:00
2025-09-28 13:59:21 -07:00
2025-09-28 13:59:21 -07:00
2025-08-28 19:39:48 -07:00
2025-09-28 13:59:21 -07:00
2025-04-09 07:28:39 -07:00
2024-07-29 11:10:04 -07:00
2025-04-09 07:28:39 -07:00
2023-11-20 17:09:35 -08:00
2025-01-31 11:54:34 -08:00
2025-08-28 19:39:48 -07:00
2026-09-03 20:54:40 +08:00
2025-09-28 13:59:21 -07:00
2025-09-28 13:59:21 -07:00
2025-08-28 19:39:48 -07:00
2026-09-03 20:54:40 +08:00
2025-08-28 19:39:48 -07:00
2026-09-03 20:54:40 +08:00
2022-10-24 17:44:15 -07:00
2025-08-28 19:39:48 -07:00
2026-08-26 19:02:25 +08:00
2025-09-28 13:59:21 -07:00
2025-09-28 13:59:21 -07:00
2026-09-03 20:54:40 +08:00
2025-04-09 07:28:39 -07:00
2025-05-07 08:37:12 -07:00
2025-09-28 13:59:21 -07:00
2025-09-28 13:59:21 -07:00
2025-05-26 00:06:43 -07:00
2026-09-03 20:54:40 +08:00
2026-08-24 01:08:46 +08:00
2025-10-10 11:57:03 -07:00
2026-09-03 20:54:40 +08:00
2025-09-28 13:59:21 -07:00
2025-09-28 13:59:21 -07:00
2025-03-29 17:56:02 -07:00
2025-09-28 13:59:21 -07:00
2024-09-24 10:13:00 -07:00
2024-05-10 07:50:39 -07:00
2025-06-04 13:45:31 -07:00
2025-09-28 13:59:21 -07:00
2024-05-24 05:50:46 -07:00
2024-05-14 00:25:56 -07:00
2024-03-10 01:15:15 -08:00
2024-05-02 01:20:42 -07:00
2024-04-23 21:10:35 -07:00
2025-02-18 08:25:55 -08:00
2026-09-03 20:54:40 +08:00
2024-06-06 02:36:25 -07:00
2024-05-14 00:27:33 -07:00
2024-08-15 05:04:40 -07:00
2024-05-24 12:29:25 -07:00
2024-06-20 10:55:03 -07:00
2025-03-29 17:56:02 -07:00
2024-04-16 22:10:25 -07:00
2024-03-10 01:15:15 -08:00
2024-06-20 10:55:03 -07:00
2025-02-28 11:33:08 -08:00
2024-08-01 17:55:27 -07:00
2026-09-03 20:54:40 +08:00
2025-09-28 13:59:21 -07:00
2025-09-28 13:59:21 -07:00
2026-09-03 20:54:40 +08:00
2025-08-28 19:39:48 -07:00
2025-09-28 13:59:21 -07:00
2026-06-12 21:08:59 +08:00
2025-10-10 11:57:03 -07:00
2026-09-03 20:54:40 +08:00
2025-09-28 13:59:21 -07:00
2026-09-03 20:54:40 +08:00
2026-08-26 19:02:25 +08:00
2023-11-20 17:09:35 -08:00
2025-09-28 13:59:21 -07:00
2025-08-28 19:39:48 -07:00
2024-08-28 18:40:52 -07:00
2026-08-27 09:05:49 +08:00
2022-12-23 07:46:00 -08:00
2024-04-04 05:04:40 -07:00
2025-09-28 13:59:21 -07:00
2026-08-29 16:00:21 +08:00
2025-10-10 11:57:03 -07:00
2025-08-28 19:39:48 -07:00
2026-09-05 16:17:39 +08:00
2026-09-06 09:25:28 +08:00
2024-02-21 22:26:06 -08:00
2026-09-03 20:54:40 +08:00
2026-09-06 09:26:12 +08:00
2026-09-06 09:51:09 +08:00
2026-09-05 16:17:39 +08:00
2026-08-29 18:18:01 +08:00
2026-09-03 20:54:40 +08:00
2026-08-29 17:23:26 +08:00
2026-09-06 09:26:12 +08:00
2026-09-05 15:51:24 +08:00
2026-08-29 18:15:51 +08:00
2026-09-05 14:50:00 +08:00
2026-09-05 15:33:23 +08:00
2025-04-09 07:28:39 -07:00
2026-08-29 16:00:21 +08:00
2026-09-06 09:25:28 +08:00
2025-07-18 14:56:31 -07:00
2026-09-03 20:54:40 +08:00
2026-08-29 16:00:21 +08:00
2026-08-04 23:00:30 +08:00
2026-09-05 15:07:22 +08:00
2026-08-29 17:32:25 +08:00
2023-09-13 08:14:36 -07:00
2025-09-28 13:59:21 -07:00
2025-02-18 08:25:55 -08:00
2025-08-28 19:39:48 -07:00
2026-08-24 01:08:46 +08:00
2023-09-13 08:14:36 -07:00
2024-04-22 10:49:30 -07:00
2024-02-14 17:09:38 -08:00
2024-02-14 17:09:38 -08:00
2026-08-04 23:02:16 +08:00
2026-09-03 20:54:40 +08:00
2024-09-09 09:58:30 -07:00
2026-08-06 08:46:58 +08:00
2026-09-03 20:54:40 +08:00
2026-09-03 20:54:40 +08:00
2026-09-03 20:54:40 +08:00
2026-09-03 20:54:40 +08:00
2026-09-01 20:50:08 +08:00
2025-08-28 19:39:48 -07:00
2025-08-28 19:39:48 -07:00
2025-10-23 08:10:12 -07:00
2026-08-06 08:46:58 +08:00
2025-08-28 19:39:48 -07:00
2026-08-04 23:02:16 +08:00
2026-08-04 23:02:16 +08:00
2026-09-06 09:25:28 +08:00
2026-09-05 15:07:22 +08:00
2026-09-05 15:07:22 +08:00
2024-07-29 11:10:04 -07:00
2026-09-03 20:54:40 +08:00
2026-08-04 23:02:16 +08:00
2026-09-03 20:54:40 +08:00
2025-08-28 19:39:48 -07:00
2026-09-03 20:54:40 +08:00
2026-09-03 20:54:40 +08:00
2026-08-06 08:46:58 +08:00
2026-09-03 20:54:40 +08:00
2024-02-27 23:02:14 -08:00
2022-10-24 17:44:15 -07:00
2025-02-27 10:43:32 -08:00
2026-09-03 20:54:40 +08:00
2026-09-03 20:54:40 +08:00
2023-02-13 01:26:38 -08:00
2024-09-04 10:02:39 -07:00
2025-08-28 19:39:48 -07:00
2025-08-28 19:39:48 -07:00
2025-04-09 07:28:39 -07:00
2025-10-10 11:57:35 -07:00
2025-10-10 11:57:35 -07:00
2025-04-09 07:28:39 -07:00
2026-09-03 20:54:40 +08:00
2024-12-13 14:19:12 -08:00
2026-08-27 12:46:47 +05:00
2026-09-02 18:49:16 +08:00
2025-09-28 13:59:21 -07:00
2025-09-28 13:59:21 -07:00
2025-08-28 19:39:48 -07:00
2026-09-02 18:49:16 +08:00
2026-09-02 14:06:56 +08:00
2025-09-28 13:59:21 -07:00
2025-09-28 13:59:21 -07:00
2025-08-28 19:39:48 -07:00
2026-09-05 16:21:12 +08:00
2025-05-27 08:19:03 -07:00
2026-06-12 21:08:59 +08:00
2026-06-12 21:08:59 +08:00
2025-08-28 19:39:48 -07:00
2026-06-12 21:08:59 +08:00
2026-08-06 09:28:06 +08:00
2026-06-12 21:08:59 +08:00
2026-09-03 20:54:40 +08:00
2026-09-03 20:54:40 +08:00
2025-09-28 13:59:21 -07:00
2025-09-28 13:59:21 -07:00
2026-06-12 21:08:59 +08:00
2026-08-04 23:00:30 +08:00
2026-08-04 23:00:30 +08:00
2026-09-03 20:54:40 +08:00
2026-08-04 23:00:30 +08:00
2026-08-04 23:02:16 +08:00
2025-08-28 19:39:48 -07:00
2025-09-28 13:59:21 -07:00
2026-04-16 14:46:44 +08:00
2026-08-06 08:46:58 +08:00
2026-09-03 20:54:40 +08:00
2026-09-03 20:54:40 +08:00
2026-08-04 23:02:16 +08:00
2026-09-03 20:54:40 +08:00
2025-09-28 13:59:21 -07:00
2025-09-28 13:59:21 -07:00
2025-08-28 19:39:48 -07:00
2026-09-03 20:54:40 +08:00
2025-09-28 13:59:21 -07:00
2025-09-28 13:59:21 -07:00
2024-02-19 14:54:46 -08:00
2024-04-16 22:09:58 -07:00
2025-08-28 19:39:48 -07:00
2025-04-16 00:34:24 -07:00
2025-02-18 08:25:55 -08:00
2026-08-06 08:46:58 +08:00
2026-08-06 08:46:58 +08:00
2026-08-06 08:46:58 +08:00
2026-09-03 20:54:40 +08:00
2025-08-28 19:39:48 -07:00
2025-08-28 19:39:48 -07:00
2026-09-03 20:54:40 +08:00
2026-08-06 08:46:58 +08:00
2024-10-31 15:10:24 -07:00
2025-03-29 17:56:02 -07:00
2025-09-28 13:59:21 -07:00
2025-06-08 09:13:30 -07:00
2026-08-06 08:46:58 +08:00
2024-07-23 09:36:24 -07:00
2024-07-23 09:36:24 -07:00
2025-08-28 19:39:48 -07:00
2025-04-09 07:28:39 -07:00
2023-11-28 22:35:16 -08:00
2026-08-04 23:00:31 +08:00
2026-08-04 23:00:31 +08:00
2023-03-06 08:56:29 -08:00
2025-08-28 19:39:48 -07:00
2025-08-28 19:39:48 -07:00
2024-08-08 08:29:58 -07:00
2025-09-28 13:59:21 -07:00
2025-09-28 13:59:21 -07:00
2024-10-22 08:30:50 -07:00
2025-09-28 13:59:21 -07:00
2025-09-28 13:59:21 -07:00
2026-08-04 23:02:16 +08:00
2025-08-28 19:39:48 -07:00
2026-08-24 01:08:46 +08:00
2026-08-24 01:08:46 +08:00
2024-03-01 21:11:03 -08:00
2024-03-01 21:11:03 -08:00
2025-08-28 19:39:48 -07:00
2026-08-04 23:00:21 +08:00