mz_compute_client/controller/
error.rs1use mz_repr::GlobalId;
21use thiserror::Error;
22
23pub use mz_storage_types::errors::CollectionMissing;
24
25use crate::controller::{ComputeInstanceId, ReplicaId};
26
27pub const ERROR_TARGET_REPLICA_FAILED: &str = "target replica failed or was dropped";
30
31#[derive(Error, Debug)]
33#[error("instance does not exist: {0}")]
34pub struct InstanceMissing(pub ComputeInstanceId);
35
36#[derive(Error, Debug)]
39#[error("instance exists already: {0}")]
40pub struct InstanceExists(pub ComputeInstanceId);
41
42#[derive(Error, Debug)]
44#[error("No replicas found in cluster for target list.")]
45pub struct HydrationCheckBadTarget(pub Vec<ReplicaId>);
46
47#[derive(Error, Debug)]
49pub enum CollectionLookupError {
50 #[error("instance does not exist: {0}")]
52 InstanceMissing(ComputeInstanceId),
53 #[error("collection does not exist: {0}")]
55 CollectionMissing(GlobalId),
56}
57
58impl From<InstanceMissing> for CollectionLookupError {
59 fn from(error: InstanceMissing) -> Self {
60 Self::InstanceMissing(error.0)
61 }
62}
63
64impl From<CollectionMissing> for CollectionLookupError {
65 fn from(error: CollectionMissing) -> Self {
66 Self::CollectionMissing(error.0)
67 }
68}
69
70#[derive(Error, Debug)]
72pub enum ReplicaCreationError {
73 #[error("instance does not exist: {0}")]
75 InstanceMissing(ComputeInstanceId),
76 #[error("replica exists already: {0}")]
78 ReplicaExists(ReplicaId),
79}
80
81impl From<InstanceMissing> for ReplicaCreationError {
82 fn from(error: InstanceMissing) -> Self {
83 Self::InstanceMissing(error.0)
84 }
85}
86
87#[derive(Error, Debug)]
89pub enum ReplicaDropError {
90 #[error("instance does not exist: {0}")]
92 InstanceMissing(ComputeInstanceId),
93 #[error("replica does not exist: {0}")]
95 ReplicaMissing(ReplicaId),
96}
97
98impl From<InstanceMissing> for ReplicaDropError {
99 fn from(error: InstanceMissing) -> Self {
100 Self::InstanceMissing(error.0)
101 }
102}
103
104#[derive(Error, Debug)]
106pub enum DataflowCreationError {
107 #[error("instance does not exist: {0}")]
109 InstanceMissing(ComputeInstanceId),
110 #[error("collection does not exist: {0}")]
112 CollectionMissing(GlobalId),
113 #[error("replica does not exist: {0}")]
115 ReplicaMissing(ReplicaId),
116 #[error("dataflow definition lacks an as_of value")]
118 MissingAsOf,
119 #[error("dataflow has an as_of not beyond the since of collection: {0}")]
121 SinceViolation(GlobalId),
122 #[error("subscribe dataflow has an empty as_of")]
125 EmptyAsOfForSubscribe,
126 #[error("copy to dataflow has an empty as_of")]
129 EmptyAsOfForCopyTo,
130}
131
132impl From<InstanceMissing> for DataflowCreationError {
133 fn from(error: InstanceMissing) -> Self {
134 Self::InstanceMissing(error.0)
135 }
136}
137
138impl From<CollectionMissing> for DataflowCreationError {
139 fn from(error: CollectionMissing) -> Self {
140 Self::CollectionMissing(error.0)
141 }
142}
143
144#[derive(Error, Debug)]
146pub enum PeekError {
147 #[error("instance does not exist: {0}")]
149 InstanceMissing(ComputeInstanceId),
150 #[error("collection does not exist: {0}")]
152 CollectionMissing(GlobalId),
153 #[error("replica does not exist: {0}")]
155 ReplicaMissing(ReplicaId),
156 #[error("read hold ID does not match peeked collection: {0}")]
158 ReadHoldIdMismatch(GlobalId),
159 #[error("peek timestamp is not beyond the since of collection: {0}")]
161 SinceViolation(GlobalId),
162}
163
164impl From<InstanceMissing> for PeekError {
165 fn from(error: InstanceMissing) -> Self {
166 Self::InstanceMissing(error.0)
167 }
168}
169
170impl From<CollectionMissing> for PeekError {
171 fn from(error: CollectionMissing) -> Self {
172 Self::CollectionMissing(error.0)
173 }
174}
175
176#[derive(Error, Debug)]
178pub enum CollectionUpdateError {
179 #[error("instance does not exist: {0}")]
181 InstanceMissing(ComputeInstanceId),
182 #[error("collection does not exist: {0}")]
184 CollectionMissing(GlobalId),
185}
186
187impl From<InstanceMissing> for CollectionUpdateError {
188 fn from(error: InstanceMissing) -> Self {
189 Self::InstanceMissing(error.0)
190 }
191}
192
193impl From<CollectionMissing> for CollectionUpdateError {
194 fn from(error: CollectionMissing) -> Self {
195 Self::CollectionMissing(error.0)
196 }
197}
198
199#[derive(Error, Debug)]
201pub enum ReadPolicyError {
202 #[error("instance does not exist: {0}")]
204 InstanceMissing(ComputeInstanceId),
205 #[error("collection does not exist: {0}")]
207 CollectionMissing(GlobalId),
208 #[error("collection is write-only: {0}")]
210 WriteOnlyCollection(GlobalId),
211}
212
213impl From<InstanceMissing> for ReadPolicyError {
214 fn from(error: InstanceMissing) -> Self {
215 Self::InstanceMissing(error.0)
216 }
217}
218
219impl From<CollectionMissing> for ReadPolicyError {
220 fn from(error: CollectionMissing) -> Self {
221 Self::CollectionMissing(error.0)
222 }
223}
224
225#[derive(Error, Debug)]
227pub enum RemoveOrphansError {
228 #[error("orchestrator error: {0}")]
230 OrchestratorError(anyhow::Error),
231}
232
233impl From<anyhow::Error> for RemoveOrphansError {
234 fn from(error: anyhow::Error) -> Self {
235 Self::OrchestratorError(error)
236 }
237}