Repository navigation
Initialize app from last header on frozen restart for v6.6 - #4448
Conversation
A frozen node processes no blocks after a restart, so ProcessBlock never sends the EVM HTTP and WS start signals and the servers never start. In freeze mode, pass the last stored block header to the app after the handshake. App.InitLastHeader sets checkState from it and sends the start signals. The proxy only forwards the call to apps that implement it, so the ABCI Application interface is unchanged.
|
I'll fix CI failures and address comments from users with write access that start with 'Devin'.
|
|
The latest Buf updates on your PR. Results from workflow Buf / buf (pull_request).
|
Codecov Report❌ Patch coverage is
Additional details and impacted files@@ Coverage Diff @@
## release/v6.6 #4448 +/- ##
================================================
- Coverage 59.11% 58.21% -0.90%
================================================
Files 2231 2157 -74
Lines 184599 175895 -8704
================================================
- Hits 109120 102394 -6726
+ Misses 65634 64360 -1274
+ Partials 9845 9141 -704
Flags with carried forward coverage won't be shown. Click here to find out more.
🚀 New features to boost your workflow:
|
PR SummaryMedium Risk Overview Adds Coverage: unit tests for check state + EVM signals, a freeze-mode restart test in Reviewed by Cursor Bugbot for commit c7bea83. Bugbot is set up for automated code reviews on this repo. Configure here. |
|
@seidroid review |
There was a problem hiding this comment.
This backports the frozen-restart fix to v6.6. It adds InitLastHeader through an optional interface on Proxy, BaseApp and App, so a restarted frozen node sets its checkState from the last stored header and sends the EVM HTTP/WS start signals once. I checked the tree at merge commit b3858f9 and found nothing blocking: the signal channels have a buffer of 1, the sent flags are only touched before the reactors start and from ProcessBlock after that, and the unit test's Setup processes no block, so the signal assertion is real. The codex reading ("nothing found") agrees with this; my only additions are two nits about misplaced doc comments.
Non-blocking
OnStartcallsInitLastHeaderwheneverfreezeHeight > 0, including a node that is still syncing toward its freeze height. That node's EVM servers now start before it processes any block in this session, not after its firstProcessBlock. This looks harmless, but it is a behaviour change for non-frozen freeze-configured nodes and is not mentioned.
2 nits, not posted on the code
app/app.go:1908—signalEVMServersStartandInitLastHeaderwere inserted betweenProcessBlock's doc comment andProcessBlock. Godoc now givesProcessBlock's description tosignalEVMServersStart, andProcessBlockitself has no doc.sei-cosmos/baseapp/abci.go:269— Same problem here:InitLastHeadersits betweenCommit's doc comment andfunc Commit, so the halt-height description now documentsInitLastHeaderandCommithas no doc.
seidroid review · decision approve · session ec1ec75ef2bb43159f194331a1917676 · turn resp_claude_355bda7d4fe5d8e5baefef962ce2edfd · item f2133e293a8351c6bbdc7661f5f692eb
Findings: 0 blocking | 1 non-blocking | 0 posted inline
Systematic changelog re-generation for the v6.6.4 patch release. Adds the PRs merged to `release/v6.6` since v6.6.3, as reported by `scripts/generate-changelog.sh release/v6.5 release/v6.6`: - #4448 Initialize app from last header on frozen restart for v6.6 - #4056 Bump version to v6.6.3 in prep for patch release - #4055 Backport `release/v6.6`: Update v6.6 change log in prep to cut v6.6.3 patch Made with [Cursor](https://cursor.com) Co-authored-by: Cursor <cursoragent@cursor.com>
This is the v6.6 version of #4447. A node in freeze mode halts one block below its freeze height and never processes another block. On v6.6 the EVM HTTP and WS servers wait for start signals that only
ProcessBlocksends, so once a frozen node restarts they never start. The node keeps its data and its Tendermint RPC, but EVM RPC stays down.frozen-6-7-0runs v6.6.3 and hits this on every restart.v6.6 has no
InitLastHeaderin the ABCIApplicationinterface, so #4447 cannot be cherry-picked as is.Proxy.InitLastHeaderforwards the call only to apps that implement it, which leaves the interface unchanged.BaseApp.InitLastHeadersets checkState from the header, asCommitdoes.App.InitLastHeadercalls it and then sends the start signals throughsignalEVMServersStart, whichProcessBlocknow also uses, so each signal is still sent once.nodeImpl.OnStartmakes the same freeze-only call as on main, with the block meta atstate.LastBlockHeight.TestFrozenNodeServesEVMRPCAfterRestartrestarts seid on the height-10 frozen node in the frozen RPC router cluster. Locally it timed out with the v6.6.3 binary and passed with this change.Part of PLT-1370.