use mz_repr::GlobalId;
use thiserror::Error;
use crate::controller::{instance, ComputeInstanceId, ReplicaId};
#[derive(Error, Debug)]
#[error("instance does not exist: {0}")]
pub struct InstanceMissing(pub ComputeInstanceId);
#[derive(Error, Debug)]
#[error("instance exists already: {0}")]
pub struct InstanceExists(pub ComputeInstanceId);
#[derive(Error, Debug)]
#[error("collection does not exist: {0}")]
pub struct CollectionMissing(pub GlobalId);
#[derive(Error, Debug)]
pub enum CollectionLookupError {
#[error("instance does not exist: {0}")]
InstanceMissing(ComputeInstanceId),
#[error("collection does not exist: {0}")]
CollectionMissing(GlobalId),
}
impl From<InstanceMissing> for CollectionLookupError {
fn from(error: InstanceMissing) -> Self {
Self::InstanceMissing(error.0)
}
}
impl From<CollectionMissing> for CollectionLookupError {
fn from(error: CollectionMissing) -> Self {
Self::CollectionMissing(error.0)
}
}
#[derive(Error, Debug)]
pub enum ReplicaCreationError {
#[error("instance does not exist: {0}")]
InstanceMissing(ComputeInstanceId),
#[error("replica exists already: {0}")]
ReplicaExists(ReplicaId),
#[error("collection does not exist: {0}")]
CollectionMissing(GlobalId),
}
impl From<InstanceMissing> for ReplicaCreationError {
fn from(error: InstanceMissing) -> Self {
Self::InstanceMissing(error.0)
}
}
impl From<instance::ReplicaExists> for ReplicaCreationError {
fn from(error: instance::ReplicaExists) -> Self {
Self::ReplicaExists(error.0)
}
}
impl From<CollectionMissing> for ReplicaCreationError {
fn from(error: CollectionMissing) -> Self {
Self::CollectionMissing(error.0)
}
}
#[derive(Error, Debug)]
pub enum ReplicaDropError {
#[error("instance does not exist: {0}")]
InstanceMissing(ComputeInstanceId),
#[error("replica does not exist: {0}")]
ReplicaMissing(ReplicaId),
}
impl From<InstanceMissing> for ReplicaDropError {
fn from(error: InstanceMissing) -> Self {
Self::InstanceMissing(error.0)
}
}
impl From<instance::ReplicaMissing> for ReplicaDropError {
fn from(error: instance::ReplicaMissing) -> Self {
Self::ReplicaMissing(error.0)
}
}
#[derive(Error, Debug)]
pub enum DataflowCreationError {
#[error("instance does not exist: {0}")]
InstanceMissing(ComputeInstanceId),
#[error("collection does not exist: {0}")]
CollectionMissing(GlobalId),
#[error("dataflow definition lacks an as_of value")]
MissingAsOf,
#[error("dataflow has an as_of not beyond the since of collection: {0}")]
SinceViolation(GlobalId),
#[error("subscribe dataflow has an empty as_of")]
EmptyAsOfForSubscribe,
#[error("copy to dataflow has an empty as_of")]
EmptyAsOfForCopyTo,
}
impl From<InstanceMissing> for DataflowCreationError {
fn from(error: InstanceMissing) -> Self {
Self::InstanceMissing(error.0)
}
}
impl From<instance::DataflowCreationError> for DataflowCreationError {
fn from(error: instance::DataflowCreationError) -> Self {
use instance::DataflowCreationError::*;
match error {
CollectionMissing(id) => Self::CollectionMissing(id),
MissingAsOf => Self::MissingAsOf,
SinceViolation(id) => Self::SinceViolation(id),
EmptyAsOfForSubscribe => Self::EmptyAsOfForSubscribe,
EmptyAsOfForCopyTo => Self::EmptyAsOfForCopyTo,
}
}
}
#[derive(Error, Debug)]
pub enum PeekError {
#[error("instance does not exist: {0}")]
InstanceMissing(ComputeInstanceId),
#[error("collection does not exist: {0}")]
CollectionMissing(GlobalId),
#[error("replica does not exist: {0}")]
ReplicaMissing(ReplicaId),
#[error("peek timestamp is not beyond the since of collection: {0}")]
SinceViolation(GlobalId),
}
impl From<InstanceMissing> for PeekError {
fn from(error: InstanceMissing) -> Self {
Self::InstanceMissing(error.0)
}
}
impl From<instance::PeekError> for PeekError {
fn from(error: instance::PeekError) -> Self {
use instance::PeekError::*;
match error {
CollectionMissing(id) => Self::CollectionMissing(id),
ReplicaMissing(id) => Self::ReplicaMissing(id),
SinceViolation(id) => Self::SinceViolation(id),
}
}
}
#[derive(Error, Debug)]
pub enum CollectionUpdateError {
#[error("instance does not exist: {0}")]
InstanceMissing(ComputeInstanceId),
#[error("collection does not exist: {0}")]
CollectionMissing(GlobalId),
}
impl From<InstanceMissing> for CollectionUpdateError {
fn from(error: InstanceMissing) -> Self {
Self::InstanceMissing(error.0)
}
}
impl From<CollectionMissing> for CollectionUpdateError {
fn from(error: CollectionMissing) -> Self {
Self::CollectionMissing(error.0)
}
}
#[derive(Error, Debug)]
pub enum ReadPolicyError {
#[error("instance does not exist: {0}")]
InstanceMissing(ComputeInstanceId),
#[error("collection does not exist: {0}")]
CollectionMissing(GlobalId),
#[error("collection is write-only: {0}")]
WriteOnlyCollection(GlobalId),
}
impl From<InstanceMissing> for ReadPolicyError {
fn from(error: InstanceMissing) -> Self {
Self::InstanceMissing(error.0)
}
}
impl From<instance::ReadPolicyError> for ReadPolicyError {
fn from(error: instance::ReadPolicyError) -> Self {
use instance::ReadPolicyError::*;
match error {
CollectionMissing(id) => Self::CollectionMissing(id),
WriteOnlyCollection(id) => Self::WriteOnlyCollection(id),
}
}
}
#[derive(Error, Debug)]
pub enum SubscribeTargetError {
#[error("instance does not exist: {0}")]
InstanceMissing(ComputeInstanceId),
#[error("subscribe does not exist: {0}")]
SubscribeMissing(GlobalId),
#[error("replica does not exist: {0}")]
ReplicaMissing(ReplicaId),
#[error("subscribe has already produced output")]
SubscribeAlreadyStarted,
}
impl From<InstanceMissing> for SubscribeTargetError {
fn from(error: InstanceMissing) -> Self {
Self::InstanceMissing(error.0)
}
}
impl From<instance::SubscribeTargetError> for SubscribeTargetError {
fn from(error: instance::SubscribeTargetError) -> Self {
use instance::SubscribeTargetError::*;
match error {
SubscribeMissing(id) => Self::SubscribeMissing(id),
ReplicaMissing(id) => Self::ReplicaMissing(id),
SubscribeAlreadyStarted => Self::SubscribeAlreadyStarted,
}
}
}
#[derive(Error, Debug)]
pub enum RemoveOrphansError {
#[error("orchestrator error: {0}")]
OrchestratorError(anyhow::Error),
}
impl From<anyhow::Error> for RemoveOrphansError {
fn from(error: anyhow::Error) -> Self {
Self::OrchestratorError(error)
}
}