mz_compute_client/controller/
error.rs1use mz_repr::GlobalId;
21use thiserror::Error;
22
23pub use mz_storage_types::errors::CollectionMissing;
24
25use crate::controller::instance::InstanceShutDown;
26use crate::controller::{ComputeInstanceId, ReplicaId};
27
28pub const ERROR_TARGET_REPLICA_FAILED: &str = "target replica failed or was dropped";
31
32#[derive(Error, Debug)]
34#[error("instance does not exist: {0}")]
35pub struct InstanceMissing(pub ComputeInstanceId);
36
37#[derive(Error, Debug)]
40#[error("instance exists already: {0}")]
41pub struct InstanceExists(pub ComputeInstanceId);
42
43#[derive(Error, Debug)]
45#[error("No replicas found in cluster for target list.")]
46pub struct HydrationCheckBadTarget(pub Vec<ReplicaId>);
47
48#[derive(Error, Debug)]
50pub enum CollectionLookupError {
51 #[error("instance does not exist: {0}")]
53 InstanceMissing(ComputeInstanceId),
54 #[error("the instance has shut down")]
56 InstanceShutDown,
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<InstanceShutDown> for CollectionLookupError {
69 fn from(_error: InstanceShutDown) -> Self {
70 Self::InstanceShutDown
71 }
72}
73
74impl From<CollectionMissing> for CollectionLookupError {
75 fn from(error: CollectionMissing) -> Self {
76 Self::CollectionMissing(error.0)
77 }
78}
79
80#[derive(Error, Debug)]
82pub enum ReplicaCreationError {
83 #[error("instance does not exist: {0}")]
85 InstanceMissing(ComputeInstanceId),
86 #[error("replica exists already: {0}")]
88 ReplicaExists(ReplicaId),
89}
90
91impl From<InstanceMissing> for ReplicaCreationError {
92 fn from(error: InstanceMissing) -> Self {
93 Self::InstanceMissing(error.0)
94 }
95}
96
97#[derive(Error, Debug)]
99pub enum ReplicaDropError {
100 #[error("instance does not exist: {0}")]
102 InstanceMissing(ComputeInstanceId),
103 #[error("replica does not exist: {0}")]
105 ReplicaMissing(ReplicaId),
106}
107
108impl From<InstanceMissing> for ReplicaDropError {
109 fn from(error: InstanceMissing) -> Self {
110 Self::InstanceMissing(error.0)
111 }
112}
113
114#[derive(Error, Debug)]
116pub enum DataflowCreationError {
117 #[error("instance does not exist: {0}")]
119 InstanceMissing(ComputeInstanceId),
120 #[error("collection does not exist: {0}")]
122 CollectionMissing(GlobalId),
123 #[error("replica does not exist: {0}")]
125 ReplicaMissing(ReplicaId),
126 #[error("dataflow definition lacks an as_of value")]
128 MissingAsOf,
129 #[error("dataflow has an as_of not beyond the since of collection: {0}")]
131 SinceViolation(GlobalId),
132 #[error("subscribe dataflow has an empty as_of")]
135 EmptyAsOfForSubscribe,
136 #[error("copy to dataflow has an empty as_of")]
139 EmptyAsOfForCopyTo,
140}
141
142impl From<InstanceMissing> for DataflowCreationError {
143 fn from(error: InstanceMissing) -> Self {
144 Self::InstanceMissing(error.0)
145 }
146}
147
148impl From<CollectionMissing> for DataflowCreationError {
149 fn from(error: CollectionMissing) -> Self {
150 Self::CollectionMissing(error.0)
151 }
152}
153
154#[derive(Error, Debug)]
156pub enum PeekError {
157 #[error("instance does not exist: {0}")]
159 InstanceMissing(ComputeInstanceId),
160 #[error("collection does not exist: {0}")]
162 CollectionMissing(GlobalId),
163 #[error("replica does not exist: {0}")]
165 ReplicaMissing(ReplicaId),
166 #[error("peek timestamp is not beyond the since of collection: {0}")]
168 SinceViolation(GlobalId),
169}
170
171impl From<InstanceMissing> for PeekError {
172 fn from(error: InstanceMissing) -> Self {
173 Self::InstanceMissing(error.0)
174 }
175}
176
177impl From<CollectionMissing> for PeekError {
178 fn from(error: CollectionMissing) -> Self {
179 Self::CollectionMissing(error.0)
180 }
181}
182
183#[derive(Error, Debug)]
185pub enum CollectionUpdateError {
186 #[error("instance does not exist: {0}")]
188 InstanceMissing(ComputeInstanceId),
189 #[error("collection does not exist: {0}")]
191 CollectionMissing(GlobalId),
192}
193
194impl From<InstanceMissing> for CollectionUpdateError {
195 fn from(error: InstanceMissing) -> Self {
196 Self::InstanceMissing(error.0)
197 }
198}
199
200impl From<CollectionMissing> for CollectionUpdateError {
201 fn from(error: CollectionMissing) -> Self {
202 Self::CollectionMissing(error.0)
203 }
204}
205
206#[derive(Error, Debug)]
208pub enum ReadPolicyError {
209 #[error("instance does not exist: {0}")]
211 InstanceMissing(ComputeInstanceId),
212 #[error("collection does not exist: {0}")]
214 CollectionMissing(GlobalId),
215 #[error("collection is write-only: {0}")]
217 WriteOnlyCollection(GlobalId),
218}
219
220impl From<InstanceMissing> for ReadPolicyError {
221 fn from(error: InstanceMissing) -> Self {
222 Self::InstanceMissing(error.0)
223 }
224}
225
226impl From<CollectionMissing> for ReadPolicyError {
227 fn from(error: CollectionMissing) -> Self {
228 Self::CollectionMissing(error.0)
229 }
230}
231
232#[derive(Error, Debug)]
234pub enum RemoveOrphansError {
235 #[error("orchestrator error: {0}")]
237 OrchestratorError(anyhow::Error),
238}
239
240impl From<anyhow::Error> for RemoveOrphansError {
241 fn from(error: anyhow::Error) -> Self {
242 Self::OrchestratorError(error)
243 }
244}