pinot_client_rust/
errors.rs1use std::num::ParseIntError;
2
3use log::error;
4use reqwest::blocking::Response as BlockingReqwestResponse;
5use reqwest::Error as ReqwestError;
6use reqwest::Response as AsyncReqwestResponse;
7use serde_json::error::Error as JsonError;
8use zookeeper::ZkError;
9
10use crate::dynamic_broker_selector::DynamicBrokerSelectorError;
11use crate::request::Request;
12use crate::response::DataType;
13use crate::simple_broker_selector::SimpleBrokerSelectorError;
14
15pub type Result<T> = std::result::Result<T, Error>;
17
18#[derive(Debug, thiserror::Error)]
20#[non_exhaustive]
21pub enum Error {
22 #[error("Failed to set an external view watcher for the path '{0}' due to: {1}")]
24 FailedExternalViewWatcher(String, #[source] ZkError),
25
26 #[error("Failed Json deserialization: {0}")]
28 FailedJsonDeserialization(#[from] JsonError),
29
30 #[error("Failed execute request: {0:?}")]
32 FailedRequest(Request, #[source] ReqwestError),
33
34 #[error("Failed connect to zookeeper: {0}")]
36 FailedZookeeperConnection(#[from] ZkError),
37
38 #[error("Requested result data of type {requested:?} as {actual:?}")]
40 IncorrectResultDataType { requested: DataType, actual: DataType },
41
42 #[error("Invalid broker Key: {0}, should be in the format of Broker_[hostname]_[port]")]
44 InvalidBrokerKey(String),
45
46 #[error("Invalid broker port: {0}, should be an integer: {1}")]
48 InvalidBrokerPort(String, #[source] ParseIntError),
49
50 #[error("Invalid result row index: {0}")]
52 InvalidResultRowIndex(usize),
53
54 #[error("Invalid result column index: {0}")]
56 InvalidResultColumnIndex(usize),
57
58 #[error("Invalid result column name: {0}")]
60 InvalidResultColumnName(String),
61
62 #[error("Failed to build HTTP request from {0:?} due to: {1}")]
64 InvalidRequest(Request, #[source] ReqwestError),
65
66 #[error("Encountered invalid HTTP response {0:?}")]
68 InvalidBlockingResponse(BlockingReqwestResponse),
69
70 #[error("Encountered invalid HTTP response {0:?}")]
72 InvalidAsyncResponse(AsyncReqwestResponse),
73
74 #[error("No available broker found")]
76 NoAvailableBroker,
77
78 #[error("No available broker found for table: {0}")]
80 NoAvailableBrokerForTable(String),
81
82 #[error("Pinot query returned exceptions: {0:?}")]
83 PinotExceptions(Vec<crate::response::PinotException>),
84
85 #[error("Dynamic broker selector unavailable: {0}")]
87 UnavailableDynamicBrokerSelector(#[from] DynamicBrokerSelectorError),
88
89 #[error("Simple broker selector unavailable: {0}")]
91 UnavailableSimpleBrokerSelector(#[from] SimpleBrokerSelectorError),
92}
93
94pub(crate) fn log_error(
95 msg: &str, func: impl Fn() -> Result<()>,
96) {
97 let msg = msg.to_string();
98 if let Err(e) = func() {
99 error!("'{}': {:?}", msg, e);
100 }
101}