go-ethereum/eth
locoholy 5569759238 eth/filters: cap polling filter queues to prevent unbounded memory growth
Polling filters (eth_newFilter, eth_newBlockFilter,
eth_newPendingTransactionFilter) buffer incoming events between
GetFilterChanges calls. If a client polls infrequently the internal
slices (f.logs, f.hashes, f.txs) grow without bound, potentially
consuming hundreds of MB of RAM under high event traffic.

Add MaxPendingItems to Config (default 10 000). When a filter's queue
exceeds this limit the oldest items are dropped to make room for new
ones, keeping memory bounded at the cost of silently losing stale data.

The drop-oldest policy is appropriate here because:
- Events that exceed the cap are already "stale" relative to chain head
- Clients that care about every event should use eth_subscribe instead
  of polling (which is the recommended pattern)

Add a debug log line when items are dropped so operators can detect
clients that poll too infrequently in their logs.

Three new tests verify the cap behaviour for each filter type:
  TestPendingTxFilterQueueCap
  TestBlockFilterQueueCap
  TestLogFilterQueueCap
2026-02-24 11:59:40 +05:00
..
catalyst eth/catalyst: implement testing_buildBlockV1 (#33656) 2026-02-23 15:56:31 +01:00
downloader eth/protocols/eth, eth/protocols/snap: delayed p2p message decoding (#33835) 2026-02-15 21:21:16 +08:00
ethconfig core: standardize slow block JSON output for cross-client metrics (#33655) 2026-01-28 20:58:41 +08:00
fetcher eth/fetcher: refactor test code (#33610) 2026-01-15 11:37:34 -07:00
filters eth/filters: cap polling filter queues to prevent unbounded memory growth 2026-02-24 11:59:40 +05:00
gasestimator eth/gasestimator: check ErrGasLimitTooHigh conditions (#32348) 2025-08-05 19:51:16 +08:00
gasprice eth/gasprice: reduce allocations (#33698) 2026-01-28 20:33:04 +01:00
protocols eth/protocols/eth, eth/protocols/snap: delayed p2p message decoding (#33835) 2026-02-15 21:21:16 +08:00
syncer eth/downloader: keep current syncmode in downloader only (#33157) 2025-12-08 22:49:57 +01:00
tracers eth/catalyst: implement testing_buildBlockV1 (#33656) 2026-02-23 15:56:31 +01:00
api_admin.go eth: ignore genesis block on importChain (#27956) 2023-08-21 13:32:34 -04:00
api_backend.go ethstats: report newPayload processing time to stats server (#33395) 2026-01-05 17:49:30 +01:00
api_backend_test.go core/txpool: add eip2681 check for incoming transactions (#32726) 2025-09-25 13:15:12 +02:00
api_debug.go eth/catalyst: add initial OpenTelemetry tracing for newPayload (#33521) 2026-02-17 17:08:57 +01:00
api_debug_test.go core: consolidate BlockChain constructor options (#31925) 2025-06-19 12:21:15 +02:00
api_miner.go miner: refactor the miner, make the pending block on demand (#28623) 2024-03-06 14:45:03 +02:00
backend.go eth: fix targetView==nil case (#33810) 2026-02-10 14:15:18 +01:00
dropper.go eth: fix panic in randomDuration when min equals max (#33193) 2025-11-19 01:54:53 +08:00
handler.go eth: txs fetch/send log at trace level only (#33541) 2026-01-07 09:52:50 +08:00
handler_eth.go eth/protocols/eth, eth/protocols/snap: delayed p2p message decoding (#33835) 2026-02-15 21:21:16 +08:00
handler_eth_test.go eth/protocols/eth, eth/protocols/snap: delayed p2p message decoding (#33835) 2026-02-15 21:21:16 +08:00
handler_snap.go eth: check snap satelliteness, delegate drop to eth (#22235) 2021-02-02 10:44:36 +02:00
handler_test.go eth/fetcher: add metadata validation in tx announcement (#33378) 2025-12-11 12:11:52 +08:00
peer.go eth/protocols/eth: implement eth/69 (#29158) 2025-05-16 17:10:47 +02:00
peerset.go eth: stabilize tx relay peer selection (#31714) 2025-08-28 16:05:54 +02:00
state_accessor.go eth/catalyst: add initial OpenTelemetry tracing for newPayload (#33521) 2026-02-17 17:08:57 +01:00
sync.go core/txpool/blobpool: filter blob txs with sidecar version (#32577) 2025-09-15 20:48:59 +08:00
sync_test.go eth/downloader: keep current syncmode in downloader only (#33157) 2025-12-08 22:49:57 +01:00