fix(storage): propagate write errors instead of swallowing them in DatabaseCommit#3
Open
wpank wants to merge 1 commit into
Open
Conversation
…tabaseCommit Move the `take_commit_failure()` check from after the entire block execution loop to immediately after each per-transaction `db.commit()` call. This short-circuits block execution on the first QMDB write failure instead of continuing to execute remaining transactions against potentially inconsistent in-memory state. Also enhance the error log in the `DatabaseCommit` impl to include up to 5 affected account addresses for easier diagnosis. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
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.
Summary
take_commit_failure()check from after the entire block execution loop to immediately after each per-transactiondb.commit()call inrevm.rs. This aborts block execution on the first QMDB write failure instead of continuing to execute remaining transactions against potentially inconsistent in-memory state.CRITICALerror log in theDatabaseCommitimpl (adapter.rs) for easier diagnosis of write failures.Problem
The REVM
DatabaseCommit::commit()trait returns(), making error propagation impossible through the standard interface. When a per-transaction commit failed (e.g., disk I/O error), remaining transactions in the block continued executing against potentially stale or inconsistent in-memory state. The commit-failure flag was only checked after the entire block had finished, wasting computation and producing invalid receipts.Test plan
cargo check -p kora-executor -p kora-handlerspassescargo clippy -p kora-executor -p kora-handlers --no-deps -- -D warningspasses cleanCloses refcell#22
🤖 Generated with Claude Code