* Apply clippy lints to beacon node

* Remove unnecessary logging and correct formatting

* Initial bones of load-balanced range-sync

* Port bump meshsup tests

* Further structure and network handling logic added

* Basic structure, ignoring error handling

* Correct max peers delay bug

* Clean up and re-write message processor and sync manager

* Restructure directory, correct type issues

* Fix compiler issues

* Completed first testing of new sync

* Correct merge issues

* Clean up warnings

* Push attestation processed log down to dbg

* Add state enc/dec benches

* Correct math error, downgraded logs

* Add example for flamegraph

* Use `PublicKeyBytes` for `Validator`

* Ripple PublicKeyBytes change through codebase

* Add RPC error handling and improved syncing code

* Add benches, optimizations to store BeaconState

* Store BeaconState in StorageContainer too

* Optimize StorageContainer with std::mem magic

* Add libp2p stream error handling and dropping of invalid peers

* Lower logs

* Update lcli to parse spec at boot, remove pycli

* Fix issues when starting with mainnet spec

* Set default spec to mainnet

* Fix lcli --spec param

* Add discovery tweak

* Ensure ETH1_FOLLOW_DISTANCE is in YamlConfig

* Set testnet ETH1_FOLLOW_DISTANCE to 16

* Fix rest_api tests

* Set testnet min validator count

* Update with new testnet dir

* Remove some dbg, println

* Add timeout when notifier waits for libp2p lock

* Add validator count CLI flag to lcli contract deploy

* Extend genesis delay time

* Correct libp2p service locking

* Update testnet dir

* Add basic block/state caching on beacon chain

* Add decimals display to notifier sync speed

* Try merge in change to reduce fork choice calls

* Remove fork choice from process block

* Minor log fix

* Check successes > 0

* Adds checkpoint cache

* Stop storing the tree hash cache in the db

* Handles peer disconnects for sync

* Fix failing beacon chain tests

* Change eth2_testnet_config tests to Mainnet

* Add logs downgrade discovery log

* Remove dedunant beacon state write

* Fix re-org warnings

* Use caching get methods in fork choice

* Fix mistake in prev commit

* Use caching state getting in state_by_slot

* Add state.cacheless_clone

* Less fork choice (#679)

* Try merge in change to reduce fork choice calls

* Remove fork choice from process block

* Minor log fix

* Check successes > 0

* Fix failing beacon chain tests

* Fix re-org warnings

* Fix mistake in prev commit

* Attempt to improve attestation processing times

* Introduce HeadInfo struct

* Used cache tree hash for block processing

* Use cached tree hash for block production too

* Range sync refactor

- Introduces `ChainCollection`
- Correct Disconnect node handling
- Removes duplicate code

* Add more logging for DB

* Various bug fixes

* Remove unnecessary logs

* Maintain syncing state in the transition from finalied to head

* Improved disconnect handling

* Add `Speedo` struct

* Fix bugs in speedo

* Fix bug in speedo

* Fix rounding bug in speedo

* Move code around, reduce speedo observation count

* Adds forwards block interator

* Fix inf NaN

* Add first draft of validator onboarding

* Update docs

* Add documentation link to main README

* Continue docs development

* Update book readme

* Update docs

* Allow vc to run without testnet subcommand

* Small change to onboarding docs

* Tidy CLI help messages

* Update docs

* Add check to val client see if beacon node is synced

* Attempt to fix NaN bug

* Fix compile bug

* Add notifier service to validator client

* Re-order onboarding steps

* Update deposit contract address

* Update testnet dir

* Add note about public eth1 node

* Fix installation link

* Set default eth1 endpoint to sigp

* Fix broken test

* Try fix eth1 cache locking

* Be more specific about eth1 endpoint

* Increase gas limit for deposit

* Fix default deposit amount

* Fix re-org log
This commit is contained in:
Paul Hauner 2019-12-09 23:14:13 +11:00 committed by GitHub
parent 3c6c06a505
commit 10a134792b
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
5 changed files with 40 additions and 21 deletions

View File

@ -1504,7 +1504,14 @@ impl<T: BeaconChainTypes> BeaconChain<T> {
let previous_slot = self.head_info().slot; let previous_slot = self.head_info().slot;
let new_slot = beacon_block.slot; let new_slot = beacon_block.slot;
let is_reorg = self.head_info().block_root != beacon_block.parent_root; // Note: this will declare a re-org if we skip `SLOTS_PER_HISTORICAL_ROOT` blocks
// between calls to fork choice without swapping between chains. This seems like an
// extreme-enough scenario that a warning is fine.
let is_reorg = self.head_info().block_root
!= beacon_state
.get_block_root(self.head_info().slot)
.map(|root| *root)
.unwrap_or_else(|_| Hash256::random());
// If we switched to a new chain (instead of building atop the present chain). // If we switched to a new chain (instead of building atop the present chain).
if is_reorg { if is_reorg {

View File

@ -69,17 +69,18 @@ impl<E: EthSpec> Store<E> for LevelDB<E> {
let column_key = Self::get_key_for_col(col, key); let column_key = Self::get_key_for_col(col, key);
metrics::inc_counter(&metrics::DISK_DB_READ_COUNT); metrics::inc_counter(&metrics::DISK_DB_READ_COUNT);
let timer = metrics::start_timer(&metrics::DISK_DB_READ_TIMES);
let result = self self.db
.db
.get(self.read_options(), column_key) .get(self.read_options(), column_key)
.map_err(Into::into); .map_err(Into::into)
.map(|opt| {
if let Ok(Some(bytes)) = &result { opt.map(|bytes| {
metrics::inc_counter_by(&metrics::DISK_DB_READ_BYTES, bytes.len() as i64) metrics::inc_counter_by(&metrics::DISK_DB_READ_BYTES, bytes.len() as i64);
} metrics::stop_timer(timer);
bytes
result })
})
} }
/// Store some `value` in `column`, indexed with `key`. /// Store some `value` in `column`, indexed with `key`.
@ -88,10 +89,14 @@ impl<E: EthSpec> Store<E> for LevelDB<E> {
metrics::inc_counter(&metrics::DISK_DB_WRITE_COUNT); metrics::inc_counter(&metrics::DISK_DB_WRITE_COUNT);
metrics::inc_counter_by(&metrics::DISK_DB_WRITE_BYTES, val.len() as i64); metrics::inc_counter_by(&metrics::DISK_DB_WRITE_BYTES, val.len() as i64);
let timer = metrics::start_timer(&metrics::DISK_DB_WRITE_TIMES);
self.db self.db
.put(self.write_options(), column_key, val) .put(self.write_options(), column_key, val)
.map_err(Into::into) .map_err(Into::into)
.map(|()| {
metrics::stop_timer(timer);
})
} }
/// Return `true` if `key` exists in `column`. /// Return `true` if `key` exists in `column`.

View File

@ -25,6 +25,14 @@ lazy_static! {
"store_disk_db_write_count_total", "store_disk_db_write_count_total",
"Total number of writes to the on-disk DB" "Total number of writes to the on-disk DB"
); );
pub static ref DISK_DB_READ_TIMES: Result<Histogram> = try_create_histogram(
"store_disk_db_read_seconds",
"Time taken to write bytes to store."
);
pub static ref DISK_DB_WRITE_TIMES: Result<Histogram> = try_create_histogram(
"store_disk_db_write_seconds",
"Time taken to write bytes to store."
);
pub static ref DISK_DB_EXISTS_COUNT: Result<IntCounter> = try_create_int_counter( pub static ref DISK_DB_EXISTS_COUNT: Result<IntCounter> = try_create_int_counter(
"store_disk_db_exists_count_total", "store_disk_db_exists_count_total",
"Total number of checks if a key is in the on-disk DB" "Total number of checks if a key is in the on-disk DB"

View File

@ -2,7 +2,7 @@
* [Introduction](./intro.md) * [Introduction](./intro.md)
* [Become a Validator](./become-a-validator.md) * [Become a Validator](./become-a-validator.md)
* [Introduction](./intro.md) * [Installation](./installation.md)
* [Docker](./docker.md) * [Docker](./docker.md)
* [CLI](./cli.md) * [CLI](./cli.md)
* [Testnets](./testnets.md) * [Testnets](./testnets.md)

View File

@ -25,6 +25,15 @@ fn main() {
"Performs various testing-related tasks, modelled after zcli. \ "Performs various testing-related tasks, modelled after zcli. \
by @protolambda.", by @protolambda.",
) )
.arg(
Arg::with_name("spec")
.short("s")
.value_name("STRING")
.takes_value(true)
.required(true)
.possible_values(&["minimal", "mainnet"])
.default_value("mainnet")
)
.subcommand( .subcommand(
SubCommand::with_name("genesis_yaml") SubCommand::with_name("genesis_yaml")
.about("Generates a genesis YAML file") .about("Generates a genesis YAML file")
@ -44,16 +53,6 @@ fn main() {
.required(false) .required(false)
.help("Eth2 genesis time (seconds since UNIX epoch)."), .help("Eth2 genesis time (seconds since UNIX epoch)."),
) )
.arg(
Arg::with_name("spec")
.short("s")
.value_name("STRING")
.takes_value(true)
.required(true)
.possible_values(&["minimal", "mainnet"])
.default_value("mainnet")
.help("Eth2 genesis time (seconds since UNIX epoch)."),
)
.arg( .arg(
Arg::with_name("output_file") Arg::with_name("output_file")
.short("f") .short("f")