-
Notifications
You must be signed in to change notification settings - Fork 129
/
Copy patherrors.rs
74 lines (67 loc) · 2.49 KB
/
errors.rs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
use std::net::SocketAddr;
use scylla_cql::frame::frame_errors::{
FrameBodyExtensionsParseError, FrameHeaderParseError, LowLevelDeserializationError,
};
use thiserror::Error;
#[derive(Debug, Error)]
pub enum ReadFrameError {
#[error("Failed to read frame header: {0}")]
Header(#[from] FrameHeaderParseError),
#[error("Failed to decompress frame: {0}")]
Compression(#[from] FrameBodyExtensionsParseError),
}
#[derive(Debug, Error)]
pub enum DoorkeeperError {
#[error("Listen on {0} failed with {1}")]
Listen(SocketAddr, std::io::Error),
#[error("Connection attempt from driver to proxy {0} failed with {1}")]
DriverConnectionAttempt(SocketAddr, std::io::Error),
#[error("Connection to node {0} failed with {1}")]
NodeConnectionAttempt(SocketAddr, std::io::Error),
#[error("Could not create TCP socket: {0}")]
SocketCreate(std::io::Error),
#[error("Could not bind socket to ephemeral port: {0}")]
SocketBind(std::io::Error),
#[error("Shard-aware connection failed, because no more possible ports are left")]
NoMorePorts,
#[error("Could not send Options frame for obtaining shards number: {0}")]
ObtainingShardNumber(std::io::Error),
#[error("Could not send read Supported frame for obtaining shards number: {0}")]
ObtainingShardNumberFrame(ReadFrameError),
#[error("Could not read Supported options: {0}")]
ObtainingShardNumberParseOptions(LowLevelDeserializationError),
#[error("ShardInfo parameters missing")]
ObtainingShardNumberNoShardInfo,
#[error("Could not parse shard number: {0}")]
ObtainingShardNumberParseShardNumber(std::num::ParseIntError),
#[error("0 as number of shards!")]
ObtainingShardNumberGotZero,
}
#[derive(Debug, Error)]
pub enum WorkerError {
#[error("Driver {0} disconnected")]
DriverDisconnected(SocketAddr),
#[error("Node {0} disconnected")]
NodeDisconnected(SocketAddr),
}
#[derive(Debug, Error)]
pub enum ProxyError {
#[error("Doorkeeper failed: {0}")]
Doorkeeper(DoorkeeperError),
#[error("Worker failed: {0}")]
Worker(WorkerError),
#[error("Could not await proxy finish: {0}")]
AwaitFinishFailure(String),
#[error("All error reporting channels have already been closed")]
SanityCheckFailure,
}
impl From<WorkerError> for ProxyError {
fn from(err: WorkerError) -> Self {
ProxyError::Worker(err)
}
}
impl From<DoorkeeperError> for ProxyError {
fn from(err: DoorkeeperError) -> Self {
ProxyError::Doorkeeper(err)
}
}