diff --git a/src/meta-srv/src/error.rs b/src/meta-srv/src/error.rs index 3674f1982c..8babeb4892 100644 --- a/src/meta-srv/src/error.rs +++ b/src/meta-srv/src/error.rs @@ -12,13 +12,11 @@ // See the License for the specific language governing permissions and // limitations under the License. -use std::string::FromUtf8Error; - use common_error::prelude::*; use snafu::Location; use tokio::sync::mpsc::error::SendError; use tonic::codegen::http; -use tonic::{Code, Status}; +use tonic::Code; #[derive(Debug, Snafu)] #[snafu(visibility(pub))] @@ -273,7 +271,7 @@ pub enum Error { #[snafu(display("Invalid utf-8 value, source: {:?}", source))] InvalidUtf8Value { - source: FromUtf8Error, + source: std::string::FromUtf8Error, location: Location, }, @@ -353,13 +351,21 @@ pub enum Error { #[snafu(backtrace)] source: common_meta::error::Error, }, + + // this error is used for custom error mapping + // please do not delete it + #[snafu(display("Other error, source: {}", source))] + Other { + source: BoxedError, + location: Location, + }, } pub type Result = std::result::Result; -impl From for Status { +impl From for tonic::Status { fn from(err: Error) -> Self { - Status::new(Code::Internal, err.to_string()) + tonic::Status::new(Code::Internal, err.to_string()) } } @@ -433,14 +439,14 @@ impl ErrorExt for Error { Error::RegionFailoverCandidatesNotFound { .. } => StatusCode::RuntimeResourcesExhausted, Error::RegisterProcedureLoader { source, .. } => source.status_code(), - Error::TableRouteConversion { source } => source.status_code(), + Error::Other { source, .. } => source.status_code(), } } } // for form tonic -pub(crate) fn match_for_io_error(err_status: &Status) -> Option<&std::io::Error> { +pub(crate) fn match_for_io_error(err_status: &tonic::Status) -> Option<&std::io::Error> { let mut err: &(dyn std::error::Error + 'static) = err_status; loop { diff --git a/src/servers/src/error.rs b/src/servers/src/error.rs index 05722791e7..00feeaa5a7 100644 --- a/src/servers/src/error.rs +++ b/src/servers/src/error.rs @@ -245,6 +245,14 @@ pub enum Error { #[snafu(display("{}", reason))] UnexpectedResult { reason: String, location: Location }, + + // this error is used for custom error mapping + // please do not delete it + #[snafu(display("Other error, source: {}", source))] + Other { + source: BoxedError, + location: Location, + }, } pub type Result = std::result::Result; @@ -305,6 +313,7 @@ impl ErrorExt for Error { InvalidFlushArgument { .. } => StatusCode::InvalidArguments, ParsePromQL { source, .. } => source.status_code(), + Other { source, .. } => source.status_code(), UnexpectedResult { .. } => StatusCode::Unexpected, }