| Comment: | refactor(sync): drop the closing gate a cascade no longer needs
Each phantom-fill cascade batch already reparents, propagates and applies its leaf rechecks before it commits, so a sync's closing crosslink and the repair after a failed round owed the cascades nothing. Remove the cascade count that kept them running: CrosslinkAfterCascades folds into CrosslinkContext, the sync client and handler stop counting cascaded links, and the handler stores files through storeReceivedFile. The closing gate now runs only when its own sweep linked something, for the sweep's leaf rechecks and the reparent pass. Tracked in #432. |
|---|---|
| Timelines: | family | ancestors | descendants | both | main | trunk | perf/tag-repair-batch |
| Files: | files | file ages | folders |
| SHA3-256: |
1ed447441a7d32a8651c7e4192ab3ac0 |
| User & Date: | [email protected] on 2026-10-20 03:13:08.000 |
| Other Links: | branch diff | manifest | tags |
|
2026-10-20
| ||
| 04:47 |
fix(manifest): apply leaf rechecks in the transaction that links the batch
Each link transaction now runs the whole repair gate before it commits: the reparent pass, tag propagation from the parents it linked, and the leaf rechecks it scheduled. Fossil's manifest_crosslink_end runs the reparent pass and leaf_do_pending_checks inside the transaction that linked the check-ins, so a crash can never leave a committed check-in without its leaf row; this does the same. The schedule records whether a transaction linked anything, so one that linked nothing skips the gate. The gate at the end of a sweep or a receive is gone. Finalize repairs only what a caller linked through LinkStored in a transaction it opened itself rather than through ReceiveLinker.WithTx, which is all that can still leave work on the schedule. Tracked in #432. check-in: 8c00d632b7 user: [email protected] tags: main, perf/tag-repair-batch, trunk | |
| 03:13 |
refactor(sync): drop the closing gate a cascade no longer needs
Each phantom-fill cascade batch already reparents, propagates and applies its leaf rechecks before it commits, so a sync's closing crosslink and the repair after a failed round owed the cascades nothing. Remove the cascade count that kept them running: CrosslinkAfterCascades folds into CrosslinkContext, the sync client and handler stop counting cascaded links, and the handler stores files through storeReceivedFile. The closing gate now runs only when its own sweep linked something, for the sweep's leaf rechecks and the reparent pass. Tracked in #432. check-in: 1ed447441a user: [email protected] tags: main, perf/tag-repair-batch, trunk | |
|
2026-10-19
| ||
| 22:07 |
fix(manifest): propagate tags in the transaction that links the batch
Each link transaction (a sweep batch, a receive transaction, a retried waiter) now reparents and propagates from the parents it wrote plink rows for before it commits, as fossil's crosslink propagates from a check-in's parent in the transaction that links it. A link and the propagation it owes commit or roll back together, so a failed gate or an interrupted process can no longer leave a committed plink edge whose parent's tags never reached the child. The closing gate still applies the batch's leaf rechecks once, runs the reparent pass for parent tags no link transaction reached, and propagates from any parent left by a link outside a link transaction. Tracked in #432. check-in: e9eeab7e17 user: [email protected] tags: main, perf/tag-repair-batch, trunk | |