Remove halt_at_slot from RuntimeConfig, it's not a runtime concern
This commit is contained in:
parent
32c008e02a
commit
9e4999ef6a
|
@ -116,6 +116,7 @@ const MAX_COMPLETED_DATA_SETS_IN_CHANNEL: usize = 100_000;
|
||||||
const WAIT_FOR_SUPERMAJORITY_THRESHOLD_PERCENT: u64 = 80;
|
const WAIT_FOR_SUPERMAJORITY_THRESHOLD_PERCENT: u64 = 80;
|
||||||
|
|
||||||
pub struct ValidatorConfig {
|
pub struct ValidatorConfig {
|
||||||
|
pub halt_at_slot: Option<Slot>,
|
||||||
pub expected_genesis_hash: Option<Hash>,
|
pub expected_genesis_hash: Option<Hash>,
|
||||||
pub expected_bank_hash: Option<Hash>,
|
pub expected_bank_hash: Option<Hash>,
|
||||||
pub expected_shred_version: Option<u16>,
|
pub expected_shred_version: Option<u16>,
|
||||||
|
@ -175,6 +176,7 @@ pub struct ValidatorConfig {
|
||||||
impl Default for ValidatorConfig {
|
impl Default for ValidatorConfig {
|
||||||
fn default() -> Self {
|
fn default() -> Self {
|
||||||
Self {
|
Self {
|
||||||
|
halt_at_slot: None,
|
||||||
expected_genesis_hash: None,
|
expected_genesis_hash: None,
|
||||||
expected_bank_hash: None,
|
expected_bank_hash: None,
|
||||||
expected_shred_version: None,
|
expected_shred_version: None,
|
||||||
|
@ -846,7 +848,7 @@ impl Validator {
|
||||||
(None, None, None, None)
|
(None, None, None, None)
|
||||||
};
|
};
|
||||||
|
|
||||||
if config.runtime_config.dev_halt_at_slot.is_some() {
|
if config.halt_at_slot.is_some() {
|
||||||
// Simulate a confirmed root to avoid RPC errors with CommitmentConfig::finalized() and
|
// Simulate a confirmed root to avoid RPC errors with CommitmentConfig::finalized() and
|
||||||
// to ensure RPC endpoints like getConfirmedBlock, which require a confirmed root, work
|
// to ensure RPC endpoints like getConfirmedBlock, which require a confirmed root, work
|
||||||
block_commitment_cache
|
block_commitment_cache
|
||||||
|
@ -1047,7 +1049,7 @@ impl Validator {
|
||||||
validator_exit: config.validator_exit.clone(),
|
validator_exit: config.validator_exit.clone(),
|
||||||
cluster_info,
|
cluster_info,
|
||||||
bank_forks,
|
bank_forks,
|
||||||
blockstore: blockstore.clone(),
|
blockstore,
|
||||||
geyser_plugin_service,
|
geyser_plugin_service,
|
||||||
ledger_metric_report_service,
|
ledger_metric_report_service,
|
||||||
accounts_background_service,
|
accounts_background_service,
|
||||||
|
@ -1387,6 +1389,7 @@ fn load_blockstore(
|
||||||
|
|
||||||
let process_options = blockstore_processor::ProcessOptions {
|
let process_options = blockstore_processor::ProcessOptions {
|
||||||
poh_verify: config.poh_verify,
|
poh_verify: config.poh_verify,
|
||||||
|
halt_at_slot: config.halt_at_slot,
|
||||||
new_hard_forks: config.new_hard_forks.clone(),
|
new_hard_forks: config.new_hard_forks.clone(),
|
||||||
debug_keys: config.debug_keys.clone(),
|
debug_keys: config.debug_keys.clone(),
|
||||||
account_indexes: config.account_indexes.clone(),
|
account_indexes: config.account_indexes.clone(),
|
||||||
|
|
|
@ -1787,11 +1787,8 @@ fn main() {
|
||||||
("shred-version", Some(arg_matches)) => {
|
("shred-version", Some(arg_matches)) => {
|
||||||
let process_options = ProcessOptions {
|
let process_options = ProcessOptions {
|
||||||
new_hard_forks: hardforks_of(arg_matches, "hard_forks"),
|
new_hard_forks: hardforks_of(arg_matches, "hard_forks"),
|
||||||
|
halt_at_slot: Some(0),
|
||||||
poh_verify: false,
|
poh_verify: false,
|
||||||
runtime_config: RuntimeConfig {
|
|
||||||
dev_halt_at_slot: Some(0),
|
|
||||||
..RuntimeConfig::default()
|
|
||||||
},
|
|
||||||
..ProcessOptions::default()
|
..ProcessOptions::default()
|
||||||
};
|
};
|
||||||
let genesis_config = open_genesis_config_by(&ledger_path, arg_matches);
|
let genesis_config = open_genesis_config_by(&ledger_path, arg_matches);
|
||||||
|
@ -1875,11 +1872,8 @@ fn main() {
|
||||||
("bank-hash", Some(arg_matches)) => {
|
("bank-hash", Some(arg_matches)) => {
|
||||||
let process_options = ProcessOptions {
|
let process_options = ProcessOptions {
|
||||||
new_hard_forks: hardforks_of(arg_matches, "hard_forks"),
|
new_hard_forks: hardforks_of(arg_matches, "hard_forks"),
|
||||||
|
halt_at_slot: Some(0),
|
||||||
poh_verify: false,
|
poh_verify: false,
|
||||||
runtime_config: RuntimeConfig {
|
|
||||||
dev_halt_at_slot: Some(0),
|
|
||||||
..RuntimeConfig::default()
|
|
||||||
},
|
|
||||||
..ProcessOptions::default()
|
..ProcessOptions::default()
|
||||||
};
|
};
|
||||||
let genesis_config = open_genesis_config_by(&ledger_path, arg_matches);
|
let genesis_config = open_genesis_config_by(&ledger_path, arg_matches);
|
||||||
|
@ -2108,6 +2102,7 @@ fn main() {
|
||||||
let process_options = ProcessOptions {
|
let process_options = ProcessOptions {
|
||||||
new_hard_forks: hardforks_of(arg_matches, "hard_forks"),
|
new_hard_forks: hardforks_of(arg_matches, "hard_forks"),
|
||||||
poh_verify: !arg_matches.is_present("skip_poh_verify"),
|
poh_verify: !arg_matches.is_present("skip_poh_verify"),
|
||||||
|
halt_at_slot: value_t!(arg_matches, "halt_at_slot", Slot).ok(),
|
||||||
accounts_db_caching_enabled: !arg_matches.is_present("no_accounts_db_caching"),
|
accounts_db_caching_enabled: !arg_matches.is_present("no_accounts_db_caching"),
|
||||||
limit_load_slot_count_from_snapshot: value_t!(
|
limit_load_slot_count_from_snapshot: value_t!(
|
||||||
arg_matches,
|
arg_matches,
|
||||||
|
@ -2122,7 +2117,6 @@ fn main() {
|
||||||
.is_present("accounts_db_test_hash_calculation"),
|
.is_present("accounts_db_test_hash_calculation"),
|
||||||
accounts_db_skip_shrink: arg_matches.is_present("accounts_db_skip_shrink"),
|
accounts_db_skip_shrink: arg_matches.is_present("accounts_db_skip_shrink"),
|
||||||
runtime_config: RuntimeConfig {
|
runtime_config: RuntimeConfig {
|
||||||
dev_halt_at_slot: value_t!(arg_matches, "halt_at_slot", Slot).ok(),
|
|
||||||
bpf_jit: !matches.is_present("no_bpf_jit"),
|
bpf_jit: !matches.is_present("no_bpf_jit"),
|
||||||
..RuntimeConfig::default()
|
..RuntimeConfig::default()
|
||||||
},
|
},
|
||||||
|
@ -2163,11 +2157,8 @@ fn main() {
|
||||||
|
|
||||||
let process_options = ProcessOptions {
|
let process_options = ProcessOptions {
|
||||||
new_hard_forks: hardforks_of(arg_matches, "hard_forks"),
|
new_hard_forks: hardforks_of(arg_matches, "hard_forks"),
|
||||||
|
halt_at_slot: value_t!(arg_matches, "halt_at_slot", Slot).ok(),
|
||||||
poh_verify: false,
|
poh_verify: false,
|
||||||
runtime_config: RuntimeConfig {
|
|
||||||
dev_halt_at_slot: value_t!(arg_matches, "halt_at_slot", Slot).ok(),
|
|
||||||
..RuntimeConfig::default()
|
|
||||||
},
|
|
||||||
..ProcessOptions::default()
|
..ProcessOptions::default()
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -2294,11 +2285,8 @@ fn main() {
|
||||||
&blockstore,
|
&blockstore,
|
||||||
ProcessOptions {
|
ProcessOptions {
|
||||||
new_hard_forks,
|
new_hard_forks,
|
||||||
|
halt_at_slot: Some(snapshot_slot),
|
||||||
poh_verify: false,
|
poh_verify: false,
|
||||||
runtime_config: RuntimeConfig {
|
|
||||||
dev_halt_at_slot: Some(snapshot_slot),
|
|
||||||
..RuntimeConfig::default()
|
|
||||||
},
|
|
||||||
..ProcessOptions::default()
|
..ProcessOptions::default()
|
||||||
},
|
},
|
||||||
snapshot_archive_path,
|
snapshot_archive_path,
|
||||||
|
@ -2593,14 +2581,11 @@ fn main() {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
("accounts", Some(arg_matches)) => {
|
("accounts", Some(arg_matches)) => {
|
||||||
let dev_halt_at_slot = value_t!(arg_matches, "halt_at_slot", Slot).ok();
|
let halt_at_slot = value_t!(arg_matches, "halt_at_slot", Slot).ok();
|
||||||
let process_options = ProcessOptions {
|
let process_options = ProcessOptions {
|
||||||
new_hard_forks: hardforks_of(arg_matches, "hard_forks"),
|
new_hard_forks: hardforks_of(arg_matches, "hard_forks"),
|
||||||
|
halt_at_slot,
|
||||||
poh_verify: false,
|
poh_verify: false,
|
||||||
runtime_config: RuntimeConfig {
|
|
||||||
dev_halt_at_slot,
|
|
||||||
..RuntimeConfig::default()
|
|
||||||
},
|
|
||||||
..ProcessOptions::default()
|
..ProcessOptions::default()
|
||||||
};
|
};
|
||||||
let genesis_config = open_genesis_config_by(&ledger_path, arg_matches);
|
let genesis_config = open_genesis_config_by(&ledger_path, arg_matches);
|
||||||
|
@ -2659,14 +2644,11 @@ fn main() {
|
||||||
println!("{:#?}", total_accounts_stats);
|
println!("{:#?}", total_accounts_stats);
|
||||||
}
|
}
|
||||||
("capitalization", Some(arg_matches)) => {
|
("capitalization", Some(arg_matches)) => {
|
||||||
let dev_halt_at_slot = value_t!(arg_matches, "halt_at_slot", Slot).ok();
|
let halt_at_slot = value_t!(arg_matches, "halt_at_slot", Slot).ok();
|
||||||
let process_options = ProcessOptions {
|
let process_options = ProcessOptions {
|
||||||
new_hard_forks: hardforks_of(arg_matches, "hard_forks"),
|
new_hard_forks: hardforks_of(arg_matches, "hard_forks"),
|
||||||
|
halt_at_slot,
|
||||||
poh_verify: false,
|
poh_verify: false,
|
||||||
runtime_config: RuntimeConfig {
|
|
||||||
dev_halt_at_slot,
|
|
||||||
..RuntimeConfig::default()
|
|
||||||
},
|
|
||||||
..ProcessOptions::default()
|
..ProcessOptions::default()
|
||||||
};
|
};
|
||||||
let genesis_config = open_genesis_config_by(&ledger_path, arg_matches);
|
let genesis_config = open_genesis_config_by(&ledger_path, arg_matches);
|
||||||
|
|
|
@ -547,6 +547,7 @@ pub type ProcessCallback = Arc<dyn Fn(&Bank) + Sync + Send>;
|
||||||
pub struct ProcessOptions {
|
pub struct ProcessOptions {
|
||||||
pub poh_verify: bool,
|
pub poh_verify: bool,
|
||||||
pub full_leader_cache: bool,
|
pub full_leader_cache: bool,
|
||||||
|
pub halt_at_slot: Option<Slot>,
|
||||||
pub entry_callback: Option<ProcessCallback>,
|
pub entry_callback: Option<ProcessCallback>,
|
||||||
pub override_num_threads: Option<usize>,
|
pub override_num_threads: Option<usize>,
|
||||||
pub new_hard_forks: Option<Vec<Slot>>,
|
pub new_hard_forks: Option<Vec<Slot>>,
|
||||||
|
@ -1188,11 +1189,8 @@ fn load_frozen_forks(
|
||||||
&mut pending_slots,
|
&mut pending_slots,
|
||||||
)?;
|
)?;
|
||||||
|
|
||||||
let dev_halt_at_slot = opts
|
let halt_at_slot = opts.halt_at_slot.unwrap_or(std::u64::MAX);
|
||||||
.runtime_config
|
if bank_forks.read().unwrap().root() != halt_at_slot {
|
||||||
.dev_halt_at_slot
|
|
||||||
.unwrap_or(std::u64::MAX);
|
|
||||||
if bank_forks.read().unwrap().root() != dev_halt_at_slot {
|
|
||||||
while !pending_slots.is_empty() {
|
while !pending_slots.is_empty() {
|
||||||
timing.details.per_program_timings.clear();
|
timing.details.per_program_timings.clear();
|
||||||
let (meta, bank, last_entry_hash) = pending_slots.pop().unwrap();
|
let (meta, bank, last_entry_hash) = pending_slots.pop().unwrap();
|
||||||
|
@ -1373,7 +1371,7 @@ fn load_frozen_forks(
|
||||||
&mut pending_slots,
|
&mut pending_slots,
|
||||||
)?;
|
)?;
|
||||||
|
|
||||||
if slot >= dev_halt_at_slot {
|
if slot >= halt_at_slot {
|
||||||
bank.force_flush_accounts_cache();
|
bank.force_flush_accounts_cache();
|
||||||
let _ = bank.verify_bank_hash(false);
|
let _ = bank.verify_bank_hash(false);
|
||||||
break;
|
break;
|
||||||
|
@ -3134,11 +3132,8 @@ pub mod tests {
|
||||||
// Specify halting at slot 0
|
// Specify halting at slot 0
|
||||||
let opts = ProcessOptions {
|
let opts = ProcessOptions {
|
||||||
poh_verify: true,
|
poh_verify: true,
|
||||||
|
halt_at_slot: Some(0),
|
||||||
accounts_db_test_hash_calculation: true,
|
accounts_db_test_hash_calculation: true,
|
||||||
runtime_config: RuntimeConfig {
|
|
||||||
dev_halt_at_slot: Some(0),
|
|
||||||
..RuntimeConfig::default()
|
|
||||||
},
|
|
||||||
..ProcessOptions::default()
|
..ProcessOptions::default()
|
||||||
};
|
};
|
||||||
let (bank_forks, ..) = test_process_blockstore(&genesis_config, &blockstore, opts);
|
let (bank_forks, ..) = test_process_blockstore(&genesis_config, &blockstore, opts);
|
||||||
|
|
|
@ -6,6 +6,7 @@ use {
|
||||||
|
|
||||||
pub fn safe_clone_config(config: &ValidatorConfig) -> ValidatorConfig {
|
pub fn safe_clone_config(config: &ValidatorConfig) -> ValidatorConfig {
|
||||||
ValidatorConfig {
|
ValidatorConfig {
|
||||||
|
halt_at_slot: config.halt_at_slot,
|
||||||
expected_genesis_hash: config.expected_genesis_hash,
|
expected_genesis_hash: config.expected_genesis_hash,
|
||||||
expected_bank_hash: config.expected_bank_hash,
|
expected_bank_hash: config.expected_bank_hash,
|
||||||
expected_shred_version: config.expected_shred_version,
|
expected_shred_version: config.expected_shred_version,
|
||||||
|
|
|
@ -1,9 +1,8 @@
|
||||||
use {solana_program_runtime::compute_budget::ComputeBudget, solana_sdk::clock::Slot};
|
use solana_program_runtime::compute_budget::ComputeBudget;
|
||||||
|
|
||||||
/// Encapsulates flags that can be used to tweak the runtime behavior.
|
/// Encapsulates flags that can be used to tweak the runtime behavior.
|
||||||
#[derive(Default, Clone)]
|
#[derive(Default, Clone)]
|
||||||
pub struct RuntimeConfig {
|
pub struct RuntimeConfig {
|
||||||
pub bpf_jit: bool,
|
pub bpf_jit: bool,
|
||||||
pub dev_halt_at_slot: Option<Slot>,
|
|
||||||
pub compute_budget: Option<ComputeBudget>,
|
pub compute_budget: Option<ComputeBudget>,
|
||||||
}
|
}
|
||||||
|
|
|
@ -681,7 +681,6 @@ impl TestValidator {
|
||||||
max_units,
|
max_units,
|
||||||
..ComputeBudget::default()
|
..ComputeBudget::default()
|
||||||
}),
|
}),
|
||||||
..RuntimeConfig::default()
|
|
||||||
};
|
};
|
||||||
|
|
||||||
let mut validator_config = ValidatorConfig {
|
let mut validator_config = ValidatorConfig {
|
||||||
|
|
|
@ -2330,6 +2330,7 @@ pub fn main() {
|
||||||
let mut validator_config = ValidatorConfig {
|
let mut validator_config = ValidatorConfig {
|
||||||
require_tower: matches.is_present("require_tower"),
|
require_tower: matches.is_present("require_tower"),
|
||||||
tower_storage,
|
tower_storage,
|
||||||
|
halt_at_slot: value_t!(matches, "dev_halt_at_slot", Slot).ok(),
|
||||||
expected_genesis_hash: matches
|
expected_genesis_hash: matches
|
||||||
.value_of("expected_genesis_hash")
|
.value_of("expected_genesis_hash")
|
||||||
.map(|s| Hash::from_str(s).unwrap()),
|
.map(|s| Hash::from_str(s).unwrap()),
|
||||||
|
@ -2442,7 +2443,6 @@ pub fn main() {
|
||||||
no_wait_for_vote_to_start_leader: matches.is_present("no_wait_for_vote_to_start_leader"),
|
no_wait_for_vote_to_start_leader: matches.is_present("no_wait_for_vote_to_start_leader"),
|
||||||
accounts_shrink_ratio,
|
accounts_shrink_ratio,
|
||||||
runtime_config: RuntimeConfig {
|
runtime_config: RuntimeConfig {
|
||||||
dev_halt_at_slot: value_t!(matches, "dev_halt_at_slot", Slot).ok(),
|
|
||||||
bpf_jit: !matches.is_present("no_bpf_jit"),
|
bpf_jit: !matches.is_present("no_bpf_jit"),
|
||||||
..RuntimeConfig::default()
|
..RuntimeConfig::default()
|
||||||
},
|
},
|
||||||
|
|
Loading…
Reference in New Issue