Skip to content

cp: cherry-pick batch 2 from release/3.4 to main#20405

Merged
AskAlexSharov merged 18 commits into
mainfrom
alex/cp_batch2_35
Apr 10, 2026
Merged

cp: cherry-pick batch 2 from release/3.4 to main#20405
AskAlexSharov merged 18 commits into
mainfrom
alex/cp_batch2_35

Conversation

@AskAlexSharov

@AskAlexSharov AskAlexSharov commented Apr 8, 2026

Copy link
Copy Markdown
Collaborator

Summary

Cherry-pick of release/3.4 PRs:

AskAlexSharov and others added 7 commits April 8, 2026 14:34
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>
Comment thread .github/workflows/test-hive.yml Outdated
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

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

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 rpc HTTP cancel test deterministic/faster by switching to synctest + in-memory connections.
  • Apply a few execution/runtime optimizations (log topic indexing loop, memory size estimation adjustments, faster ParseVersion error path).
  • Preserve stored chain config when --chain name 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.

Comment thread rpc/client_test.go Outdated
Comment thread rpc/client_test.go
Comment thread execution/engineapi/testing_api_test.go Outdated
Comment thread db/integrity/commitment_integrity.go Outdated
@AskAlexSharov AskAlexSharov added this pull request to the merge queue Apr 8, 2026
@github-merge-queue github-merge-queue Bot removed this pull request from the merge queue due to failed status checks Apr 8, 2026
@AskAlexSharov AskAlexSharov added this pull request to the merge queue Apr 10, 2026
Merged via the queue into main with commit 8ceaedc Apr 10, 2026
35 checks passed
@AskAlexSharov AskAlexSharov deleted the alex/cp_batch2_35 branch April 10, 2026 05:38
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

5 participants