cmd/utils/app: skip commitment history integrity checks when disabled#20835
Merged
sudeepdino008 merged 1 commit intoApr 27, 2026
Merged
Conversation
CommitmentHistVal and StateRootVerifyByHistory require commitment history. When commitment history isn't persisted, the former silently "passed" with files=0 (masking misconfiguration) and the latter would fail confusingly. Read the flag once at integrity entry and skip both checks with an informative log line, matching the BorEvents/BorSpans chain-name guard pattern in the same dispatch switch.
AskAlexSharov
approved these changes
Apr 27, 2026
sudeepdino008
added a commit
that referenced
this pull request
Apr 27, 2026
…#20835) ## Summary `seg integrity` runs `CommitmentHistVal` and `StateRootVerifyByHistory` regardless of whether commitment history is persisted on the datadir. Both depend on commitment history `.v` files: - `CheckCommitmentHistVal` iterates `.v` files; when none exist it returns nil after logging `files=0`, which silently masks misconfiguration as a passing check. - `CheckCommitmentHistAtBlkRange` would fail confusingly when trying to read history that isn't there. This PR reads `rawdb.ReadDBCommitmentHistoryEnabled` once at the start of `doIntegrity` and skips both checks with an informative log line when the flag is off. Mirrors the existing `BorEvents` / `BorSpans` chain-guard pattern in the same dispatch switch. The other commitment checks (`CommitmentRoot`, `CommitmentKvi`, `CommitmentKvDeref`, `StateVerify`) operate on the domain `.kv` files and don't depend on history, so they remain unconditional. ## Test plan - [x] `make lint` clean - [x] `go build ./cmd/utils/app/...` succeeds - [x] On a no-history datadir, run `seg integrity --check CommitmentHistVal` and confirm the skip log appears and the command exits 0 instead of "passing" with files=0 - [x] On a history-enabled datadir, confirm `CommitmentHistVal` and `StateRootVerifyByHistory` still execute as before
wmitsuda
added a commit
that referenced
this pull request
Apr 27, 2026
… (#20838) Cherry-picks the integrity-area chain from `main` onto `performance`, in order: 1. #20435 — `integrity: restore StateProgress check` 2. #20680 — `integrity, stagedsync: cap state collation at block snapshots progress` 3. #20714 — `add time budget for integrity checks` 4. #20835 — `cmd/utils/app: skip commitment history integrity checks when disabled` #20714 is the structural refactor of `doIntegrity` (`errgroup.Go(switch{...})` → `runCheck := func{}` + budget loop). Conflicted with performance-only Bloatnet customizations on the same function (#20806, #20810, #20813); resolved by adopting #20714's shape and re-applying the Bloatnet handling for `CommitmentKvDeref`, `CommitmentHistVal`, and `StateRootVerifyByHistory`. `failFast` arg on `CheckCommitmentHistAtBlkRange` preserved (matches performance's signature). Submodule pointer for `execution/tests/execution-spec-tests` left unchanged. `make erigon` + `make lint` clean.
AskAlexSharov
pushed a commit
that referenced
this pull request
Apr 28, 2026
Cherry-pick of #20835 to `release/3.4`.
lupin012
pushed a commit
that referenced
this pull request
May 2, 2026
…#20835) ## Summary `seg integrity` runs `CommitmentHistVal` and `StateRootVerifyByHistory` regardless of whether commitment history is persisted on the datadir. Both depend on commitment history `.v` files: - `CheckCommitmentHistVal` iterates `.v` files; when none exist it returns nil after logging `files=0`, which silently masks misconfiguration as a passing check. - `CheckCommitmentHistAtBlkRange` would fail confusingly when trying to read history that isn't there. This PR reads `rawdb.ReadDBCommitmentHistoryEnabled` once at the start of `doIntegrity` and skips both checks with an informative log line when the flag is off. Mirrors the existing `BorEvents` / `BorSpans` chain-guard pattern in the same dispatch switch. The other commitment checks (`CommitmentRoot`, `CommitmentKvi`, `CommitmentKvDeref`, `StateVerify`) operate on the domain `.kv` files and don't depend on history, so they remain unconditional. ## Test plan - [x] `make lint` clean - [x] `go build ./cmd/utils/app/...` succeeds - [x] On a no-history datadir, run `seg integrity --check CommitmentHistVal` and confirm the skip log appears and the command exits 0 instead of "passing" with files=0 - [x] On a history-enabled datadir, confirm `CommitmentHistVal` and `StateRootVerifyByHistory` still execute as before
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
seg integrityrunsCommitmentHistValandStateRootVerifyByHistoryregardless of whether commitment history is persisted on the datadir. Both depend on commitment history.vfiles:CheckCommitmentHistValiterates.vfiles; when none exist it returns nil after loggingfiles=0, which silently masks misconfiguration as a passing check.CheckCommitmentHistAtBlkRangewould fail confusingly when trying to read history that isn't there.This PR reads
rawdb.ReadDBCommitmentHistoryEnabledonce at the start ofdoIntegrityand skips both checks with an informative log line when the flag is off. Mirrors the existingBorEvents/BorSpanschain-guard pattern in the same dispatch switch.The other commitment checks (
CommitmentRoot,CommitmentKvi,CommitmentKvDeref,StateVerify) operate on the domain.kvfiles and don't depend on history, so they remain unconditional.Test plan
make lintcleango build ./cmd/utils/app/...succeedsseg integrity --check CommitmentHistValand confirm the skip log appears and the command exits 0 instead of "passing" with files=0CommitmentHistValandStateRootVerifyByHistorystill execute as before