ferrum_interfaces/vnext/completion/checkpoint_access/
recovery.rs1use super::*;
2use crate::vnext::{CompletionSweepEntry, CompletionSweepObservation, CompletionSweepReceipt};
3
4impl<R: DeviceRuntime> CompletionReaper<R> {
5 pub fn recover_abandoned_checkpoints(
14 &self,
15 maximum_slots: usize,
16 ) -> Result<CompletionSweepReceipt, VNextError> {
17 let mut receipt = self.poll_bounded(maximum_slots)?;
18 for entry in &mut receipt.state_transfers {
19 match self.recover_abandoned_state_transfer_slot(entry.slot_id) {
20 Ok(Some(observation)) => entry.observation = observation,
21 Ok(None) => {}
22 Err(error) => receipt.entries.push(CompletionSweepEntry {
23 slot_id: entry.slot_id,
24 observation: CompletionSweepObservation::Failed(error),
25 }),
26 }
27 }
28 receipt.retained_after = self.retained_count();
29 receipt.quarantined_after = self.quarantined_count();
30 Ok(receipt)
31 }
32}