ic_memory/ledger/
error.rs1use crate::{
2 key::StableKey, ledger::LedgerPayloadEnvelopeError, physical::CommitRecoveryError,
3 slot::MemoryManagerSlot,
4};
5
6#[non_exhaustive]
13#[derive(Clone, Debug, Eq, thiserror::Error, PartialEq)]
14pub enum LedgerIntegrityError {
15 #[error("ledger exceeds {resource} limit {limit}")]
17 LimitExceeded {
18 resource: &'static str,
19 limit: usize,
20 },
21 #[error("stable key '{stable_key}' appears in more than one allocation record")]
23 DuplicateStableKey { stable_key: StableKey },
24 #[error("allocation slot '{slot:?}' appears in more than one allocation record")]
26 DuplicateSlot { slot: MemoryManagerSlot },
27 #[error("genesis ledger contains allocation records")]
29 NonemptyGenesis,
30}
31
32#[non_exhaustive]
37#[derive(Clone, Debug, Eq, thiserror::Error, PartialEq)]
38pub enum LedgerCommitError {
39 #[error(transparent)]
41 Recovery(CommitRecoveryError),
42 #[error(transparent)]
44 PayloadEnvelope(LedgerPayloadEnvelopeError),
45 #[error(
47 "physical generation {physical_generation} does not match logical ledger generation {logical_generation}"
48 )]
49 PhysicalLogicalGenerationMismatch {
50 physical_generation: u64,
52 logical_generation: u64,
54 },
55 #[error("allocation ledger codec failed: {0}")]
57 Codec(String),
58 #[error(transparent)]
60 Integrity(LedgerIntegrityError),
61}
62
63#[non_exhaustive]
70#[derive(Clone, Debug, Eq, thiserror::Error, PartialEq)]
71pub enum AllocationStageError {
72 #[error("ledger generation {generation} cannot be advanced without overflow")]
74 GenerationOverflow { generation: u64 },
75 #[error(transparent)]
76 Integrity(#[from] LedgerIntegrityError),
77 #[error(
79 "validated allocations were produced at generation {validated_generation}, but ledger is at generation {ledger_generation}"
80 )]
81 StaleValidatedAllocations {
82 validated_generation: u64,
84 ledger_generation: u64,
86 },
87 #[error("stable key '{stable_key}' was historically bound to a different allocation slot")]
89 StableKeySlotConflict {
90 stable_key: StableKey,
92 historical_slot: MemoryManagerSlot,
94 declared_slot: MemoryManagerSlot,
96 },
97 #[error("allocation slot '{slot:?}' was historically bound to stable key '{historical_key}'")]
99 SlotStableKeyConflict {
100 slot: MemoryManagerSlot,
102 historical_key: StableKey,
104 declared_key: StableKey,
106 },
107 #[error("stable key '{stable_key}' was explicitly retired and cannot be redeclared")]
109 RetiredAllocation {
110 stable_key: StableKey,
112 slot: MemoryManagerSlot,
114 },
115}