From ad7740bde4f0f07eaa28430ed01cfd67370a5da3 Mon Sep 17 00:00:00 2001 From: Jamie Pine Date: Sun, 16 Nov 2025 09:30:49 -0800 Subject: [PATCH] refactor: initialize sync state based on existing watermarks in PeerSync - Added logic to determine the initial synchronization state based on the presence of watermarks in sync.db, setting the state to Ready if watermarks exist and Uninitialized if not. - Enhanced logging to provide clear insights into the initial state determination process, improving visibility for debugging and monitoring synchronization behavior. --- core/src/service/sync/peer.rs | 27 ++++++++++++++++++++++++++- 1 file changed, 26 insertions(+), 1 deletion(-) diff --git a/core/src/service/sync/peer.rs b/core/src/service/sync/peer.rs index 973774e81..f98fd3d43 100644 --- a/core/src/service/sync/peer.rs +++ b/core/src/service/sync/peer.rs @@ -195,12 +195,37 @@ impl PeerSync { // Create watermark store for per-resource tracking let watermark_store = ResourceWatermarkStore::new(device_id); + // Determine initial sync state based on existing watermarks in sync.db + // If we have watermarks, we've synced before → start as Ready + // Otherwise → start as Uninitialized and trigger backfill + let initial_state = { + let max_watermark = watermark_store + .get_max_watermark(peer_log.conn()) + .await + .unwrap_or(None); + + if max_watermark.is_some() { + info!( + device_id = %device_id, + max_watermark = ?max_watermark, + "Found existing watermarks in sync.db, starting in Ready state (resuming sync)" + ); + DeviceSyncState::Ready + } else { + info!( + device_id = %device_id, + "No watermarks found in sync.db, starting in Uninitialized state (will backfill)" + ); + DeviceSyncState::Uninitialized + } + }; + Ok(Self { library_id, device_id, db: Arc::new(library.db().conn().clone()), network, - state: Arc::new(RwLock::new(DeviceSyncState::Uninitialized)), + state: Arc::new(RwLock::new(initial_state)), buffer: Arc::new(BufferQueue::new()), last_realtime_activity_per_peer: Arc::new( RwLock::new(std::collections::HashMap::new()),