lighthouse/beacon_node/store/src
Michael Sproul a290a3c537 Add configurable block replayer (#2863)
## Issue Addressed

Successor to #2431

## Proposed Changes

* Add a `BlockReplayer` struct to abstract over the intricacies of calling `per_slot_processing` and `per_block_processing` while avoiding unnecessary tree hashing.
* Add a variant of the forwards state root iterator that does not require an `end_state`.
* Use the `BlockReplayer` when reconstructing states in the database. Use the efficient forwards iterator for frozen states.
* Refactor the iterators to remove `Arc<HotColdDB>` (this seems to be neater than making _everything_ an `Arc<HotColdDB>` as I did in #2431).

Supplying the state roots allow us to avoid building a tree hash cache at all when reconstructing historic states, which saves around 1 second flat (regardless of `slots-per-restore-point`). This is a small percentage of worst-case state load times with 200K validators and SPRP=2048 (~15s vs ~16s) but a significant speed-up for more frequent restore points: state loads with SPRP=32 should be now consistently <500ms instead of 1.5s (a ~3x speedup).

## Additional Info

Required by https://github.com/sigp/lighthouse/pull/2628
2021-12-21 06:30:52 +00:00
..
impls Altair consensus changes and refactors (#2279) 2021-07-09 06:15:32 +00:00
chunk_writer.rs Implement checkpoint sync (#2244) 2021-09-22 00:37:28 +00:00
chunked_iter.rs Add configurable block replayer (#2863) 2021-12-21 06:30:52 +00:00
chunked_vector.rs Resolve Rust 1.56 lints and warnings (#2728) 2021-10-19 00:30:42 +00:00
config.rs Implement checkpoint sync (#2244) 2021-09-22 00:37:28 +00:00
errors.rs Add configurable block replayer (#2863) 2021-12-21 06:30:52 +00:00
forwards_iter.rs Add configurable block replayer (#2863) 2021-12-21 06:30:52 +00:00
garbage_collection.rs Compact database on finalization (#1871) 2020-11-09 07:02:21 +00:00
hot_cold_store.rs Add configurable block replayer (#2863) 2021-12-21 06:30:52 +00:00
impls.rs Implement checkpoint sync (#2244) 2021-09-22 00:37:28 +00:00
iter.rs Add configurable block replayer (#2863) 2021-12-21 06:30:52 +00:00
leveldb_store.rs update dependencies (#2032) 2020-12-07 08:20:33 +00:00
lib.rs Add configurable block replayer (#2863) 2021-12-21 06:30:52 +00:00
memory_store.rs Compact database on finalization (#1871) 2020-11-09 07:02:21 +00:00
metadata.rs Optimise balances cache in case of skipped slots (#2849) 2021-12-13 23:35:57 +00:00
metrics.rs Implement slasher (#1567) 2020-11-23 03:43:22 +00:00
partial_beacon_state.rs Initial merge changes 2021-12-02 14:26:50 +11:00
reconstruct.rs Add configurable block replayer (#2863) 2021-12-21 06:30:52 +00:00