mz_compute_client/controller/
error.rs1use mz_repr::GlobalId;
21use mz_storage_types::read_holds::ReadHoldError;
22use thiserror::Error;
23
24use crate::controller::{ComputeInstanceId, ReplicaId};
25
26pub const ERROR_TARGET_REPLICA_FAILED: &str = "target replica failed or was dropped";
29
30#[derive(Error, Debug)]
32#[error("instance does not exist: {0}")]
33pub struct InstanceMissing(pub ComputeInstanceId);
34
35#[derive(Error, Debug)]
38#[error("instance exists already: {0}")]
39pub struct InstanceExists(pub ComputeInstanceId);
40
41#[derive(Error, Debug)]
43#[error("collection does not exist: {0}")]
44pub struct CollectionMissing(pub GlobalId);
45
46#[derive(Error, Debug)]
48#[error("No replicas found in cluster for target list.")]
49pub struct HydrationCheckBadTarget(pub Vec<ReplicaId>);
50
51#[derive(Error, Debug)]
53pub enum CollectionLookupError {
54 #[error("instance does not exist: {0}")]
56 InstanceMissing(ComputeInstanceId),
57 #[error("collection does not exist: {0}")]
59 CollectionMissing(GlobalId),
60}
61
62impl From<InstanceMissing> for CollectionLookupError {
63 fn from(error: InstanceMissing) -> Self {
64 Self::InstanceMissing(error.0)
65 }
66}
67
68impl From<CollectionMissing> for CollectionLookupError {
69 fn from(error: CollectionMissing) -> Self {
70 Self::CollectionMissing(error.0)
71 }
72}
73
74#[derive(Error, Debug)]
76pub enum ReplicaCreationError {
77 #[error("instance does not exist: {0}")]
79 InstanceMissing(ComputeInstanceId),
80 #[error("replica exists already: {0}")]
82 ReplicaExists(ReplicaId),
83}
84
85impl From<InstanceMissing> for ReplicaCreationError {
86 fn from(error: InstanceMissing) -> Self {
87 Self::InstanceMissing(error.0)
88 }
89}
90
91#[derive(Error, Debug)]
93pub enum ReplicaDropError {
94 #[error("instance does not exist: {0}")]
96 InstanceMissing(ComputeInstanceId),
97 #[error("replica does not exist: {0}")]
99 ReplicaMissing(ReplicaId),
100}
101
102impl From<InstanceMissing> for ReplicaDropError {
103 fn from(error: InstanceMissing) -> Self {
104 Self::InstanceMissing(error.0)
105 }
106}
107
108#[derive(Error, Debug)]
110pub enum DataflowCreationError {
111 #[error("instance does not exist: {0}")]
113 InstanceMissing(ComputeInstanceId),
114 #[error("collection does not exist: {0}")]
116 CollectionMissing(GlobalId),
117 #[error("replica does not exist: {0}")]
119 ReplicaMissing(ReplicaId),
120 #[error("dataflow definition lacks an as_of value")]
122 MissingAsOf,
123 #[error("dataflow has an as_of not beyond the since of collection: {0}")]
125 SinceViolation(GlobalId),
126 #[error("subscribe dataflow has an empty as_of")]
129 EmptyAsOfForSubscribe,
130 #[error("copy to dataflow has an empty as_of")]
133 EmptyAsOfForCopyTo,
134}
135
136impl From<InstanceMissing> for DataflowCreationError {
137 fn from(error: InstanceMissing) -> Self {
138 Self::InstanceMissing(error.0)
139 }
140}
141
142impl From<CollectionMissing> for DataflowCreationError {
143 fn from(error: CollectionMissing) -> Self {
144 Self::CollectionMissing(error.0)
145 }
146}
147
148impl From<ReadHoldError> for DataflowCreationError {
149 fn from(error: ReadHoldError) -> Self {
150 match error {
151 ReadHoldError::CollectionMissing(id) => Self::CollectionMissing(id),
152 ReadHoldError::SinceViolation(id) => Self::SinceViolation(id),
153 }
154 }
155}
156
157#[derive(Error, Debug)]
159pub enum PeekError {
160 #[error("instance does not exist: {0}")]
162 InstanceMissing(ComputeInstanceId),
163 #[error("collection does not exist: {0}")]
165 CollectionMissing(GlobalId),
166 #[error("replica does not exist: {0}")]
168 ReplicaMissing(ReplicaId),
169 #[error("peek timestamp is not beyond the since of collection: {0}")]
171 SinceViolation(GlobalId),
172}
173
174impl From<InstanceMissing> for PeekError {
175 fn from(error: InstanceMissing) -> Self {
176 Self::InstanceMissing(error.0)
177 }
178}
179
180impl From<CollectionMissing> for PeekError {
181 fn from(error: CollectionMissing) -> Self {
182 Self::CollectionMissing(error.0)
183 }
184}
185
186impl From<ReadHoldError> for PeekError {
187 fn from(error: ReadHoldError) -> Self {
188 match error {
189 ReadHoldError::CollectionMissing(id) => Self::CollectionMissing(id),
190 ReadHoldError::SinceViolation(id) => Self::SinceViolation(id),
191 }
192 }
193}
194
195#[derive(Error, Debug)]
197pub enum CollectionUpdateError {
198 #[error("instance does not exist: {0}")]
200 InstanceMissing(ComputeInstanceId),
201 #[error("collection does not exist: {0}")]
203 CollectionMissing(GlobalId),
204}
205
206impl From<InstanceMissing> for CollectionUpdateError {
207 fn from(error: InstanceMissing) -> Self {
208 Self::InstanceMissing(error.0)
209 }
210}
211
212impl From<CollectionMissing> for CollectionUpdateError {
213 fn from(error: CollectionMissing) -> Self {
214 Self::CollectionMissing(error.0)
215 }
216}
217
218#[derive(Error, Debug)]
220pub enum ReadPolicyError {
221 #[error("instance does not exist: {0}")]
223 InstanceMissing(ComputeInstanceId),
224 #[error("collection does not exist: {0}")]
226 CollectionMissing(GlobalId),
227 #[error("collection is write-only: {0}")]
229 WriteOnlyCollection(GlobalId),
230}
231
232impl From<InstanceMissing> for ReadPolicyError {
233 fn from(error: InstanceMissing) -> Self {
234 Self::InstanceMissing(error.0)
235 }
236}
237
238impl From<CollectionMissing> for ReadPolicyError {
239 fn from(error: CollectionMissing) -> Self {
240 Self::CollectionMissing(error.0)
241 }
242}
243
244#[derive(Error, Debug)]
246pub enum RemoveOrphansError {
247 #[error("orchestrator error: {0}")]
249 OrchestratorError(anyhow::Error),
250}
251
252impl From<anyhow::Error> for RemoveOrphansError {
253 fn from(error: anyhow::Error) -> Self {
254 Self::OrchestratorError(error)
255 }
256}