cli for num account index bins (#19085)
This commit is contained in:
parent
3bdadb3930
commit
e91988c977
|
@ -237,6 +237,22 @@ where
|
||||||
is_parsable_generic::<Slot, _>(slot)
|
is_parsable_generic::<Slot, _>(slot)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
pub fn is_bin<T>(bins: T) -> Result<(), String>
|
||||||
|
where
|
||||||
|
T: AsRef<str> + Display,
|
||||||
|
{
|
||||||
|
bins.as_ref()
|
||||||
|
.parse::<usize>()
|
||||||
|
.map_err(|e| format!("Unable to parse bins, provided: {}, err: {}", bins, e))
|
||||||
|
.and_then(|v| {
|
||||||
|
if !v.is_power_of_two() {
|
||||||
|
Err(format!("Bins must be a power of 2: {}", v))
|
||||||
|
} else {
|
||||||
|
Ok(())
|
||||||
|
}
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
pub fn is_port<T>(port: T) -> Result<(), String>
|
pub fn is_port<T>(port: T) -> Result<(), String>
|
||||||
where
|
where
|
||||||
T: AsRef<str> + Display,
|
T: AsRef<str> + Display,
|
||||||
|
|
|
@ -138,6 +138,7 @@ pub struct ValidatorConfig {
|
||||||
pub poh_hashes_per_batch: u64,
|
pub poh_hashes_per_batch: u64,
|
||||||
pub account_indexes: AccountSecondaryIndexes,
|
pub account_indexes: AccountSecondaryIndexes,
|
||||||
pub accounts_db_caching_enabled: bool,
|
pub accounts_db_caching_enabled: bool,
|
||||||
|
pub accounts_index_bins: Option<usize>,
|
||||||
pub warp_slot: Option<Slot>,
|
pub warp_slot: Option<Slot>,
|
||||||
pub accounts_db_test_hash_calculation: bool,
|
pub accounts_db_test_hash_calculation: bool,
|
||||||
pub accounts_db_skip_shrink: bool,
|
pub accounts_db_skip_shrink: bool,
|
||||||
|
@ -203,6 +204,7 @@ impl Default for ValidatorConfig {
|
||||||
validator_exit: Arc::new(RwLock::new(Exit::default())),
|
validator_exit: Arc::new(RwLock::new(Exit::default())),
|
||||||
no_wait_for_vote_to_start_leader: true,
|
no_wait_for_vote_to_start_leader: true,
|
||||||
accounts_shrink_ratio: AccountShrinkThreshold::default(),
|
accounts_shrink_ratio: AccountShrinkThreshold::default(),
|
||||||
|
accounts_index_bins: None,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1131,6 +1133,7 @@ fn new_banks_from_ledger(
|
||||||
debug_keys: config.debug_keys.clone(),
|
debug_keys: config.debug_keys.clone(),
|
||||||
account_indexes: config.account_indexes.clone(),
|
account_indexes: config.account_indexes.clone(),
|
||||||
accounts_db_caching_enabled: config.accounts_db_caching_enabled,
|
accounts_db_caching_enabled: config.accounts_db_caching_enabled,
|
||||||
|
accounts_index_bins: config.accounts_index_bins,
|
||||||
shrink_ratio: config.accounts_shrink_ratio,
|
shrink_ratio: config.accounts_shrink_ratio,
|
||||||
accounts_db_test_hash_calculation: config.accounts_db_test_hash_calculation,
|
accounts_db_test_hash_calculation: config.accounts_db_test_hash_calculation,
|
||||||
accounts_db_skip_shrink: config.accounts_db_skip_shrink,
|
accounts_db_skip_shrink: config.accounts_db_skip_shrink,
|
||||||
|
|
|
@ -11,7 +11,7 @@ use serde_json::json;
|
||||||
use solana_clap_utils::{
|
use solana_clap_utils::{
|
||||||
input_parsers::{cluster_type_of, pubkey_of, pubkeys_of},
|
input_parsers::{cluster_type_of, pubkey_of, pubkeys_of},
|
||||||
input_validators::{
|
input_validators::{
|
||||||
is_parsable, is_pubkey, is_pubkey_or_keypair, is_slot, is_valid_percentage,
|
is_bin, is_parsable, is_pubkey, is_pubkey_or_keypair, is_slot, is_valid_percentage,
|
||||||
},
|
},
|
||||||
};
|
};
|
||||||
use solana_core::cost_model::CostModel;
|
use solana_core::cost_model::CostModel;
|
||||||
|
@ -849,6 +849,12 @@ fn main() {
|
||||||
.long("no-accounts-db-caching")
|
.long("no-accounts-db-caching")
|
||||||
.takes_value(false)
|
.takes_value(false)
|
||||||
.help("Disables accounts-db caching");
|
.help("Disables accounts-db caching");
|
||||||
|
let accounts_index_bins = Arg::with_name("accounts_index_bins")
|
||||||
|
.long("accounts-index-bins")
|
||||||
|
.value_name("BINS")
|
||||||
|
.validator(is_bin)
|
||||||
|
.takes_value(true)
|
||||||
|
.help("Number of bins to divide the accounts index into");
|
||||||
let account_paths_arg = Arg::with_name("account_paths")
|
let account_paths_arg = Arg::with_name("account_paths")
|
||||||
.long("accounts")
|
.long("accounts")
|
||||||
.value_name("PATHS")
|
.value_name("PATHS")
|
||||||
|
@ -1143,6 +1149,7 @@ fn main() {
|
||||||
.arg(&account_paths_arg)
|
.arg(&account_paths_arg)
|
||||||
.arg(&halt_at_slot_arg)
|
.arg(&halt_at_slot_arg)
|
||||||
.arg(&limit_load_slot_count_from_snapshot_arg)
|
.arg(&limit_load_slot_count_from_snapshot_arg)
|
||||||
|
.arg(&accounts_index_bins)
|
||||||
.arg(&verify_index_arg)
|
.arg(&verify_index_arg)
|
||||||
.arg(&hard_forks_arg)
|
.arg(&hard_forks_arg)
|
||||||
.arg(&no_accounts_db_caching_arg)
|
.arg(&no_accounts_db_caching_arg)
|
||||||
|
@ -1868,6 +1875,7 @@ fn main() {
|
||||||
usize
|
usize
|
||||||
)
|
)
|
||||||
.ok(),
|
.ok(),
|
||||||
|
accounts_index_bins: value_t!(arg_matches, "accounts_index_bins", usize).ok(),
|
||||||
verify_index: arg_matches.is_present("verify_accounts_index"),
|
verify_index: arg_matches.is_present("verify_accounts_index"),
|
||||||
allow_dead_slots: arg_matches.is_present("allow_dead_slots"),
|
allow_dead_slots: arg_matches.is_present("allow_dead_slots"),
|
||||||
accounts_db_test_hash_calculation: arg_matches
|
accounts_db_test_hash_calculation: arg_matches
|
||||||
|
|
|
@ -132,7 +132,7 @@ fn load_from_snapshot(
|
||||||
process_options.accounts_db_test_hash_calculation,
|
process_options.accounts_db_test_hash_calculation,
|
||||||
process_options.accounts_db_skip_shrink,
|
process_options.accounts_db_skip_shrink,
|
||||||
process_options.verify_index,
|
process_options.verify_index,
|
||||||
None,
|
process_options.accounts_index_bins,
|
||||||
)
|
)
|
||||||
.expect("Load from snapshot failed");
|
.expect("Load from snapshot failed");
|
||||||
|
|
||||||
|
|
|
@ -385,6 +385,7 @@ pub struct ProcessOptions {
|
||||||
pub allow_dead_slots: bool,
|
pub allow_dead_slots: bool,
|
||||||
pub accounts_db_test_hash_calculation: bool,
|
pub accounts_db_test_hash_calculation: bool,
|
||||||
pub accounts_db_skip_shrink: bool,
|
pub accounts_db_skip_shrink: bool,
|
||||||
|
pub accounts_index_bins: Option<usize>,
|
||||||
pub verify_index: bool,
|
pub verify_index: bool,
|
||||||
pub shrink_ratio: AccountShrinkThreshold,
|
pub shrink_ratio: AccountShrinkThreshold,
|
||||||
}
|
}
|
||||||
|
@ -416,7 +417,7 @@ pub fn process_blockstore(
|
||||||
opts.accounts_db_caching_enabled,
|
opts.accounts_db_caching_enabled,
|
||||||
opts.shrink_ratio,
|
opts.shrink_ratio,
|
||||||
false,
|
false,
|
||||||
None, // later, this will be passed from ProcessOptions
|
opts.accounts_index_bins,
|
||||||
);
|
);
|
||||||
let bank0 = Arc::new(bank0);
|
let bank0 = Arc::new(bank0);
|
||||||
info!("processing ledger for slot 0...");
|
info!("processing ledger for slot 0...");
|
||||||
|
|
|
@ -57,6 +57,7 @@ pub fn safe_clone_config(config: &ValidatorConfig) -> ValidatorConfig {
|
||||||
poh_hashes_per_batch: config.poh_hashes_per_batch,
|
poh_hashes_per_batch: config.poh_hashes_per_batch,
|
||||||
no_wait_for_vote_to_start_leader: config.no_wait_for_vote_to_start_leader,
|
no_wait_for_vote_to_start_leader: config.no_wait_for_vote_to_start_leader,
|
||||||
accounts_shrink_ratio: config.accounts_shrink_ratio,
|
accounts_shrink_ratio: config.accounts_shrink_ratio,
|
||||||
|
accounts_index_bins: config.accounts_index_bins,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -127,7 +127,7 @@ fn initialize_from_snapshot(
|
||||||
process_options.accounts_db_test_hash_calculation,
|
process_options.accounts_db_test_hash_calculation,
|
||||||
false,
|
false,
|
||||||
process_options.verify_index,
|
process_options.verify_index,
|
||||||
None,
|
process_options.accounts_index_bins,
|
||||||
)
|
)
|
||||||
.unwrap();
|
.unwrap();
|
||||||
|
|
||||||
|
|
|
@ -10,8 +10,8 @@ use {
|
||||||
solana_clap_utils::{
|
solana_clap_utils::{
|
||||||
input_parsers::{keypair_of, keypairs_of, pubkey_of, value_of},
|
input_parsers::{keypair_of, keypairs_of, pubkey_of, value_of},
|
||||||
input_validators::{
|
input_validators::{
|
||||||
is_keypair, is_keypair_or_ask_keyword, is_parsable, is_pubkey, is_pubkey_or_keypair,
|
is_bin, is_keypair, is_keypair_or_ask_keyword, is_parsable, is_pubkey,
|
||||||
is_slot,
|
is_pubkey_or_keypair, is_slot,
|
||||||
},
|
},
|
||||||
keypair::SKIP_SEED_PHRASE_VALIDATION_ARG,
|
keypair::SKIP_SEED_PHRASE_VALIDATION_ARG,
|
||||||
},
|
},
|
||||||
|
@ -1820,6 +1820,14 @@ pub fn main() {
|
||||||
.help("Enables faster starting of validators by skipping shrink. \
|
.help("Enables faster starting of validators by skipping shrink. \
|
||||||
This option is for use during testing."),
|
This option is for use during testing."),
|
||||||
)
|
)
|
||||||
|
.arg(
|
||||||
|
Arg::with_name("accounts_index_bins")
|
||||||
|
.long("accounts-index-bins")
|
||||||
|
.value_name("BINS")
|
||||||
|
.validator(is_bin)
|
||||||
|
.takes_value(true)
|
||||||
|
.help("Number of bins to divide the accounts index into"),
|
||||||
|
)
|
||||||
.arg(
|
.arg(
|
||||||
Arg::with_name("accounts_db_test_hash_calculation")
|
Arg::with_name("accounts_db_test_hash_calculation")
|
||||||
.long("accounts-db-test-hash-calculation")
|
.long("accounts-db-test-hash-calculation")
|
||||||
|
@ -2389,6 +2397,7 @@ pub fn main() {
|
||||||
account_indexes,
|
account_indexes,
|
||||||
accounts_db_caching_enabled: !matches.is_present("no_accounts_db_caching"),
|
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_test_hash_calculation: matches.is_present("accounts_db_test_hash_calculation"),
|
||||||
|
accounts_index_bins: value_t!(matches, "accounts_index_bins", usize).ok(),
|
||||||
accounts_db_skip_shrink: matches.is_present("accounts_db_skip_shrink"),
|
accounts_db_skip_shrink: matches.is_present("accounts_db_skip_shrink"),
|
||||||
accounts_db_use_index_hash_calculation: matches.is_present("accounts_db_index_hashing"),
|
accounts_db_use_index_hash_calculation: matches.is_present("accounts_db_index_hashing"),
|
||||||
tpu_coalesce_ms,
|
tpu_coalesce_ms,
|
||||||
|
|
Loading…
Reference in New Issue