Skip to main content

zlayer_consensus/
error.rs

1//! Error types for the consensus layer.
2
3use crate::types::NodeId;
4
5/// Errors that can occur in the consensus layer.
6#[derive(Debug, thiserror::Error)]
7pub enum ConsensusError {
8    /// `OpenRaft` configuration error.
9    #[error("invalid raft config: {0}")]
10    Config(#[from] openraft::ConfigError),
11
12    /// `OpenRaft` fatal error.
13    #[error("raft fatal error: {0}")]
14    Fatal(String),
15
16    /// `OpenRaft` client write error (forwarded as string to avoid generic explosion).
17    #[error("raft write error: {0}")]
18    Write(String),
19
20    /// `OpenRaft` initialization error.
21    #[error("raft init error: {0}")]
22    Init(String),
23
24    /// `OpenRaft` membership change error.
25    #[error("membership change error: {0}")]
26    Membership(String),
27
28    /// Network / RPC error.
29    #[error("network error: {0}")]
30    Network(String),
31
32    /// Storage error.
33    #[error("storage error: {0}")]
34    Storage(#[from] openraft::StorageError<NodeId>),
35
36    /// Serialization / deserialization error.
37    #[error("serialization error: {0}")]
38    Serialization(String),
39
40    /// The node is not the current leader.
41    #[error("not leader (leader is {leader:?})")]
42    NotLeader {
43        /// The node ID of the current leader, if known.
44        leader: Option<NodeId>,
45    },
46
47    /// Redb storage error.
48    #[cfg(feature = "redb-store")]
49    #[error("redb error: {0}")]
50    Redb(String),
51}
52
53/// Result alias for consensus operations.
54pub type Result<T> = std::result::Result<T, ConsensusError>;