use thiserror::Error;
#[derive(Debug, Error)]
pub enum MirrorError {
#[error(
"cluster-id mismatch: we declared source_cluster={declared:?}, \
remote reports its id as {remote:?}"
)]
ClusterIdMismatch { declared: String, remote: String },
#[error("observer-role violation: peer attempted voter operation: {detail}")]
ObserverRoleViolation { detail: String },
#[error(
"snapshot offset regression for database {database_id:?}: \
expected {expected}, got {actual}"
)]
SnapshotOffsetRegression {
database_id: String,
expected: u64,
actual: u64,
},
#[error(
"snapshot CRC mismatch for database {database_id:?}: \
stored {stored:#010x}, computed {computed:#010x}"
)]
SnapshotCrcMismatch {
database_id: String,
stored: u32,
computed: u32,
},
#[error("cross-cluster handshake codec error: {detail}")]
HandshakeCodec { detail: String },
#[error("cross-cluster protocol version mismatch: local={local}, remote_detail={detail:?}")]
ProtocolVersionMismatch { local: u16, detail: String },
#[error("cross-cluster transport error: {detail}")]
Transport { detail: String },
#[error(
"bytes-in-flight cap exceeded: in_flight={in_flight}, cap={cap} for mirror {database_id:?}"
)]
BytesInFlightCapExceeded {
database_id: String,
in_flight: u64,
cap: u64,
},
#[error("mirror {database_id:?} is promoted and no longer accepts replication")]
MirrorPromoted { database_id: String },
}