Conversation
A store that adopts a sender's compaction floor owes the suffix up to the sender's advertised tip. While it does, the stream is pending: local authoring, compaction and re-adoption on it are skipped, and every session reports a continuation. The obligation could only clear when that exact tip arrived, and a newer floor was refused. But the tip is pinned nowhere. Once its writer compacted it away, or its device was removed and its entries refused, no store could deliver it, and the stream stayed blocked for good. It spread, too: a fresh peer adopting the floor from the blocked store inherited the same unsatisfiable obligation. Holding out bought no safety. A peer that simply missed the same stretch is re-rooted onto a newer floor, and the floor carries its own contract. Equivocation below a floor is already undetectable once any floor is recorded. A newer floor now re-roots an indebted store like any other peer, and the obligation follows the new root. Removing a device drops any suffix still owed on its chain. Fixes #1489
The suffix-coverage table carries no account, and the same device may still write another account's streams, so a removal drops only the obligation on the stream it is enqueued for. A placeholder removal reaches a real stream on first contact, which re-enqueues it there. Also corrects the clear_delivered doc to the new reasoning. Refs #1489
Contributor
SCIP oracle — resolution reportHeuristic→compiler edge resolution per corpus. Δ compares resolved-after to the
resolved = |
Contributor
|
| Project | rag-rat |
| Branch | fix/purged-suffix-obligation-reroot |
| Testbed | hetzner-bigmem |
⚠️ WARNING: No Threshold found!Without a Threshold, no Alerts will ever be generated.
- LL Hits (hits)
- Instructions (instructions)
- L1 Hits (hits)
- RAM Hits (hits)
- Estimated Cycles (cycles)
- Total read+write (reads/writes)
Click here to create a new Threshold
For more information, see the Threshold documentation.
To only post results if a Threshold exists, set the--ci-only-thresholdsflag.
Click to view all benchmark results
| Benchmark | Estimated Cycles | cycles x 1e6 | Instructions | instructions x 1e6 | L1 Hits | hits x 1e6 | LL Hits | hits x 1e6 | RAM Hits | hits x 1e3 | Total read+write | reads/writes x 1e6 |
|---|---|---|---|---|---|---|---|---|---|---|---|---|
| rag_pipeline::pipeline::index cargo_resolver:resolver_config() | 📈 view plot | 1,752.57 x 1e6 | 📈 view plot | 1,089.42 x 1e6 | 📈 view plot | 1,527.80 x 1e6 | 📈 view plot | 36.16 x 1e6 | 📈 view plot | 1,256.44 x 1e3 | 📈 view plot | 1,565.22 x 1e6 |
| rag_pipeline::pipeline::query_cold cargo_resolver:resolver_built_config() | 📈 view plot | 258.86 x 1e6 | 📈 view plot | 171.01 x 1e6 | 📈 view plot | 243.46 x 1e6 | 📈 view plot | 2.86 x 1e6 | 📈 view plot | 30.92 x 1e3 | 📈 view plot | 246.36 x 1e6 |
| rag_pipeline::pipeline::query_warm cargo_resolver:resolver_index() | 📈 view plot | 230.63 x 1e6 | 📈 view plot | 151.90 x 1e6 | 📈 view plot | 216.86 x 1e6 | 📈 view plot | 2.53 x 1e6 | 📈 view plot | 32.48 x 1e3 | 📈 view plot | 219.42 x 1e6 |
Contributor
|
| Project | rag-rat |
| Branch | fix/purged-suffix-obligation-reroot |
| Testbed | hetzner-bigmem |
Click to view all benchmark results
| Benchmark | Latency | Benchmark Result seconds (s) (Result Δ%) | Upper Boundary seconds (s) (Limit %) |
|---|---|---|---|
| index_time/full_rebuild_cargo | 📈 view plot 🚷 view threshold | 6.17 s(+0.53%)Baseline: 6.14 s | 7.17 s (86.01%) |
Codecov Report✅ All modified and coverable lines are covered by tests. 📢 Thoughts on this report? Let us know! |
This branch has not been deployed
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Fixes #1489.
Problem. A store that adopts a sender's compaction floor owes the suffix up to the sender's advertised tip (
table_sync_suffix_coverage). While it does, the stream is pending:The obligation cleared only when that exact tip arrived, and a newer floor was refused. But the tip is pinned nowhere, so two ordinary events can make it unsatisfiable, after which the stream stays blocked forever:
The block also spreads. A fresh peer adopting the floor from the blocked store inherits the same obligation.
Why the refusal bought no safety. A peer that simply missed the same stretch is re-rooted onto a newer floor, and the floor carries its own contract: every current carrier on the chain is at or above it at the advertising store. Equivocation below a floor is already undetectable once any floor is recorded. MLS (RFC 9420) takes the same position: a member that cannot process the commits it missed rejoins at the current signed state (External Commit, Welcome) rather than waiting for them.
Change
recordupserts, so exact presence of the tip still proves the contiguous suffix from the current root.Tests
a_promised_tip_compacted_away_is_superseded_by_the_senders_next_floor: the writer compacts the promised tip away. Run as-is and after a purge (fix(sync): a purged store with a surviving suffix obligation cannot be re-rooted onto a compacted sender's floor #1489's shape, aRootAdoptpast the witness). The store converges and nothing stays owed. It fails with the old floor filter and with the old insert-or-ignore.removing_the_owed_chains_device_drops_the_obligationinterrupted_floor_delivery_needs_the_promised_suffix_before_serving_a_fresh_peerthat pinned the old refusal is removed. Its sender offered the promised tip itself as a floor, which no honest store advertises. The rest of that test (the obligation survives a restart and a purge until the suffix arrives) is unchanged.A running chain digest that would let stores detect diverging copies, analogous to MLS's epoch authenticator, is noted on #1482.