parity: --delay-updates unique staging name + implied --delete-after ordering #317

Closed
opened 2026-09-23 02:10:49 +02:00 by TapTap · 1 comment
Owner

Two residuals on --delay-updates: (1) the fixed .fastsync-stage name is wiped at prepare even if it was a genuine pre-existing destination entry — use a per-run unique name and refuse to wipe a non-owned collision; (2) rsync's --delay-updates implies --delete-after, but FastSync deletes before publication — publish before the deferred delete commit.

Files: src/shared/delay_updates.[ch], src/server/receiver.c (receiver_process/receiver_send_success_frame), src/client/client_cli.c (cli_finalize_config). Risk: atomic publish ordering, --backup interplay, test_temp_dir_exdev.py/test_tmp_delorder.py.

Two residuals on `--delay-updates`: (1) the fixed `.fastsync-stage` name is wiped at prepare even if it was a genuine pre-existing destination entry — use a per-run unique name and refuse to wipe a non-owned collision; (2) rsync's `--delay-updates` implies `--delete-after`, but FastSync deletes before publication — publish before the deferred delete commit. Files: `src/shared/delay_updates.[ch]`, `src/server/receiver.c` (`receiver_process`/`receiver_send_success_frame`), `src/client/client_cli.c` (`cli_finalize_config`). Risk: atomic publish ordering, `--backup` interplay, `test_temp_dir_exdev.py`/`test_tmp_delorder.py`.
TapTap added the enhancement label 2026-09-23 02:10:49 +02:00
Author
Owner

Fixed in PR #328. The receiver now stages under a per-run unique .fastsync-stage.<pid>.<entropy> directory created with O_EXCL, refusing a non-owned collision (a genuine destination entry is never wiped, rsync-verified). --delay-updates now implies --delete-after, and both receivers publish all staged files before the deferred delete commit; --backup files are shielded and a blocking destination dir is cleared at publication under --delete/--force. Residuals: no backup of a deleted extra; crash-leftover staging dirs are not reused. Row ❌ → ⚠️. Closing as completed.

Fixed in PR #328. The receiver now stages under a per-run unique `.fastsync-stage.<pid>.<entropy>` directory created with O_EXCL, refusing a non-owned collision (a genuine destination entry is never wiped, rsync-verified). `--delay-updates` now implies `--delete-after`, and both receivers publish all staged files before the deferred delete commit; `--backup` files are shielded and a blocking destination dir is cleared at publication under `--delete`/`--force`. Residuals: no backup of a *deleted* extra; crash-leftover staging dirs are not reused. Row ❌ → ⚠️. Closing as completed.
Sign in to join this conversation.
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: TapTap/FastSync#317