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("peek timestamp is not beyond the since of collection: {0}")]
158 SinceViolation(GlobalId),
159}
160
161impl From<InstanceMissing> for PeekError {
162 fn from(error: InstanceMissing) -> Self {
163 Self::InstanceMissing(error.0)
164 }
165}
166
167impl From<CollectionMissing> for PeekError {
168 fn from(error: CollectionMissing) -> Self {
169 Self::CollectionMissing(error.0)
170 }
171}
172
173#[derive(Error, Debug)]
175pub enum CollectionUpdateError {
176 #[error("instance does not exist: {0}")]
178 InstanceMissing(ComputeInstanceId),
179 #[error("collection does not exist: {0}")]
181 CollectionMissing(GlobalId),
182}
183
184impl From<InstanceMissing> for CollectionUpdateError {
185 fn from(error: InstanceMissing) -> Self {
186 Self::InstanceMissing(error.0)
187 }
188}
189
190impl From<CollectionMissing> for CollectionUpdateError {
191 fn from(error: CollectionMissing) -> Self {
192 Self::CollectionMissing(error.0)
193 }
194}
195
196#[derive(Error, Debug)]
198pub enum ReadPolicyError {
199 #[error("instance does not exist: {0}")]
201 InstanceMissing(ComputeInstanceId),
202 #[error("collection does not exist: {0}")]
204 CollectionMissing(GlobalId),
205 #[error("collection is write-only: {0}")]
207 WriteOnlyCollection(GlobalId),
208}
209
210impl From<InstanceMissing> for ReadPolicyError {
211 fn from(error: InstanceMissing) -> Self {
212 Self::InstanceMissing(error.0)
213 }
214}
215
216impl From<CollectionMissing> for ReadPolicyError {
217 fn from(error: CollectionMissing) -> Self {
218 Self::CollectionMissing(error.0)
219 }
220}
221
222#[derive(Error, Debug)]
224pub enum RemoveOrphansError {
225 #[error("orchestrator error: {0}")]
227 OrchestratorError(anyhow::Error),
228}
229
230impl From<anyhow::Error> for RemoveOrphansError {
231 fn from(error: anyhow::Error) -> Self {
232 Self::OrchestratorError(error)
233 }
234}