1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
/// Durable cleanup phase for an interrupted transaction.
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub enum TransactionRecoveryPhase {
/// The commit is published, but obsolete encrypted pages still need zeroing.
Cleanup,
}
/// Decision returned by a controlled recovery progress callback.
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub enum TransactionRecoveryControl {
/// Continue with the next manifest page.
Continue,
/// Stop after the current durable checkpoint.
Cancel,
}
/// Result of an explicit controlled recovery attempt.
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub enum TransactionRecoveryOutcome {
/// The archive was already clean and sealed.
NotRequired,
/// Cleanup and sealing completed.
Complete,
/// Recovery stopped at a durable checkpoint and can be resumed.
Cancelled(TransactionRecoveryStatus),
}
/// Recovery work advertised by a published lockbox transaction.
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub struct TransactionRecoveryStatus {
/// Published transaction that owns the cleanup manifest.
pub transaction_sequence: u64,
/// Last transaction whose cleanup was durably completed.
pub cleanup_sequence: u64,
/// Current recovery phase.
pub phase: TransactionRecoveryPhase,
/// Number of ranges that must be zeroed.
pub range_count: u32,
/// Number of ranges durably completed.
pub completed_ranges: u32,
/// Number of manifest pages that must be processed.
pub page_count: u32,
/// Number of manifest pages durably completed.
pub completed_pages: u32,
/// Total bytes that must be zeroed.
pub total_bytes: u64,
/// Number of bytes durably completed.
pub completed_bytes: u64,
}
/// Progress reported while explicit transaction recovery is running.
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub struct TransactionRecoveryProgress {
/// Current recovery phase.
pub phase: TransactionRecoveryPhase,
/// Number of ranges durably processed so far.
pub completed_ranges: u32,
/// Total number of ranges in the recovery manifest.
pub total_ranges: u32,
/// Number of manifest pages durably processed.
pub completed_pages: u32,
/// Total manifest pages in the transaction.
pub total_pages: u32,
/// Number of bytes processed so far.
pub completed_bytes: u64,
/// Total bytes in the recovery manifest.
pub total_bytes: u64,
}