v0.9.0-rc.32
·
33 commits
to main
since this release
Fix: tombstone resurrection race in CRDT sync (#218, closes #217). Single-fix release.
Fixed
initiate_syncno longer re-sends tombstoned documents as live snapshots. The send path (initiate_sync_inner) had no tombstone guard, while the receive path (receive_sync_message,apply_state_snapshot) both reject sync for tombstoned docs. Becausestore.getstill returns the pre-delete bytes after a tombstone (separate metadata), a reconnect's "sync existing documents" pass re-sent a deleted doc as aStateSnapshot, racing the tombstone and resurrecting it on the peer when the snapshot applied before the tombstone was recorded. Adds the symmetric send-sidehas_tombstoneguard. Surfaced as the flaky downstream peat-nodequickstart-composedelete gate. Regression test (initiate_sync_skips_tombstoned_document) uses an on-disk store and pins that a tombstoned doc is never sent.