go-ethereum/eth
locoholy 893dc01268 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-05-27 13:52:48 +05:00
..
catalyst eth/catalyst: count actually-available blobs in getBlobs (#35028) 2026-05-22 13:58:31 +08:00
downloader eth,node: replace the deprecated TypeMux with Feed (#32585) 2026-05-08 10:12:46 +08:00
ethconfig trie: group 2^N binary trie nodes in serialization (#34794) 2026-05-01 15:28:19 +02:00
fetcher Update eth/fetcher/tx_fetcher.go 2026-04-24 12:12:26 +02:00
filters eth/filters: cap polling filter queues to prevent unbounded memory growth 2026-05-27 13:52:48 +05:00
gasestimator core: use uint256 in core.Message (#34934) 2026-05-11 22:25:57 +08:00
gasprice cmd, core, trie, triedb: split CachingDB into merkle + binary dbs. (#34700) 2026-04-17 08:55:54 +08:00
protocols eth/protocols/snap: fix error message (#34976) 2026-05-26 20:45:14 +08:00
syncer eth,node: replace the deprecated TypeMux with Feed (#32585) 2026-05-08 10:12:46 +08:00
tracers core, consensus, internal, eth, miner: construct block accessList (#34957) 2026-05-19 21:51:53 +08:00
api_admin.go eth: ignore genesis block on importChain (#27956) 2023-08-21 13:32:34 -04:00
api_backend.go internal/ethapi: add eth_capabilities RPC method (#33886) 2026-05-27 10:15:09 +02: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 cmd, core, trie, triedb: split CachingDB into merkle + binary dbs. (#34700) 2026-04-17 08:55:54 +08: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,node: replace the deprecated TypeMux with Feed (#32585) 2026-05-08 10:12:46 +08:00
dropper.go eth: fix panic in randomDuration when min equals max (#33193) 2025-11-19 01:54:53 +08:00
handler.go eth,node: replace the deprecated TypeMux with Feed (#32585) 2026-05-08 10:12:46 +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: implement EIP-7975 (eth/70 - partial block receipt lists) (#33153) 2026-03-30 15:17:37 +02: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: implement EIP-7975 (eth/70 - partial block receipt lists) (#33153) 2026-03-30 15:17:37 +02: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 core/vm: global cache for jumpdest bitmaps (#34850) 2026-05-27 09:01:05 +02:00
sync.go miner: add OpenTelemetry spans for block building path (#33773) 2026-03-16 19:24:41 +01:00
sync_test.go eth: implement EIP-7975 (eth/70 - partial block receipt lists) (#33153) 2026-03-30 15:17:37 +02:00