Skip to content
This repository has been archived by the owner on Jan 22, 2025. It is now read-only.

Commit

Permalink
Some review feedback
Browse files Browse the repository at this point in the history
  • Loading branch information
Steven Czabaniuk committed Oct 14, 2022
1 parent dd12ccf commit 9037968
Show file tree
Hide file tree
Showing 2 changed files with 16 additions and 16 deletions.
30 changes: 15 additions & 15 deletions ledger/src/blockstore.rs
Original file line number Diff line number Diff line change
Expand Up @@ -3325,40 +3325,40 @@ impl Blockstore {
/// a snapshot) is a valid way to join a cluster. For this case, mark this
/// root as connected such that the node that joined midway through can
/// have their slots considered connected.
pub fn set_and_chain_connected_on_root(&self, slot: Slot) -> Result<()> {
pub fn set_and_chain_connected_on_root_and_next_slots(&self, root: Slot) -> Result<()> {
info!(
"Marking slot {} and any full children slots as connected",
slot
root
);

let mut meta = self
.meta(slot)?
.unwrap_or_else(|| SlotMeta::new(slot, None));
let mut root_meta = self
.meta(root)?
.unwrap_or_else(|| SlotMeta::new(root, None));
// If the slot was already connected, there is nothing to do as this slot's
// children are also assumed to be appropriately connected
let already_connected = meta.is_connected();
let already_connected = root_meta.is_connected();
if already_connected {
return Ok(());
}

meta.set_connected(true);
root_meta.set_connected(true);
let mut write_batch = self.db.batch()?;
write_batch.put::<cf::SlotMeta>(meta.slot, &meta)?;
write_batch.put::<cf::SlotMeta>(root_meta.slot, &root_meta)?;

let mut next_slots = VecDeque::from(meta.next_slots);
let mut next_slots = VecDeque::from(root_meta.next_slots);
while !next_slots.is_empty() {
let current_slot = next_slots.pop_front().unwrap();
let mut current_meta = self.meta(current_slot)?.unwrap_or_else(|| {
let slot = next_slots.pop_front().unwrap();
let mut meta = self.meta(slot)?.unwrap_or_else(|| {
panic!(
"Slot {} is a child but has no SlotMeta in blockstore",
current_slot
slot
)
});

if update_child_from_connected_parent(&mut current_meta) {
next_slots.extend(current_meta.next_slots.iter());
if update_child_from_connected_parent(&mut meta) {
next_slots.extend(meta.next_slots.iter());
}
write_batch.put::<cf::SlotMeta>(current_meta.slot, &current_meta)?;
write_batch.put::<cf::SlotMeta>(meta.slot, &meta)?;
}

self.db.write(write_batch)?;
Expand Down
2 changes: 1 addition & 1 deletion ledger/src/blockstore_processor.rs
Original file line number Diff line number Diff line change
Expand Up @@ -855,7 +855,7 @@ pub fn process_blockstore_from_root(
)
.expect("Couldn't mark start_slot as root on startup");
blockstore
.set_and_chain_connected_on_root(bank.slot())
.set_and_chain_connected_on_root_and_next_slots(bank.slot())
.expect("Couldn't mark start_slot as connected during startup")
} else {
info!(
Expand Down

0 comments on commit 9037968

Please sign in to comment.