From ba02452d7556306fd46e6d37f1d9eb36b93ac7ef Mon Sep 17 00:00:00 2001 From: "Jeff Washington (jwash)" <75863576+jeffwashington@users.noreply.github.com> Date: Tue, 16 Feb 2021 15:13:48 -0600 Subject: [PATCH] add validator flag no-accounts-db-index-hashing (#15350) * add validator flag no_accounts_db_index_hashing * add validator flag no_accounts_db_index_hashing --- core/src/tvu.rs | 2 ++ core/src/validator.rs | 3 +++ core/tests/snapshots.rs | 2 +- runtime/src/accounts_background_service.rs | 24 +++++++++++++++------- validator/src/main.rs | 6 ++++++ 5 files changed, 29 insertions(+), 8 deletions(-) diff --git a/core/src/tvu.rs b/core/src/tvu.rs index b6ab5c557e..20bb624cbd 100644 --- a/core/src/tvu.rs +++ b/core/src/tvu.rs @@ -80,6 +80,7 @@ pub struct TvuConfig { pub accounts_hash_fault_injection_slots: u64, pub accounts_db_caching_enabled: bool, pub test_hash_calculation: bool, + pub use_index_hash_calculation: bool, pub rocksdb_compaction_interval: Option, pub rocksdb_max_compaction_jitter: Option, } @@ -282,6 +283,7 @@ impl Tvu { accounts_background_request_handler, tvu_config.accounts_db_caching_enabled, tvu_config.test_hash_calculation, + tvu_config.use_index_hash_calculation, ); Tvu { diff --git a/core/src/validator.rs b/core/src/validator.rs index 5bbd6c6c99..8d94f50741 100644 --- a/core/src/validator.rs +++ b/core/src/validator.rs @@ -124,6 +124,7 @@ pub struct ValidatorConfig { pub accounts_db_caching_enabled: bool, pub warp_slot: Option, pub accounts_db_test_hash_calculation: bool, + pub accounts_db_use_index_hash_calculation: bool, } impl Default for ValidatorConfig { @@ -174,6 +175,7 @@ impl Default for ValidatorConfig { accounts_db_caching_enabled: false, warp_slot: None, accounts_db_test_hash_calculation: false, + accounts_db_use_index_hash_calculation: true, } } } @@ -648,6 +650,7 @@ impl Validator { accounts_hash_fault_injection_slots: config.accounts_hash_fault_injection_slots, accounts_db_caching_enabled: config.accounts_db_caching_enabled, test_hash_calculation: config.accounts_db_test_hash_calculation, + use_index_hash_calculation: config.accounts_db_use_index_hash_calculation, rocksdb_compaction_interval: config.rocksdb_compaction_interval, rocksdb_max_compaction_jitter: config.rocksdb_compaction_interval, }, diff --git a/core/tests/snapshots.rs b/core/tests/snapshots.rs index 563348c413..400f186ff8 100644 --- a/core/tests/snapshots.rs +++ b/core/tests/snapshots.rs @@ -219,7 +219,7 @@ mod tests { // set_root should send a snapshot request bank_forks.set_root(bank.slot(), &request_sender, None); bank.update_accounts_hash(); - snapshot_request_handler.handle_snapshot_requests(false, false); + snapshot_request_handler.handle_snapshot_requests(false, false, false); } } diff --git a/runtime/src/accounts_background_service.rs b/runtime/src/accounts_background_service.rs index 450139311f..6d9de94c27 100644 --- a/runtime/src/accounts_background_service.rs +++ b/runtime/src/accounts_background_service.rs @@ -81,6 +81,7 @@ impl SnapshotRequestHandler { &self, accounts_db_caching_enabled: bool, test_hash_calculation: bool, + use_index_hash_calculation: bool, ) -> Option { self.snapshot_request_receiver .try_iter() @@ -129,9 +130,10 @@ impl SnapshotRequestHandler { flush_accounts_cache_time.stop(); let mut hash_time = Measure::start("hash_time"); - const USE_INDEX: bool = true; - let this_hash = snapshot_root_bank - .update_accounts_hash_with_index_option(USE_INDEX, test_hash_calculation); + let this_hash = snapshot_root_bank.update_accounts_hash_with_index_option( + use_index_hash_calculation, + test_hash_calculation, + ); let hash_for_testing = if test_hash_calculation { assert_eq!(previous_hash, this_hash); Some(snapshot_root_bank.get_accounts_hash()) @@ -241,12 +243,16 @@ impl ABSRequestHandler { &self, accounts_db_caching_enabled: bool, test_hash_calculation: bool, + use_index_hash_calculation: bool, ) -> Option { self.snapshot_request_handler .as_ref() .and_then(|snapshot_request_handler| { - snapshot_request_handler - .handle_snapshot_requests(accounts_db_caching_enabled, test_hash_calculation) + snapshot_request_handler.handle_snapshot_requests( + accounts_db_caching_enabled, + test_hash_calculation, + use_index_hash_calculation, + ) }) } @@ -272,6 +278,7 @@ impl AccountsBackgroundService { request_handler: ABSRequestHandler, accounts_db_caching_enabled: bool, test_hash_calculation: bool, + use_index_hash_calculation: bool, ) -> Self { info!("AccountsBackgroundService active"); let exit = exit.clone(); @@ -314,8 +321,11 @@ impl AccountsBackgroundService { // request for `N` to the snapshot request channel before setting a root `R > N`, and // snapshot_request_handler.handle_requests() will always look for the latest // available snapshot in the channel. - let snapshot_block_height = request_handler - .handle_snapshot_requests(accounts_db_caching_enabled, test_hash_calculation); + let snapshot_block_height = request_handler.handle_snapshot_requests( + accounts_db_caching_enabled, + test_hash_calculation, + use_index_hash_calculation, + ); if accounts_db_caching_enabled { // Note that the flush will do an internal clean of the // cache up to bank.slot(), so should be safe as long diff --git a/validator/src/main.rs b/validator/src/main.rs index fbd5499c5d..74f82fe198 100644 --- a/validator/src/main.rs +++ b/validator/src/main.rs @@ -1440,6 +1440,11 @@ pub fn main() { .long("accounts-db-test-hash-calculation") .help("Enables testing of hash calculation using stores in AccountsHashVerifier. This has a computational cost."), ) + .arg( + Arg::with_name("no_accounts_db_index_hashing") + .long("no-accounts-db-index-hashing") + .help("Disables the use of the index in hash calculation in AccountsHashVerifier/Accounts Background Service."), + ) .arg( // legacy nop argument Arg::with_name("accounts_db_caching_enabled") @@ -1656,6 +1661,7 @@ pub fn main() { account_indexes, accounts_db_caching_enabled: !matches.is_present("no_accounts_db_caching"), accounts_db_test_hash_calculation: matches.is_present("accounts_db_test_hash_calculation"), + accounts_db_use_index_hash_calculation: !matches.is_present("no_accounts_db_index_hashing"), ..ValidatorConfig::default() };