Repository navigation
repair: harden against dead block edge cases - #12509
emwang-jump wants to merge 1 commit into
Conversation
┌─ ⚡ PERF · c9f1484 vs main@cd5830d ─────────────────────────────────
│ SUITE BASELINE NEW Δ
│ replay tps, mainnet 13,732 tps 13,654 tps · -0.57%
│ bench tps, localnet 670,939 tps 672,017 tps · +0.16%
│ snapshot load, testnet 4.97 s 4.94 s · -0.71%
│ mem total, mainnet 150.35 GiB 150.35 GiB · 0.00%
│ mem total, testnet 86.66 GiB 86.66 GiB · 0.00%
│ clean compile, firedancer 3.16 s 3.20 s · +1.25%
│ binary size, firedancer 57.97 MB 57.97 MB · 0.00%
├─────────────────────────────────────────────────────────────────────
@@ 0 REGRESSIONS · 0 WARNINGS · 0 IMPROVED · 7 NOISE @@
└─────────────────────────────────────────────────────────────────────history · 6 pushes ┌─ HISTORY · Δ vs main, per push, newest first ──────────────────────────────────
│ HEAD TPS BENCH SNAP MEM·M MEM·T COMPILE BINARY
│ c9f1484 -0.57% +0.16% -0.71% 0.00% 0.00% +1.25% 0.00%
│ dc1f320 +0.39% -0.11% -0.54% 0.00% 0.00% -0.06% 0.00%
│ e220fb5 +0.52% -0.21% +0.08% 0.00% 0.00% -0.07% 0.00%
│ 9ee554f +0.56% -0.16% -0.19% 0.00% 0.00% +1.02% 0.00%
+│ ea11c13 -0.76% -0.16% +0.25% 0.00% 0.00% -1.61% 0.00%
│ df1c983 -0.55% +0.35% +0.13% 0.00% 0.00% -0.11% 0.00%
└──────────────────────────────────────────────────────────────────────────────── |
There was a problem hiding this comment.
🟢 Approval recommended
The localized guard enforces the parent-completion invariant while preserving existing recovery behavior, with no blocking issues identified.
No open issues 🎉
What changed in this PR
This PR hardens replay handling for dead-block edge cases by tightening parent validation before processing a slot’s first FEC set.
Changes:
- Treat a parent with
block_id_seenunset as unavailable, using the existing missing-parent recovery path.
| File | Description |
|---|---|
src/discof/replay/fd_replay_tile.c |
Adds a block_id_seen check to the parent lookup guard. |
Review effort: Balanced
df1c983 to
ea11c13
Compare
There was a problem hiding this comment.
🔵 Needs a closer look
Dead-block retention changes cross-tile recovery ordering and block lifetimes, requiring runtime validation of eviction/reconsume, root advancement, and liveness under the reported 60%-stake scenario beyond the added unit assertions.
No open issues 🎉
1 resolved since last review
Review effort: Balanced
9ee554f to
e220fb5
Compare
There was a problem hiding this comment.
🔵 Needs a closer look
The consensus-critical retention changes affect replay/repair ordering and bank lifetimes, but existing tests cover only repair-side behavior and integration validation of actual replay eviction and draining could not be run.
No open issues 🎉
Review effort: Balanced
There was a problem hiding this comment.
🔵 Needs a closer look
The consensus-sensitive repair/replay lifecycle changes need cross-tile runtime validation of asynchronous event ordering, replay-bank pruning, and hard-fork detection beyond the repair-state and queue-ordering unit tests.
No open issues 🎉
Review effort: Balanced
dc1f320 to
c9f1484
Compare
There was a problem hiding this comment.
🔵 Needs a closer look
Dead-block retention changes recovery ordering and finalized-block handling, but tests cover only rotor state, leaving cross-tile redelivery ordering and hard-fork detection unvalidated.
No open issues 🎉
Review effort: Balanced

supposedly in some extremely degenerate cases + fd is at 60% of stake then ....