go-ethereum/core
Felföldi Zsolt 91900e79ea
Some checks are pending
/ Linux Build (push) Waiting to run
/ Linux Build (arm) (push) Waiting to run
/ Docker Image (push) Waiting to run
core/filtermaps: remove filter base row cache, add group read (#31852)
This PR changes the database access of the base part of filter rows that
are stored in groups of 32 adjacent maps for improved database storage
size and data access efficiency.
Before this grouped storage was introduced, filter rows were not cached
because the access pattern of either the index rendering or the search
does not really benefit from caching. Also no mutex was necessary for
filter row access. Storing adjacent rows in groups complicated the
situation as a search typically required reading all or most of adjacent
rows of a group, so in order to implement the single row read operation
without having to read the entire group up to 32 times, a cache for the
base row groups was added. This also introduced data race issues for
concurrenct read/write in the same group which was avoided by locking
the `indexLock` mutex. Unfortunately this also led to slowed down or
temporarily blocked search operations when indexing was in progress.
This PR returns to the original concept of uncached, no-mutex filter map
access by increasing read efficiency in a better way; similiarly to
write operations that already operate on groups of filter maps, now
`getFilterMapRow` is also replaced by `getFilterMapRows` that accepts a
single `rowIndex` and a list of `mapIndices`. It slightly complicates
`singleMatcherInstance.getMatchesForLayer` which now has to collect
groups of map indices accessed in the same row, but in exchange it
guarantees maximum read efficiency while avoiding read/write mutex
interference.

Note: a follow-up refactoring is WIP that further changes the database
access scheme by prodiving an immutable index view to the matcher, makes
the whole indexer more straightforward with no callbacks, and entirely
removes the concept of matcher syncing with `validBlocks` and the
resulting multiple retry logic in `eth/filters/filter.go`. This might
take a bit longer to finish though and in the meantime this change could
hopefully already solve the blocked request issues.
2025-06-03 12:54:13 +02:00
..
filtermaps core/filtermaps: remove filter base row cache, add group read (#31852) 2025-06-03 12:54:13 +02:00
forkid params: add prague timestamp for mainnet (#31535) 2025-04-17 10:46:00 +02:00
history core: initialize history pruning in BlockChain (#31636) 2025-04-15 14:32:46 +02:00
rawdb core/rawdb: integrate eradb backend for RPC (#31604) 2025-06-03 10:47:38 +02:00
state core/state: fix copy of storageChange (#31874) 2025-05-23 13:10:10 +02:00
stateless beacon, core, eth, miner: integrate witnesses into production Geth (#30069) 2024-09-20 16:43:42 +03:00
tracing core/tracing: stringer for gas and nonce change reasons (#31234) 2025-02-28 12:53:56 +01:00
txpool core/txpool: add explicit max blob count limit (#31837) 2025-05-22 11:30:20 +02:00
types eth/protocols/eth: implement eth/69 (#29158) 2025-05-16 17:10:47 +02:00
vm core/vm: fix bls benchmark (#31896) 2025-05-26 10:45:41 +02:00
.gitignore Renamed chain => core 2014-12-04 10:28:02 +01:00
bench_test.go core, ethdb: introduce database sync function (#31703) 2025-05-08 19:10:26 +08:00
block_validator.go core/types: create block's bloom by merging receipts' bloom (#31129) 2025-02-13 18:05:58 +01:00
block_validator_test.go core: initialize history pruning in BlockChain (#31636) 2025-04-15 14:32:46 +02:00
blockchain.go eth/protocols/eth: implement eth/69 (#29158) 2025-05-16 17:10:47 +02:00
blockchain_insert.go core: remove unused queued import status (#31870) 2025-05-23 17:50:25 +02:00
blockchain_reader.go eth/protocols/eth: implement eth/69 (#29158) 2025-05-16 17:10:47 +02:00
blockchain_repair_test.go core/rawdb: integrate eradb backend for RPC (#31604) 2025-06-03 10:47:38 +02:00
blockchain_sethead_test.go core/rawdb: integrate eradb backend for RPC (#31604) 2025-06-03 10:47:38 +02:00
blockchain_snapshot_test.go core/rawdb: integrate eradb backend for RPC (#31604) 2025-06-03 10:47:38 +02:00
blockchain_test.go core/rawdb: integrate eradb backend for RPC (#31604) 2025-06-03 10:47:38 +02:00
chain_makers.go core: fail execution if system call fails to execute (#31639) 2025-04-19 13:42:54 +02:00
chain_makers_test.go params,core: add max and target value to chain config (#31002) 2025-02-04 15:43:18 +01:00
dao_test.go all: remove forkchoicer and reorgNeeded (#29179) 2024-09-04 15:03:06 +02:00
error.go core, eth/downloader: implement pruning mode sync (#31414) 2025-04-03 15:16:35 +02:00
events.go core, eth, ethstats: simplify chain head events (#30601) 2024-10-16 10:32:58 +03:00
evm.go params,core: add max and target value to chain config (#31002) 2025-02-04 15:43:18 +01:00
gaspool.go core, miner: revert block gas counter in case of invalid transaction (#26799) 2023-03-07 05:23:52 -05:00
gen_genesis.go core: go fmt (#29544) 2024-04-16 15:42:16 +03:00
genesis.go core: apply overrides to mainnet chainconfig (#31733) 2025-04-29 08:29:56 +02:00
genesis_alloc.go params: add hoodi testnet definition (#31406) 2025-03-18 12:07:49 +01:00
genesis_test.go params: add hoodi testnet definition (#31406) 2025-03-18 12:07:49 +01:00
headerchain.go core, ethdb: introduce database sync function (#31703) 2025-05-08 19:10:26 +08:00
headerchain_test.go all: nuke total difficulty (#30744) 2025-01-28 18:55:41 +01:00
mkalloc.go accounts, cmd/geth, core: close opened files (#29598) 2024-04-30 15:47:21 +02:00
rlp_test.go core: move genesis alloc types to core/types (#29003) 2024-02-16 19:05:33 +01:00
sender_cacher.go core: use sync.Once for SenderCacher initialization (#31029) 2025-01-16 14:36:45 +01:00
state_prefetcher.go core: implement in-block prefetcher (#31557) 2025-05-08 22:28:16 +08:00
state_processor.go core: fail execution if system call fails to execute (#31639) 2025-04-19 13:42:54 +02:00
state_processor_test.go ethclient: allow passing AuthorizationList to calls (#31198) 2025-04-23 21:01:03 +02:00
state_transition.go core/state, core/vm: update stateless gas costs to follow the verkle-gen-7 testnet (#31014) 2025-05-15 20:43:52 +08:00
stateless.go cmd/evm: improve block/state test runner (#30633) 2024-12-02 15:18:02 +01:00
txindexer.go core: reduce load on txindexer from API (#31752) 2025-05-05 10:07:55 +08:00
txindexer_test.go core/rawdb: integrate eradb backend for RPC (#31604) 2025-06-03 10:47:38 +02:00
types.go all: implement flat deposit requests encoding (#30425) 2024-10-09 12:24:58 +02:00
verkle_witness_test.go core/tracing: state journal wrapper (#30441) 2025-02-05 13:58:25 +01:00