Skip to content

Commit

Permalink
solana-validator monitor how displays slot and gossip stake % while…
Browse files Browse the repository at this point in the history
… waiting for supermajority
  • Loading branch information
mvines committed Aug 10, 2022
1 parent 82dc789 commit 4e79d78
Showing 1 changed file with 21 additions and 7 deletions.
28 changes: 21 additions & 7 deletions core/src/validator.rs
Original file line number Diff line number Diff line change
Expand Up @@ -259,14 +259,23 @@ impl ValidatorConfig {
pub enum ValidatorStartProgress {
Initializing, // Catch all, default state
SearchingForRpcService,
DownloadingSnapshot { slot: Slot, rpc_addr: SocketAddr },
DownloadingSnapshot {
slot: Slot,
rpc_addr: SocketAddr,
},
CleaningBlockStore,
CleaningAccounts,
LoadingLedger,
ProcessingLedger { slot: Slot, max_slot: Slot },
ProcessingLedger {
slot: Slot,
max_slot: Slot,
},
StartingServices,
Halted, // Validator halted due to `--dev-halt-at-slot` argument
WaitingForSupermajority,
WaitingForSupermajority {
slot: Slot,
gossip_stake_percent: u64,
},

// `Running` is the terminal state once the validator fully starts and all services are
// operational
Expand Down Expand Up @@ -1890,20 +1899,20 @@ fn wait_for_supermajority(
) -> Result<bool, ValidatorError> {
match config.wait_for_supermajority {
None => Ok(false),
Some(wait_for_supermajority) => {
Some(wait_for_supermajority_slot) => {
if let Some(process_blockstore) = process_blockstore {
process_blockstore.process();
}

let bank = bank_forks.read().unwrap().working_bank();
match wait_for_supermajority.cmp(&bank.slot()) {
match wait_for_supermajority_slot.cmp(&bank.slot()) {
std::cmp::Ordering::Less => return Ok(false),
std::cmp::Ordering::Greater => {
error!(
"Ledger does not have enough data to wait for supermajority, \
please enable snapshot fetch. Has {} needs {}",
bank.slot(),
wait_for_supermajority
wait_for_supermajority_slot
);
return Err(ValidatorError::NotEnoughLedgerData);
}
Expand All @@ -1921,7 +1930,6 @@ fn wait_for_supermajority(
}
}

*start_progress.write().unwrap() = ValidatorStartProgress::WaitingForSupermajority;
for i in 1.. {
if i % 10 == 1 {
info!(
Expand All @@ -1934,6 +1942,12 @@ fn wait_for_supermajority(
let gossip_stake_percent =
get_stake_percent_in_gossip(&bank, cluster_info, i % 10 == 0);

*start_progress.write().unwrap() =
ValidatorStartProgress::WaitingForSupermajority {
slot: wait_for_supermajority_slot,
gossip_stake_percent,
};

if gossip_stake_percent >= WAIT_FOR_SUPERMAJORITY_THRESHOLD_PERCENT {
info!(
"Supermajority reached, {}% active stake detected, starting up now.",
Expand Down

0 comments on commit 4e79d78

Please sign in to comment.