Stop searching for incorrect shred version after a minute (#13512)
This commit is contained in:
@ -58,6 +58,7 @@ use solana_sdk::{
|
|||||||
timing::timestamp,
|
timing::timestamp,
|
||||||
};
|
};
|
||||||
use solana_vote_program::vote_state::VoteState;
|
use solana_vote_program::vote_state::VoteState;
|
||||||
|
use std::time::Instant;
|
||||||
use std::{
|
use std::{
|
||||||
collections::HashSet,
|
collections::HashSet,
|
||||||
net::SocketAddr,
|
net::SocketAddr,
|
||||||
@ -914,24 +915,36 @@ fn new_banks_from_ledger(
|
|||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
fn backup_and_clear_blockstore(ledger_path: &Path, start_slot: Slot, shred_version: u16) {
|
fn blockstore_contains_bad_shred_version(
|
||||||
use std::time::Instant;
|
blockstore: &Blockstore,
|
||||||
let blockstore = Blockstore::open(ledger_path).unwrap();
|
start_slot: Slot,
|
||||||
let mut do_copy_and_clear = false;
|
shred_version: u16,
|
||||||
|
) -> bool {
|
||||||
|
let now = Instant::now();
|
||||||
// Search for shreds with incompatible version in blockstore
|
// Search for shreds with incompatible version in blockstore
|
||||||
if let Ok(slot_meta_iterator) = blockstore.slot_meta_iterator(start_slot) {
|
if let Ok(slot_meta_iterator) = blockstore.slot_meta_iterator(start_slot) {
|
||||||
|
info!("Searching for incorrect shreds..");
|
||||||
for (slot, _meta) in slot_meta_iterator {
|
for (slot, _meta) in slot_meta_iterator {
|
||||||
if let Ok(shreds) = blockstore.get_data_shreds_for_slot(slot, 0) {
|
if let Ok(shreds) = blockstore.get_data_shreds_for_slot(slot, 0) {
|
||||||
for shred in &shreds {
|
for shred in &shreds {
|
||||||
if shred.version() != shred_version {
|
if shred.version() != shred_version {
|
||||||
do_copy_and_clear = true;
|
return true;
|
||||||
break;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
if now.elapsed().as_secs() > 60 {
|
||||||
|
info!("Didn't find incorrect shreds after 60 seconds, aborting");
|
||||||
|
return false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
false
|
||||||
|
}
|
||||||
|
|
||||||
|
fn backup_and_clear_blockstore(ledger_path: &Path, start_slot: Slot, shred_version: u16) {
|
||||||
|
let blockstore = Blockstore::open(ledger_path).unwrap();
|
||||||
|
let do_copy_and_clear =
|
||||||
|
blockstore_contains_bad_shred_version(&blockstore, start_slot, shred_version);
|
||||||
|
|
||||||
// If found, then copy shreds to another db and clear from start_slot
|
// If found, then copy shreds to another db and clear from start_slot
|
||||||
if do_copy_and_clear {
|
if do_copy_and_clear {
|
||||||
|
Reference in New Issue
Block a user