add 'ticks-per-slot' to 'solana-test-validator' (#22701)

* add 'ticks-per-slot' to 'solana-test-validator'

* add input parser validator for "ticks-per-slot" argument

* fix fmt
This commit is contained in:
Haleem Assal 2022-01-24 16:56:37 -04:00 committed by GitHub
parent 1c10677f82
commit 0562426661
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 25 additions and 1 deletions

View File

@ -96,6 +96,7 @@ pub struct TestValidatorGenesis {
no_bpf_jit: bool, no_bpf_jit: bool,
accounts: HashMap<Pubkey, AccountSharedData>, accounts: HashMap<Pubkey, AccountSharedData>,
programs: Vec<ProgramInfo>, programs: Vec<ProgramInfo>,
ticks_per_slot: Option<u64>,
epoch_schedule: Option<EpochSchedule>, epoch_schedule: Option<EpochSchedule>,
node_config: TestValidatorNodeConfig, node_config: TestValidatorNodeConfig,
pub validator_exit: Arc<RwLock<Exit>>, pub validator_exit: Arc<RwLock<Exit>>,
@ -128,6 +129,11 @@ impl TestValidatorGenesis {
self self
} }
pub fn ticks_per_slot(&mut self, ticks_per_slot: u64) -> &mut Self {
self.ticks_per_slot = Some(ticks_per_slot);
self
}
pub fn epoch_schedule(&mut self, epoch_schedule: EpochSchedule) -> &mut Self { pub fn epoch_schedule(&mut self, epoch_schedule: EpochSchedule) -> &mut Self {
self.epoch_schedule = Some(epoch_schedule); self.epoch_schedule = Some(epoch_schedule);
self self
@ -465,6 +471,10 @@ impl TestValidator {
.epoch_schedule .epoch_schedule
.unwrap_or_else(EpochSchedule::without_warmup); .unwrap_or_else(EpochSchedule::without_warmup);
if let Some(ticks_per_slot) = config.ticks_per_slot {
genesis_config.ticks_per_slot = ticks_per_slot;
}
let ledger_path = match &config.ledger_path { let ledger_path = match &config.ledger_path {
None => create_new_tmp_ledger!(&genesis_config).0, None => create_new_tmp_ledger!(&genesis_config).0,
Some(ledger_path) => { Some(ledger_path) => {

View File

@ -5,7 +5,7 @@ use {
solana_clap_utils::{ solana_clap_utils::{
input_parsers::{pubkey_of, pubkeys_of, value_of}, input_parsers::{pubkey_of, pubkeys_of, value_of},
input_validators::{ input_validators::{
is_pubkey, is_pubkey_or_keypair, is_slot, is_url_or_moniker, is_parsable, is_pubkey, is_pubkey_or_keypair, is_slot, is_url_or_moniker,
normalize_to_url_if_moniker, normalize_to_url_if_moniker,
}, },
}, },
@ -187,6 +187,14 @@ fn main() {
.takes_value(false) .takes_value(false)
.help("Disable the just-in-time compiler and instead use the interpreter for BPF. Windows always disables JIT."), .help("Disable the just-in-time compiler and instead use the interpreter for BPF. Windows always disables JIT."),
) )
.arg(
Arg::with_name("ticks_per_slot")
.long("ticks-per-slot")
.value_name("TICKS")
.validator(is_parsable::<u64>)
.takes_value(true)
.help("The number of ticks in a slot"),
)
.arg( .arg(
Arg::with_name("slots_per_epoch") Arg::with_name("slots_per_epoch")
.long("slots-per-epoch") .long("slots-per-epoch")
@ -397,6 +405,7 @@ fn main() {
let rpc_port = value_t_or_exit!(matches, "rpc_port", u16); let rpc_port = value_t_or_exit!(matches, "rpc_port", u16);
let faucet_port = value_t_or_exit!(matches, "faucet_port", u16); let faucet_port = value_t_or_exit!(matches, "faucet_port", u16);
let ticks_per_slot = value_t!(matches, "ticks_per_slot", u64).ok();
let slots_per_epoch = value_t!(matches, "slots_per_epoch", Slot).ok(); let slots_per_epoch = value_t!(matches, "slots_per_epoch", Slot).ok();
let gossip_host = matches.value_of("gossip_host").map(|gossip_host| { let gossip_host = matches.value_of("gossip_host").map(|gossip_host| {
solana_net_utils::parse_host(gossip_host).unwrap_or_else(|err| { solana_net_utils::parse_host(gossip_host).unwrap_or_else(|err| {
@ -539,6 +548,7 @@ fn main() {
("clone_account", "--clone"), ("clone_account", "--clone"),
("account", "--account"), ("account", "--account"),
("mint_address", "--mint"), ("mint_address", "--mint"),
("ticks_per_slot", "--ticks-per-slot"),
("slots_per_epoch", "--slots-per-epoch"), ("slots_per_epoch", "--slots-per-epoch"),
("faucet_sol", "--faucet-sol"), ("faucet_sol", "--faucet-sol"),
] { ] {
@ -620,6 +630,10 @@ fn main() {
genesis.warp_slot(warp_slot); genesis.warp_slot(warp_slot);
} }
if let Some(ticks_per_slot) = ticks_per_slot {
genesis.ticks_per_slot(ticks_per_slot);
}
if let Some(slots_per_epoch) = slots_per_epoch { if let Some(slots_per_epoch) = slots_per_epoch {
genesis.epoch_schedule(EpochSchedule::custom( genesis.epoch_schedule(EpochSchedule::custom(
slots_per_epoch, slots_per_epoch,