You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
#217 moves txstore and history into column families in one RocksDB database and relies on atomic flush before publishing the persisted tip t. The logical recovery states have Store-level coverage, but the exact process-crash boundaries around flush and tip publication are not exercised end to end.
External timing-based termination cannot reliably hit these short windows. Deterministic coverage requires narrowly scoped, test-only failpoints.
This complements #248, which covers failpoints during reorg stale cleanup. This issue is limited to forward indexing and publication durability.
Proposed failpoints
Add observable pause or panic hooks at:
before_block_flush — after block rows and completion markers have been written, immediately before the atomic txstore + history flush;
after_block_flush_before_tip — after the atomic flush completes, before persisted tip t is updated;
after_tip_before_publish — after persisted tip t is updated, before the in-memory HeaderList is appended/published.
Names are illustrative and can be adjusted to fit the implementation.
Requirements
Inert in normal builds and runs, preferably behind a test-only Cargo feature and/or explicit environment variable.
Emit an unambiguous observable signal when reached, so an external test can kill the process without sleeps or probabilistic timing.
Support pause-until-killed or deliberate process termination semantics.
Avoid introducing a production runtime dependency if a small test-only mechanism is sufficient.
Motivation
#217 moves
txstoreandhistoryinto column families in one RocksDB database and relies on atomic flush before publishing the persisted tipt. The logical recovery states have Store-level coverage, but the exact process-crash boundaries around flush and tip publication are not exercised end to end.External timing-based termination cannot reliably hit these short windows. Deterministic coverage requires narrowly scoped, test-only failpoints.
This complements #248, which covers failpoints during reorg stale cleanup. This issue is limited to forward indexing and publication durability.
Proposed failpoints
Add observable pause or panic hooks at:
before_block_flush— after block rows and completion markers have been written, immediately before the atomictxstore+historyflush;after_block_flush_before_tip— after the atomic flush completes, before persisted tiptis updated;after_tip_before_publish— after persisted tiptis updated, before the in-memoryHeaderListis appended/published.Names are illustrative and can be adjusted to fit the implementation.
Requirements
Recovery assertions
For each failpoint, an integration test should:
SIGKILL;The three expected recovery cases are:
t: completed durable work remains staged and is discovered/skipped or completed on restart before publication;t/before in-memory publication: restart reconstructs the visible chain from durabletand completion markers.Definition of done