cp: cherry-pick batch 2 from release/3.4 to main#20405
Merged
Merged
Conversation
Replace real TCP connections with in-memory net.Pipe-based listener for
the HTTP cancel test, wrapped in synctest.Test for deterministic
fake-time execution. The test now runs in ~0s instead of timing out on
slow CI runners.
WebSocket cancel test keeps real TCP due to complex goroutine shutdown
dependencies incompatible with synctest's bubble requirements.
err:
```
[WARN] [04-07|01:51:47.496] Cannot register RPC callback [invalidRets1] - error must the last return value
[WARN] [04-07|01:51:47.496] Cannot register RPC callback [invalidRets2] - error must the last return value
[WARN] [04-07|01:51:47.497] Cannot register RPC callback [invalidRets3] - maximum 2 return values are allowed, got 3
[WARN] [04-07|01:51:47.507] Cannot register RPC callback [invalidRets1] - error must the last return value
[WARN] [04-07|01:51:47.507] Cannot register RPC callback [invalidRets2] - error must the last return value
[WARN] [04-07|01:51:47.507] Cannot register RPC callback [invalidRets3] - maximum 2 return values are allowed, got 3
[WARN] [04-07|01:51:47.510] Cannot register RPC callback [invalidRets1] - error must the last return value
[WARN] [04-07|01:51:47.510] Cannot register RPC callback [invalidRets2] - error must the last return value
[WARN] [04-07|01:51:47.510] Cannot register RPC callback [invalidRets3] - maximum 2 return values are allowed, got 3
[WARN] [04-07|01:51:47.512] [rpc] served method=test_returnError reqid=1 err=testError errdata="testError data"
[WARN] [04-07|01:51:47.513] Cannot register RPC callback [invalidRets1] - error must the last return value
[WARN] [04-07|01:51:47.513] Cannot register RPC callback [invalidRets2] - error must the last return value
[WARN] [04-07|01:51:47.513] Cannot register RPC callback [invalidRets3] - maximum 2 return values are allowed, got 3
[WARN] [04-07|01:51:47.515] [rpc] served method=no_such_method reqid=3 err="the method no_such_method does not exist/is not available"
[WARN] [04-07|01:51:47.516] Cannot register RPC callback [invalidRets1] - error must the last return value
[WARN] [04-07|01:51:47.516] Cannot register RPC callback [invalidRets2] - error must the last return value
[WARN] [04-07|01:51:47.516] Cannot register RPC callback [invalidRets3] - maximum 2 return values are allowed, got 3
[WARN] [04-07|01:51:47.517] Cannot register RPC callback [invalidRets1] - error must the last return value
[WARN] [04-07|01:51:47.517] Cannot register RPC callback [invalidRets2] - error must the last return value
[WARN] [04-07|01:51:47.518] Cannot register RPC callback [invalidRets3] - maximum 2 return values are allowed, got 3
[WARN] [04-07|01:51:47.519] [rpc] served method=eth_subscribe reqid=1 err="no \"foo_bar\" subscription in eth namespace"
[WARN] [04-07|01:51:47.519] [rpc] served method=eth_subscribe reqid=2 err="no \"foo_bar\" subscription in eth namespace"
[WARN] [04-07|01:51:47.520] Cannot register RPC callback [invalidRets1] - error must the last return value
[WARN] [04-07|01:51:47.520] Cannot register RPC callback [invalidRets2] - error must the last return value
[WARN] [04-07|01:51:47.520] Cannot register RPC callback [invalidRets3] - maximum 2 return values are allowed, got 3
[WARN] [04-07|01:51:47.523] Cannot register RPC callback [invalidRets1] - error must the last return value
[WARN] [04-07|01:51:47.523] Cannot register RPC callback [invalidRets2] - error must the last return value
[WARN] [04-07|01:51:47.524] Cannot register RPC callback [invalidRets3] - maximum 2 return values are allowed, got 3
[WARN] [04-07|01:51:47.527] Cannot register RPC callback [invalidRets1] - error must the last return value
[WARN] [04-07|01:51:47.527] Cannot register RPC callback [invalidRets2] - error must the last return value
[WARN] [04-07|01:51:47.527] Cannot register RPC callback [invalidRets3] - maximum 2 return values are allowed, got 3
[WARN] [04-07|01:51:47.563] Cannot register RPC callback [invalidRets1] - error must the last return value
[WARN] [04-07|01:51:47.563] Cannot register RPC callback [invalidRets2] - error must the last return value
[WARN] [04-07|01:51:47.563] Cannot register RPC callback [invalidRets3] - maximum 2 return values are allowed, got 3
[WARN] [04-07|01:51:56.015] Cannot register RPC callback [invalidRets1] - error must the last return value
[WARN] [04-07|01:51:56.015] Cannot register RPC callback [invalidRets2] - error must the last return value
[WARN] [04-07|01:51:56.015] Cannot register RPC callback [invalidRets3] - maximum 2 return values are allowed, got 3
[WARN] [04-07|01:51:56.019] Cannot register RPC callback [invalidRets1] - error must the last return value
[WARN] [04-07|01:51:56.019] Cannot register RPC callback [invalidRets2] - error must the last return value
[WARN] [04-07|01:51:56.019] Cannot register RPC callback [invalidRets3] - maximum 2 return values are allowed, got 3
[WARN] [04-07|01:51:56.103] Cannot register RPC callback [invalidRets1] - error must the last return value
[WARN] [04-07|01:51:56.103] Cannot register RPC callback [invalidRets2] - error must the last return value
[WARN] [04-07|01:51:56.103] Cannot register RPC callback [invalidRets3] - maximum 2 return values are allowed, got 3
[WARN] [04-07|01:51:58.107] Cannot register RPC callback [invalidRets1] - error must the last return value
[WARN] [04-07|01:51:58.107] Cannot register RPC callback [invalidRets2] - error must the last return value
[WARN] [04-07|01:51:58.107] Cannot register RPC callback [invalidRets3] - maximum 2 return values are allowed, got 3
[WARN] [04-07|01:52:32.735] Cannot register RPC callback [invalidRets1] - error must the last return value
[WARN] [04-07|01:52:32.735] Cannot register RPC callback [invalidRets2] - error must the last return value
[WARN] [04-07|01:52:32.735] Cannot register RPC callback [invalidRets3] - maximum 2 return values are allowed, got 3
[WARN] [04-07|01:52:32.737] Cannot register RPC callback [invalidRets1] - error must the last return value
[WARN] [04-07|01:52:32.737] Cannot register RPC callback [invalidRets2] - error must the last return value
[WARN] [04-07|01:52:32.737] Cannot register RPC callback [invalidRets3] - maximum 2 return values are allowed, got 3
[WARN] [04-07|01:52:32.737] Cannot register RPC callback [invalidRets1] - error must the last return value
[WARN] [04-07|01:52:32.737] Cannot register RPC callback [invalidRets2] - error must the last return value
[WARN] [04-07|01:52:32.737] Cannot register RPC callback [invalidRets3] - maximum 2 return values are allowed, got 3
[WARN] [04-07|01:52:32.738] Cannot register RPC callback [invalidRets1] - error must the last return value
[WARN] [04-07|01:52:32.738] Cannot register RPC callback [invalidRets2] - error must the last return value
[WARN] [04-07|01:52:32.738] Cannot register RPC callback [invalidRets3] - maximum 2 return values are allowed, got 3
[WARN] [04-07|01:52:32.740] [rpc] served method=unknown_method reqid=2 err="the method unknown_method does not exist/is not available"
[WARN] [04-07|01:52:32.741] Cannot register RPC callback [invalidRets1] - error must the last return value
[WARN] [04-07|01:52:32.741] Cannot register RPC callback [invalidRets2] - error must the last return value
[WARN] [04-07|01:52:32.741] Cannot register RPC callback [invalidRets3] - maximum 2 return values are allowed, got 3
[WARN] [04-07|01:52:32.743] Cannot register RPC callback [invalidRets1] - error must the last return value
[WARN] [04-07|01:52:32.743] Cannot register RPC callback [invalidRets2] - error must the last return value
[WARN] [04-07|01:52:32.743] Cannot register RPC callback [invalidRets3] - maximum 2 return values are allowed, got 3
[WARN] [04-07|01:52:32.744] Cannot register RPC callback [invalidRets1] - error must the last return value
[WARN] [04-07|01:52:32.744] Cannot register RPC callback [invalidRets2] - error must the last return value
[WARN] [04-07|01:52:32.744] Cannot register RPC callback [invalidRets3] - maximum 2 return values are allowed, got 3
[WARN] [04-07|01:52:32.745] Cannot register RPC callback [invalidRets1] - error must the last return value
[WARN] [04-07|01:52:32.745] Cannot register RPC callback [invalidRets2] - error must the last return value
[WARN] [04-07|01:52:32.745] Cannot register RPC callback [invalidRets3] - maximum 2 return values are allowed, got 3
[WARN] [04-07|01:52:32.746] [rpc] served method=test_echo reqid=2 err="missing value for required argument 0"
[WARN] [04-07|01:52:32.746] Cannot register RPC callback [invalidRets1] - error must the last return value
[WARN] [04-07|01:52:32.747] Cannot register RPC callback [invalidRets2] - error must the last return value
[WARN] [04-07|01:52:32.747] Cannot register RPC callback [invalidRets3] - maximum 2 return values are allowed, got 3
[WARN] [04-07|01:52:32.748] [rpc] served method=test_echo reqid=2 err="missing value for required argument 0"
[WARN] [04-07|01:52:32.748] [rpc] served method=test_echo reqid=2 err="missing value for required argument 1"
[WARN] [04-07|01:52:32.750] Cannot register RPC callback [invalidRets1] - error must the last return value
[WARN] [04-07|01:52:32.750] Cannot register RPC callback [invalidRets2] - error must the last return value
[WARN] [04-07|01:52:32.750] Cannot register RPC callback [invalidRets3] - maximum 2 return values are allowed, got 3
[WARN] [04-07|01:52:32.751] [rpc] served method=test_echo reqid=3 err="non-array args"
[WARN] [04-07|01:52:32.751] Cannot register RPC callback [invalidRets1] - error must the last return value
[WARN] [04-07|01:52:32.751] Cannot register RPC callback [invalidRets2] - error must the last return value
[WARN] [04-07|01:52:32.751] Cannot register RPC callback [invalidRets3] - maximum 2 return values are allowed, got 3
[WARN] [04-07|01:52:32.752] Cannot register RPC callback [invalidRets1] - error must the last return value
[WARN] [04-07|01:52:32.752] Cannot register RPC callback [invalidRets2] - error must the last return value
[WARN] [04-07|01:52:32.752] Cannot register RPC callback [invalidRets3] - maximum 2 return values are allowed, got 3
[WARN] [04-07|01:52:32.753] [rpc] served method=invalid_method reqid=2 err="the method invalid_method does not exist/is not available"
[WARN] [04-07|01:52:32.754] Cannot register RPC callback [invalidRets1] - error must the last return value
[WARN] [04-07|01:52:32.754] Cannot register RPC callback [invalidRets2] - error must the last return value
[WARN] [04-07|01:52:32.754] Cannot register RPC callback [invalidRets3] - maximum 2 return values are allowed, got 3
[WARN] [04-07|01:52:32.754] Cannot register RPC callback [invalidRets1] - error must the last return value
[WARN] [04-07|01:52:32.754] Cannot register RPC callback [invalidRets2] - error must the last return value
[WARN] [04-07|01:52:32.755] Cannot register RPC callback [invalidRets3] - maximum 2 return values are allowed, got 3
[WARN] [04-07|01:52:32.755] Cannot register RPC callback [invalidRets1] - error must the last return value
[WARN] [04-07|01:52:32.755] Cannot register RPC callback [invalidRets2] - error must the last return value
[WARN] [04-07|01:52:32.755] Cannot register RPC callback [invalidRets3] - maximum 2 return values are allowed, got 3
[WARN] [04-07|01:52:32.757] Cannot register RPC callback [invalidRets1] - error must the last return value
[WARN] [04-07|01:52:32.757] Cannot register RPC callback [invalidRets2] - error must the last return value
[WARN] [04-07|01:52:32.757] Cannot register RPC callback [invalidRets3] - maximum 2 return values are allowed, got 3
[WARN] [04-07|01:52:32.758] Cannot register RPC callback [invalidRets1] - error must the last return value
[WARN] [04-07|01:52:32.758] Cannot register RPC callback [invalidRets2] - error must the last return value
[WARN] [04-07|01:52:32.758] Cannot register RPC callback [invalidRets3] - maximum 2 return values are allowed, got 3
[WARN] [04-07|01:52:32.760] Cannot register RPC callback [invalidRets1] - error must the last return value
[WARN] [04-07|01:52:32.760] Cannot register RPC callback [invalidRets2] - error must the last return value
[WARN] [04-07|01:52:32.760] Cannot register RPC callback [invalidRets3] - maximum 2 return values are allowed, got 3
[WARN] [04-07|01:52:32.771] Cannot register RPC callback [invalidRets1] - error must the last return value
[WARN] [04-07|01:52:32.771] Cannot register RPC callback [invalidRets2] - error must the last return value
[WARN] [04-07|01:52:32.771] Cannot register RPC callback [invalidRets3] - maximum 2 return values are allowed, got 3
[WARN] [04-07|01:52:44.363] Cannot register RPC callback [invalidRets1] - error must the last return value
[WARN] [04-07|01:52:44.363] Cannot register RPC callback [invalidRets2] - error must the last return value
[WARN] [04-07|01:52:44.363] Cannot register RPC callback [invalidRets1] - error must the last return value
[WARN] [04-07|01:52:44.363] Cannot register RPC callback [invalidRets3] - maximum 2 return values are allowed, got 3
[WARN] [04-07|01:52:44.363] Cannot register RPC callback [invalidRets2] - error must the last return value
[WARN] [04-07|01:52:44.363] Cannot register RPC callback [invalidRets3] - maximum 2 return values are allowed, got 3
[WARN] [04-07|01:52:44.363] Cannot register RPC callback [invalidRets1] - error must the last return value
[WARN] [04-07|01:52:44.363] Cannot register RPC callback [invalidRets2] - error must the last return value
[WARN] [04-07|01:52:44.363] Cannot register RPC callback [invalidRets3] - maximum 2 return values are allowed, got 3
--- FAIL: TestClientCancelWebsocket (1.00s)
panic: read tcp 127.0.0.1:59236->127.0.0.1:33899: read: connection reset by peer [recovered, repanicked]
goroutine 66 [running]:
testing.tRunner.func1.2({0x117cd40, 0xc000059720})
/opt/hostedtoolcache/go/1.25.8/x64/src/testing/testing.go:1872 +0x419
testing.tRunner.func1()
/opt/hostedtoolcache/go/1.25.8/x64/src/testing/testing.go:1875 +0x683
panic({0x117cd40?, 0xc000059720?})
/opt/hostedtoolcache/go/1.25.8/x64/src/runtime/panic.go:783 +0x132
github.com/erigontech/erigon/rpc.httpTestClient(0xc000324180, {0x11fcef1, 0x2}, 0xc000059120)
/home/runner/work/erigon/erigon/rpc/client_test.go:619 +0x6b9
github.com/erigontech/erigon/rpc.testClientCancel({0x11fcef1, 0x2}, 0xc000102e00, {0x136dd10, 0xc000300c60})
/home/runner/work/erigon/erigon/rpc/client_test.go:206 +0x256
github.com/erigontech/erigon/rpc.TestClientCancelWebsocket(0xc000102e00)
/home/runner/work/erigon/erigon/rpc/client_test.go:166 +0x58
testing.tRunner(0xc000102e00, 0x1241000)
/opt/hostedtoolcache/go/1.25.8/x64/src/testing/testing.go:1934 +0x21d
created by testing.(*T).Run in goroutine 1
/opt/hostedtoolcache/go/1.25.8/x64/src/testing/testing.go:1997 +0x9d3
goroutine 1 [chan receive]:
testing.tRunner.func1()
/opt/hostedtoolcache/go/1.25.8/x64/src/testing/testing.go:1891 +0x9ad
testing.tRunner(0xc00037e1c0, 0xc000053ae0)
/opt/hostedtoolcache/go/1.25.8/x64/src/testing/testing.go:1940 +0x256
testing.runTests(0xc00035c3c0, {0x198f6a0, 0x28, 0x28}, {0x0?, 0x4bba45?, 0x1999960?})
/opt/hostedtoolcache/go/1.25.8/x64/src/testing/testing.go:2475 +0x96d
testing.(*M).Run(0xc00037a140)
/opt/hostedtoolcache/go/1.25.8/x64/src/testing/testing.go:2337 +0xed5
main.main()
_testmain.go:129 +0x165
goroutine 37 [chan receive]:
```
…d copy (#20372) ## Summary - Replace `for _, topic := range lg.Topics` with `for i := range lg.Topics` in `applyLogsAndTraces4` - Avoids copying each `common.Hash` (32 bytes) on every iteration; uses index access instead ## Test plan - [ ] `go test ./execution/state/...`
…'t match known chain (#20367) **[SharovBot]** - Fix longstanding Hive EEST `consume-engine` regression where all 61,756 tests fail with `Unexpected status on forkchoice updated to genesis: PayloadStatusEnum.INVALID` - Root cause: when erigon starts with `--networkid 1` but a custom genesis (as in Hive EEST tests), it defaults `chainName` to `"mainnet"` and overwrites the stored chain config (TTD=0) with mainnet config (TTD=58750000000000000000000), causing every forkchoice update to genesis to be rejected as "before TTD" - Fix adds a genesis hash comparison in `WriteGenesisBlock`: if the stored genesis hash doesn't match the known chain spec's genesis hash, the stored config is preserved - [x] `go build ./...` passes - [x] `go test ./execution/state/genesiswrite/...` passes - [x] `go test ./execution/engineapi/...` passes - [ ] Hive EEST `consume-engine` tests should pass (or at least not fail universally with TTD error) Co-authored-by: Giulio rebuffo <giulio.rebuffo@gmail.com> 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-authored-by: root <giulio.rebuffo@gmail.com>
return static err instead of errorf - to reduce allocations
no i see: ``` [INFO] [04-07|03:47:24.324] [4/6 Execution] serial executed blk=10501877 blks=441 blk/s=22 txs=89.08k tx/s=4.45k gas/s=254.40M tgas/s=0(0) aratio=0.0 tdur=0s trdur=0s(0.00%) rd=0 rd/s=0 buf=9.9GB/10.0GB bdur=22ms ucgas=255.45G alloc=35.4GB sys=98.6GB isForkValidation=false isBlockProduction=false isApplyingBlocks=true [INFO] [04-07|03:47:33.725] [p2p] GoodPeers eth68=74 eth69=120 [INFO] [04-07|03:47:39.246] [mem] memory stats Rss=168.1GB Size=0B Pss=168.1GB SharedClean=2.2MB SharedDirty=0B PrivateClean=116.9GB PrivateDirty=51.2GB Referenced=110.6GB Anonymous=51.2GB Swap=0B alloc=37.6GB sys=98.6GB [INFO] [04-07|03:47:41.683] Caplin P2P app=caplin peers_count=296 [INFO] [04-07|03:47:44.357] [4/6 Execution] serial executed blk=10502328 blks=451 blk/s=22 txs=86.33k tx/s=4.30k gas/s=252.06M tgas/s=0(0) aratio=0.0 tdur=0s trdur=0s(0.00%) rd=0 rd/s=0 buf=10.0GB/10.0GB bdur=22ms ucgas=260.50G alloc=38.8GB sys=98.6GB isForkValidation=false isBlockProduction=false isApplyingBlocks=true [INFO] [04-07|03:47:44.362] periodic commit check block=10502328 txNum=792513438 commitment=4.383236ms ``` 10gb estimate turned into 5gb result membatch.
- Cherry-pick of #20370 --------- Co-authored-by: yperbasis <andrey.ashikhmin@gmail.com> Co-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com> Co-authored-by: Muzry <muzrry@gmail.com> Co-authored-by: muzry.li <muzry.li1@ambergroup.io>
yperbasis
requested changes
Apr 8, 2026
The cherry-pick from release/3.4 reverted the sed pattern to only match -alpine suffixes, but upstream Hive now uses -trixie. Restore the generic pattern (golang:[0-9.]*-) so all distro suffixes are handled. https://claude.ai/code/session_015vdXynCZ9mbKiDUfZx9Y1F
Contributor
There was a problem hiding this comment.
Pull request overview
Cherry-pick batch from release/3.4 to main, bringing in a set of CI/test stability fixes plus several execution/state and utility optimizations.
Changes:
- Make
rpcHTTP cancel test deterministic/faster by switching tosynctest+ in-memory connections. - Apply a few execution/runtime optimizations (log topic indexing loop, memory size estimation adjustments, faster
ParseVersionerror path). - Preserve stored chain config when
--chainname doesn’t match the DB genesis hash (custom genesis scenarios).
Reviewed changes
Copilot reviewed 7 out of 7 changed files in this pull request and generated 4 comments.
Show a summary per file
| File | Description |
|---|---|
rpc/client_test.go |
Refactors cancel tests; adds synctest + in-memory listener/client helper. |
execution/state/rw_v3.go |
Avoids per-topic common.Hash copies; updates batch size estimation logic. |
execution/state/genesiswrite/genesis_write.go |
Keeps stored chain config when chain name’s genesis hash doesn’t match DB genesis. |
execution/engineapi/testing_api_test.go |
Adds a GetForkChoice stub method for tests. |
db/version/file_version.go |
Optimizes ParseVersion to reduce allocations; introduces ErrInvalidVersion. |
db/version/file_version_test.go |
Expands ParseVersion test cases and asserts ErrInvalidVersion. |
db/integrity/commitment_integrity.go |
Changes blk/sec logging calculation/format for commitment history checks. |
💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.
sudeepdino008
approved these changes
Apr 8, 2026
yperbasis
approved these changes
Apr 8, 2026
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
Cherry-pick of release/3.4 PRs: