ancient append vecs: pass through can_randomly_shrink (#28706)
This commit is contained in:
parent
9ff9051d87
commit
7885fdca37
|
@ -4287,7 +4287,11 @@ impl AccountsDb {
|
|||
return;
|
||||
}
|
||||
|
||||
self.combine_ancient_slots(self.get_sorted_potential_ancient_slots());
|
||||
let can_randomly_shrink = true;
|
||||
self.combine_ancient_slots(
|
||||
self.get_sorted_potential_ancient_slots(),
|
||||
can_randomly_shrink,
|
||||
);
|
||||
}
|
||||
|
||||
/// create and return new ancient append vec
|
||||
|
@ -4362,8 +4366,8 @@ impl AccountsDb {
|
|||
&self,
|
||||
slot: Slot,
|
||||
current_ancient: &mut CurrentAncientAppendVec,
|
||||
can_randomly_shrink: bool,
|
||||
) -> Option<SnapshotStorage> {
|
||||
let can_randomly_shrink = true;
|
||||
self.get_storages_for_slot(slot).and_then(|all_storages| {
|
||||
self.should_move_to_ancient_append_vec(
|
||||
&all_storages,
|
||||
|
@ -4424,8 +4428,8 @@ impl AccountsDb {
|
|||
}
|
||||
|
||||
/// Combine all account data from storages in 'sorted_slots' into ancient append vecs.
|
||||
/// This keeps us from accumulating append vecs in slots older than an epoch.
|
||||
fn combine_ancient_slots(&self, sorted_slots: Vec<Slot>) {
|
||||
/// This keeps us from accumulating append vecs for each slot older than an epoch.
|
||||
fn combine_ancient_slots(&self, sorted_slots: Vec<Slot>, can_randomly_shrink: bool) {
|
||||
if sorted_slots.is_empty() {
|
||||
return;
|
||||
}
|
||||
|
@ -4440,14 +4444,17 @@ impl AccountsDb {
|
|||
|
||||
let len = sorted_slots.len();
|
||||
for slot in sorted_slots {
|
||||
let old_storages =
|
||||
match self.get_storages_to_move_to_ancient_append_vec(slot, &mut current_ancient) {
|
||||
Some(old_storages) => old_storages,
|
||||
None => {
|
||||
// nothing to squash for this slot
|
||||
continue;
|
||||
}
|
||||
};
|
||||
let old_storages = match self.get_storages_to_move_to_ancient_append_vec(
|
||||
slot,
|
||||
&mut current_ancient,
|
||||
can_randomly_shrink,
|
||||
) {
|
||||
Some(old_storages) => old_storages,
|
||||
None => {
|
||||
// nothing to squash for this slot
|
||||
continue;
|
||||
}
|
||||
};
|
||||
|
||||
if guard.is_none() {
|
||||
// we are now doing interesting work in squashing ancient
|
||||
|
@ -17567,6 +17574,16 @@ pub mod tests {
|
|||
}
|
||||
}
|
||||
|
||||
const CAN_RANDOMLY_SHRINK_FALSE: bool = false;
|
||||
|
||||
#[test]
|
||||
fn test_combine_ancient_slots_empty() {
|
||||
solana_logger::setup();
|
||||
let db = AccountsDb::new_single_for_tests();
|
||||
// empty slots
|
||||
db.combine_ancient_slots(Vec::default(), CAN_RANDOMLY_SHRINK_FALSE);
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn test_handle_dropped_roots_for_ancient() {
|
||||
solana_logger::setup();
|
||||
|
@ -17631,8 +17648,12 @@ pub mod tests {
|
|||
.unwrap();
|
||||
let mut current_ancient = CurrentAncientAppendVec::default();
|
||||
|
||||
let should_move =
|
||||
db.should_move_to_ancient_append_vec(&storages, &mut current_ancient, slot5, false);
|
||||
let should_move = db.should_move_to_ancient_append_vec(
|
||||
&storages,
|
||||
&mut current_ancient,
|
||||
slot5,
|
||||
CAN_RANDOMLY_SHRINK_FALSE,
|
||||
);
|
||||
assert!(current_ancient.is_none());
|
||||
// slot is not ancient, so it is good to move
|
||||
assert!(should_move);
|
||||
|
@ -17640,14 +17661,22 @@ pub mod tests {
|
|||
// try 2 storages in 1 slot, should not be able to move
|
||||
current_ancient = CurrentAncientAppendVec::new(slot5, Arc::clone(&storages[0])); // just 'some', contents don't matter
|
||||
let two_storages = vec![storages[0].clone(), storages[0].clone()];
|
||||
let should_move =
|
||||
db.should_move_to_ancient_append_vec(&two_storages, &mut current_ancient, slot5, false);
|
||||
let should_move = db.should_move_to_ancient_append_vec(
|
||||
&two_storages,
|
||||
&mut current_ancient,
|
||||
slot5,
|
||||
CAN_RANDOMLY_SHRINK_FALSE,
|
||||
);
|
||||
assert!(current_ancient.is_none());
|
||||
assert!(!should_move);
|
||||
|
||||
current_ancient = CurrentAncientAppendVec::new(slot5, Arc::clone(&storages[0])); // just 'some', contents don't matter
|
||||
let should_move =
|
||||
db.should_move_to_ancient_append_vec(&storages, &mut current_ancient, slot5, false);
|
||||
let should_move = db.should_move_to_ancient_append_vec(
|
||||
&storages,
|
||||
&mut current_ancient,
|
||||
slot5,
|
||||
CAN_RANDOMLY_SHRINK_FALSE,
|
||||
);
|
||||
// should have kept the same 'current_ancient'
|
||||
assert_eq!(current_ancient.slot(), slot5);
|
||||
assert_eq!(current_ancient.append_vec().slot(), slot5);
|
||||
|
@ -17664,7 +17693,7 @@ pub mod tests {
|
|||
&vec![ancient1.clone()],
|
||||
&mut current_ancient,
|
||||
slot1_ancient,
|
||||
false,
|
||||
CAN_RANDOMLY_SHRINK_FALSE,
|
||||
);
|
||||
assert!(!should_move);
|
||||
assert_eq!(current_ancient.append_vec_id(), ancient1.append_vec_id());
|
||||
|
@ -17680,7 +17709,7 @@ pub mod tests {
|
|||
&vec![ancient2.clone()],
|
||||
&mut current_ancient,
|
||||
slot2_ancient,
|
||||
false,
|
||||
CAN_RANDOMLY_SHRINK_FALSE,
|
||||
);
|
||||
assert!(!should_move);
|
||||
assert_eq!(current_ancient.append_vec_id(), ancient2.append_vec_id());
|
||||
|
@ -17695,7 +17724,7 @@ pub mod tests {
|
|||
&vec![full_ancient_3.clone()],
|
||||
&mut current_ancient,
|
||||
slot3_full_ancient,
|
||||
false,
|
||||
CAN_RANDOMLY_SHRINK_FALSE,
|
||||
);
|
||||
assert!(!should_move);
|
||||
assert_eq!(
|
||||
|
@ -17710,7 +17739,7 @@ pub mod tests {
|
|||
&vec![full_ancient_3.clone()],
|
||||
&mut current_ancient,
|
||||
slot3_full_ancient,
|
||||
false,
|
||||
CAN_RANDOMLY_SHRINK_FALSE,
|
||||
);
|
||||
assert!(!should_move);
|
||||
assert_eq!(
|
||||
|
@ -17728,7 +17757,7 @@ pub mod tests {
|
|||
&vec![full_ancient_3.clone()],
|
||||
&mut current_ancient,
|
||||
slot3_full_ancient,
|
||||
false,
|
||||
CAN_RANDOMLY_SHRINK_FALSE,
|
||||
);
|
||||
assert!(should_move);
|
||||
assert!(current_ancient.is_none());
|
||||
|
@ -17740,7 +17769,7 @@ pub mod tests {
|
|||
&vec![full_ancient_3],
|
||||
&mut current_ancient,
|
||||
slot3_full_ancient,
|
||||
false,
|
||||
CAN_RANDOMLY_SHRINK_FALSE,
|
||||
);
|
||||
assert!(should_move);
|
||||
assert_eq!(current_ancient.append_vec_id(), ancient1.append_vec_id());
|
||||
|
|
Loading…
Reference in New Issue