Skip to main content

commonware_storage/journal/
mod.rs

1//! An append-only log for storing arbitrary data.
2//!
3//! Journals provide append-only logging for persisting arbitrary data with fast replay, historical
4//! pruning, and rudimentary support for fetching individual items. A journal can be used on its own
5//! to serve as a backing store for some in-memory data structure, or as a building block for a more
6//! complex construction that prescribes some meaning to items in the log.
7
8use thiserror::Error;
9
10commonware_macros::stability_mod!(ALPHA, pub mod authenticated);
11pub mod contiguous;
12pub mod segmented;
13
14#[cfg(all(test, feature = "arbitrary"))]
15mod conformance;
16
17/// Errors that can occur when interacting with `Journal`.
18#[derive(Debug, Error)]
19pub enum Error {
20    #[error("mmr error: {0}")]
21    Mmr(anyhow::Error),
22    #[error("journal error: {0}")]
23    Journal(anyhow::Error),
24    #[error("runtime error: {0}")]
25    Runtime(#[from] commonware_runtime::Error),
26    #[error("codec error: {0}")]
27    Codec(#[from] commonware_codec::Error),
28    #[error("metadata error: {0}")]
29    Metadata(#[from] crate::metadata::Error),
30    #[error("invalid blob name: {0}")]
31    InvalidBlobName(String),
32    #[error("invalid blob size: index={0} size={1}")]
33    InvalidBlobSize(u64, u64),
34    #[error("item too large: size={0}")]
35    ItemTooLarge(usize),
36    #[error("already pruned to section: {0}")]
37    AlreadyPrunedToSection(u64),
38    #[error("section out of range: {0}")]
39    SectionOutOfRange(u64),
40    #[error("usize too small")]
41    UsizeTooSmall,
42    #[error("offset overflow")]
43    OffsetOverflow,
44    #[error("unexpected size: expected={0} actual={1}")]
45    UnexpectedSize(u32, u32),
46    #[error("missing blob: {0}")]
47    MissingBlob(u64),
48    #[error("item out of range: {0}")]
49    ItemOutOfRange(u64),
50    #[error("item pruned: {0}")]
51    ItemPruned(u64),
52    #[error("invalid rewind: {0}")]
53    InvalidRewind(u64),
54    #[error("compression failed")]
55    CompressionFailed,
56    #[error("decompression failed")]
57    DecompressionFailed,
58    #[error("value too large (> u32::MAX)")]
59    ValueTooLarge,
60    #[error("corruption detected: {0}")]
61    Corruption(String),
62    #[error("invalid configuration: {0}")]
63    InvalidConfiguration(String),
64    #[error("checksum mismatch: expected={0}, found={1}")]
65    ChecksumMismatch(u32, u32),
66}