use crate::metadata::{
RemoteLogSegmentId, RemoteLogSegmentState, RemotePartitionDeleteState, TopicIdPartition,
};
#[derive(Debug, thiserror::Error)]
pub enum RemoteStorageError {
#[error("remote storage I/O error: {0}")]
Io(#[from] std::io::Error),
#[error("no remote log segment metadata for {0:?}")]
SegmentNotFound(RemoteLogSegmentId),
#[error("invalid add for {id:?}: {reason}")]
InvalidAdd {
id: RemoteLogSegmentId,
reason: String,
},
#[error("invalid segment state transition for {id:?}: {from:?} -> {to:?}")]
InvalidSegmentTransition {
id: RemoteLogSegmentId,
from: RemoteLogSegmentState,
to: RemoteLogSegmentState,
},
#[error("invalid partition delete transition for {tp:?}: {from:?} -> {to:?}")]
InvalidPartitionDeleteTransition {
tp: TopicIdPartition,
from: Option<RemotePartitionDeleteState>,
to: RemotePartitionDeleteState,
},
#[error("invalid argument: {0}")]
InvalidArgument(String),
#[error("remote storage backend error: {0}")]
Backend(String),
#[error("remote log metadata partition {partition} not ready (assigned but not caught up)")]
NotReady {
partition: i32,
},
}