remove sleeps from repair tests (#30252)
This commit is contained in:
parent
2decc5275c
commit
f4fe550004
|
@ -4,7 +4,7 @@ use {
|
||||||
serve_repair::ShredRepairType, tree_diff::TreeDiff,
|
serve_repair::ShredRepairType, tree_diff::TreeDiff,
|
||||||
},
|
},
|
||||||
solana_ledger::{blockstore::Blockstore, blockstore_meta::SlotMeta},
|
solana_ledger::{blockstore::Blockstore, blockstore_meta::SlotMeta},
|
||||||
solana_sdk::{clock::Slot, hash::Hash, timing::timestamp},
|
solana_sdk::{clock::Slot, hash::Hash},
|
||||||
std::collections::{HashMap, HashSet},
|
std::collections::{HashMap, HashSet},
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -114,6 +114,7 @@ pub fn get_closest_completion(
|
||||||
slot_meta_cache: &mut HashMap<Slot, Option<SlotMeta>>,
|
slot_meta_cache: &mut HashMap<Slot, Option<SlotMeta>>,
|
||||||
processed_slots: &mut HashSet<Slot>,
|
processed_slots: &mut HashSet<Slot>,
|
||||||
limit: usize,
|
limit: usize,
|
||||||
|
now_timestamp: u64,
|
||||||
) -> Vec<ShredRepairType> {
|
) -> Vec<ShredRepairType> {
|
||||||
let mut v: Vec<(Slot, u64)> = Vec::default();
|
let mut v: Vec<(Slot, u64)> = Vec::default();
|
||||||
let iter = GenericTraversal::new(tree);
|
let iter = GenericTraversal::new(tree);
|
||||||
|
@ -187,7 +188,7 @@ pub fn get_closest_completion(
|
||||||
slot,
|
slot,
|
||||||
slot_meta,
|
slot_meta,
|
||||||
limit - repairs.len(),
|
limit - repairs.len(),
|
||||||
timestamp(),
|
now_timestamp,
|
||||||
);
|
);
|
||||||
repairs.extend(new_repairs);
|
repairs.extend(new_repairs);
|
||||||
}
|
}
|
||||||
|
@ -200,10 +201,9 @@ pub fn get_closest_completion(
|
||||||
pub mod test {
|
pub mod test {
|
||||||
use {
|
use {
|
||||||
super::*,
|
super::*,
|
||||||
crate::repair_service::DEFER_REPAIR_THRESHOLD,
|
crate::repair_service::post_shred_deferment_timestamp,
|
||||||
solana_ledger::{blockstore::Blockstore, get_tmp_ledger_path},
|
solana_ledger::{blockstore::Blockstore, get_tmp_ledger_path},
|
||||||
solana_sdk::hash::Hash,
|
solana_sdk::{hash::Hash, timing::timestamp},
|
||||||
std::thread::sleep,
|
|
||||||
trees::{tr, Tree, TreeWalk},
|
trees::{tr, Tree, TreeWalk},
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -240,6 +240,7 @@ pub mod test {
|
||||||
&mut slot_meta_cache,
|
&mut slot_meta_cache,
|
||||||
&mut processed_slots,
|
&mut processed_slots,
|
||||||
10,
|
10,
|
||||||
|
timestamp(),
|
||||||
);
|
);
|
||||||
assert_eq!(repairs, []);
|
assert_eq!(repairs, []);
|
||||||
|
|
||||||
|
@ -255,7 +256,6 @@ pub mod test {
|
||||||
Hash::default(),
|
Hash::default(),
|
||||||
);
|
);
|
||||||
let heaviest_subtree_fork_choice = HeaviestSubtreeForkChoice::new_from_tree(forks);
|
let heaviest_subtree_fork_choice = HeaviestSubtreeForkChoice::new_from_tree(forks);
|
||||||
sleep(DEFER_REPAIR_THRESHOLD);
|
|
||||||
let mut slot_meta_cache = HashMap::default();
|
let mut slot_meta_cache = HashMap::default();
|
||||||
let mut processed_slots = HashSet::default();
|
let mut processed_slots = HashSet::default();
|
||||||
let repairs = get_closest_completion(
|
let repairs = get_closest_completion(
|
||||||
|
@ -264,6 +264,7 @@ pub mod test {
|
||||||
&mut slot_meta_cache,
|
&mut slot_meta_cache,
|
||||||
&mut processed_slots,
|
&mut processed_slots,
|
||||||
2,
|
2,
|
||||||
|
post_shred_deferment_timestamp(),
|
||||||
);
|
);
|
||||||
assert_eq!(
|
assert_eq!(
|
||||||
repairs,
|
repairs,
|
||||||
|
|
|
@ -44,7 +44,7 @@ use {
|
||||||
use {solana_ledger::shred::Nonce, solana_sdk::clock::DEFAULT_MS_PER_SLOT};
|
use {solana_ledger::shred::Nonce, solana_sdk::clock::DEFAULT_MS_PER_SLOT};
|
||||||
|
|
||||||
// Time to defer repair requests to allow for turbine propagation
|
// Time to defer repair requests to allow for turbine propagation
|
||||||
pub(crate) const DEFER_REPAIR_THRESHOLD: Duration = Duration::from_millis(200);
|
const DEFER_REPAIR_THRESHOLD: Duration = Duration::from_millis(200);
|
||||||
const DEFER_REPAIR_THRESHOLD_TICKS: u64 = DEFER_REPAIR_THRESHOLD.as_millis() as u64 / MS_PER_TICK;
|
const DEFER_REPAIR_THRESHOLD_TICKS: u64 = DEFER_REPAIR_THRESHOLD.as_millis() as u64 / MS_PER_TICK;
|
||||||
|
|
||||||
pub type DuplicateSlotsResetSender = CrossbeamSender<Vec<(Slot, Hash)>>;
|
pub type DuplicateSlotsResetSender = CrossbeamSender<Vec<(Slot, Hash)>>;
|
||||||
|
@ -609,6 +609,7 @@ impl RepairService {
|
||||||
blockstore: &Blockstore,
|
blockstore: &Blockstore,
|
||||||
max_repairs: usize,
|
max_repairs: usize,
|
||||||
repair_range: &RepairSlotRange,
|
repair_range: &RepairSlotRange,
|
||||||
|
now_timestamp: u64,
|
||||||
) -> crate::result::Result<Vec<ShredRepairType>> {
|
) -> crate::result::Result<Vec<ShredRepairType>> {
|
||||||
// Slot height and shred indexes for shreds we want to repair
|
// Slot height and shred indexes for shreds we want to repair
|
||||||
let mut repairs: Vec<ShredRepairType> = vec![];
|
let mut repairs: Vec<ShredRepairType> = vec![];
|
||||||
|
@ -630,7 +631,7 @@ impl RepairService {
|
||||||
slot,
|
slot,
|
||||||
&meta,
|
&meta,
|
||||||
max_repairs - repairs.len(),
|
max_repairs - repairs.len(),
|
||||||
timestamp(),
|
now_timestamp,
|
||||||
);
|
);
|
||||||
repairs.extend(new_repairs);
|
repairs.extend(new_repairs);
|
||||||
}
|
}
|
||||||
|
@ -929,8 +930,6 @@ mod test {
|
||||||
blockstore
|
blockstore
|
||||||
.insert_shreds(shreds_to_write, None, false)
|
.insert_shreds(shreds_to_write, None, false)
|
||||||
.unwrap();
|
.unwrap();
|
||||||
// sleep so that the holes are ready for repair
|
|
||||||
sleep(Duration::from_secs(1));
|
|
||||||
let expected: Vec<ShredRepairType> = (0..num_slots)
|
let expected: Vec<ShredRepairType> = (0..num_slots)
|
||||||
.flat_map(|slot| {
|
.flat_map(|slot| {
|
||||||
missing_indexes_per_slot
|
missing_indexes_per_slot
|
||||||
|
@ -950,7 +949,7 @@ mod test {
|
||||||
MAX_UNKNOWN_LAST_INDEX_REPAIRS,
|
MAX_UNKNOWN_LAST_INDEX_REPAIRS,
|
||||||
MAX_CLOSEST_COMPLETION_REPAIRS,
|
MAX_CLOSEST_COMPLETION_REPAIRS,
|
||||||
&HashSet::default(),
|
&HashSet::default(),
|
||||||
timestamp(),
|
post_shred_deferment_timestamp(),
|
||||||
&mut RepairTiming::default(),
|
&mut RepairTiming::default(),
|
||||||
&mut BestRepairsStats::default(),
|
&mut BestRepairsStats::default(),
|
||||||
),
|
),
|
||||||
|
@ -967,7 +966,7 @@ mod test {
|
||||||
MAX_UNKNOWN_LAST_INDEX_REPAIRS,
|
MAX_UNKNOWN_LAST_INDEX_REPAIRS,
|
||||||
MAX_CLOSEST_COMPLETION_REPAIRS,
|
MAX_CLOSEST_COMPLETION_REPAIRS,
|
||||||
&HashSet::default(),
|
&HashSet::default(),
|
||||||
timestamp(),
|
post_shred_deferment_timestamp(),
|
||||||
&mut RepairTiming::default(),
|
&mut RepairTiming::default(),
|
||||||
&mut BestRepairsStats::default(),
|
&mut BestRepairsStats::default(),
|
||||||
)[..],
|
)[..],
|
||||||
|
@ -1038,8 +1037,7 @@ mod test {
|
||||||
slot_shreds.remove(0);
|
slot_shreds.remove(0);
|
||||||
blockstore.insert_shreds(slot_shreds, None, false).unwrap();
|
blockstore.insert_shreds(slot_shreds, None, false).unwrap();
|
||||||
}
|
}
|
||||||
// sleep to make slot eligible for repair
|
|
||||||
sleep(Duration::from_secs(1));
|
|
||||||
// Iterate through all possible combinations of start..end (inclusive on both
|
// Iterate through all possible combinations of start..end (inclusive on both
|
||||||
// sides of the range)
|
// sides of the range)
|
||||||
for start in 0..slots.len() {
|
for start in 0..slots.len() {
|
||||||
|
@ -1064,6 +1062,7 @@ mod test {
|
||||||
&blockstore,
|
&blockstore,
|
||||||
std::usize::MAX,
|
std::usize::MAX,
|
||||||
&repair_slot_range,
|
&repair_slot_range,
|
||||||
|
post_shred_deferment_timestamp(),
|
||||||
)
|
)
|
||||||
.unwrap(),
|
.unwrap(),
|
||||||
expected
|
expected
|
||||||
|
@ -1112,6 +1111,7 @@ mod test {
|
||||||
&blockstore,
|
&blockstore,
|
||||||
std::usize::MAX,
|
std::usize::MAX,
|
||||||
&repair_slot_range,
|
&repair_slot_range,
|
||||||
|
timestamp(),
|
||||||
)
|
)
|
||||||
.unwrap(),
|
.unwrap(),
|
||||||
expected
|
expected
|
||||||
|
|
|
@ -223,6 +223,7 @@ impl RepairWeight {
|
||||||
&mut slot_meta_cache,
|
&mut slot_meta_cache,
|
||||||
&mut processed_slots,
|
&mut processed_slots,
|
||||||
max_closest_completion_repairs,
|
max_closest_completion_repairs,
|
||||||
|
now_timestamp,
|
||||||
);
|
);
|
||||||
let num_closest_completion_repairs = closest_completion_repairs.len();
|
let num_closest_completion_repairs = closest_completion_repairs.len();
|
||||||
let num_closest_completion_slots = processed_slots.len() - pre_num_slots;
|
let num_closest_completion_slots = processed_slots.len() - pre_num_slots;
|
||||||
|
@ -471,6 +472,7 @@ impl RepairWeight {
|
||||||
slot_meta_cache: &mut HashMap<Slot, Option<SlotMeta>>,
|
slot_meta_cache: &mut HashMap<Slot, Option<SlotMeta>>,
|
||||||
processed_slots: &mut HashSet<Slot>,
|
processed_slots: &mut HashSet<Slot>,
|
||||||
max_new_repairs: usize,
|
max_new_repairs: usize,
|
||||||
|
now_timestamp: u64,
|
||||||
) -> Vec<ShredRepairType> {
|
) -> Vec<ShredRepairType> {
|
||||||
let mut repairs = Vec::default();
|
let mut repairs = Vec::default();
|
||||||
for (_slot, tree) in self.trees.iter() {
|
for (_slot, tree) in self.trees.iter() {
|
||||||
|
@ -483,6 +485,7 @@ impl RepairWeight {
|
||||||
slot_meta_cache,
|
slot_meta_cache,
|
||||||
processed_slots,
|
processed_slots,
|
||||||
max_new_repairs - repairs.len(),
|
max_new_repairs - repairs.len(),
|
||||||
|
now_timestamp,
|
||||||
);
|
);
|
||||||
repairs.extend(new_repairs);
|
repairs.extend(new_repairs);
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue