diff --git a/src/api/src/error.rs b/src/api/src/error.rs index d5f6f091e3..09cff7defb 100644 --- a/src/api/src/error.rs +++ b/src/api/src/error.rs @@ -41,7 +41,7 @@ pub enum Error { ))] ConvertColumnDefaultConstraint { column: String, - #[snafu(backtrace)] + location: Location, source: datatypes::error::Error, }, @@ -52,7 +52,7 @@ pub enum Error { ))] InvalidColumnDefaultConstraint { column: String, - #[snafu(backtrace)] + location: Location, source: datatypes::error::Error, }, } diff --git a/src/catalog/src/error.rs b/src/catalog/src/error.rs index 79b2c57ab3..64e858b754 100644 --- a/src/catalog/src/error.rs +++ b/src/catalog/src/error.rs @@ -32,18 +32,18 @@ pub enum Error { source ))] CompileScriptInternal { - #[snafu(backtrace)] + location: Location, source: BoxedError, }, #[snafu(display("Failed to open system catalog table, source: {}", source))] OpenSystemCatalog { - #[snafu(backtrace)] + location: Location, source: table::error::Error, }, #[snafu(display("Failed to create system catalog table, source: {}", source))] CreateSystemCatalog { - #[snafu(backtrace)] + location: Location, source: table::error::Error, }, @@ -54,7 +54,7 @@ pub enum Error { ))] CreateTable { table_info: String, - #[snafu(backtrace)] + location: Location, source: table::error::Error, }, @@ -94,7 +94,7 @@ pub enum Error { #[snafu(display("Table engine not found: {}, source: {}", engine_name, source))] TableEngineNotFound { engine_name: String, - #[snafu(backtrace)] + location: Location, source: table::error::Error, }, @@ -132,7 +132,7 @@ pub enum Error { #[snafu(display("Failed to open table, table info: {}, source: {}", table_info, source))] OpenTable { table_info: String, - #[snafu(backtrace)] + location: Location, source: table::error::Error, }, @@ -147,13 +147,13 @@ pub enum Error { #[snafu(display("Failed to read system catalog table records"))] ReadSystemCatalog { - #[snafu(backtrace)] + location: Location, source: common_recordbatch::error::Error, }, #[snafu(display("Failed to create recordbatch, source: {}", source))] CreateRecordBatch { - #[snafu(backtrace)] + location: Location, source: common_recordbatch::error::Error, }, @@ -162,7 +162,7 @@ pub enum Error { source ))] InsertCatalogRecord { - #[snafu(backtrace)] + location: Location, source: table::error::Error, }, @@ -173,7 +173,7 @@ pub enum Error { ))] DeregisterTable { request: DeregisterTableRequest, - #[snafu(backtrace)] + location: Location, source: table::error::Error, }, @@ -182,36 +182,36 @@ pub enum Error { #[snafu(display("Failed to scan system catalog table, source: {}", source))] SystemCatalogTableScan { - #[snafu(backtrace)] + location: Location, source: table::error::Error, }, #[snafu(display("{source}"))] Internal { - #[snafu(backtrace)] + location: Location, source: BoxedError, }, #[snafu(display("Failed to execute system catalog table scan, source: {}", source))] SystemCatalogTableScanExec { - #[snafu(backtrace)] + location: Location, source: common_query::error::Error, }, #[snafu(display("Cannot parse catalog value, source: {}", source))] InvalidCatalogValue { - #[snafu(backtrace)] + location: Location, source: common_catalog::error::Error, }, #[snafu(display("Failed to perform metasrv operation, source: {}", source))] MetaSrv { - #[snafu(backtrace)] + location: Location, source: meta_client::error::Error, }, #[snafu(display("Invalid table info in catalog, source: {}", source))] InvalidTableInfoInCatalog { - #[snafu(backtrace)] + location: Location, source: datatypes::error::Error, }, @@ -230,7 +230,7 @@ pub enum Error { #[snafu(display("Table schema mismatch, source: {}", source))] TableSchemaMismatch { - #[snafu(backtrace)] + location: Location, source: table::error::Error, }, @@ -258,7 +258,7 @@ impl ErrorExt for Error { Error::Generic { .. } | Error::SystemCatalogTypeMismatch { .. } => StatusCode::Internal, - Error::ReadSystemCatalog { source, .. } | Error::CreateRecordBatch { source } => { + Error::ReadSystemCatalog { source, .. } | Error::CreateRecordBatch { source, .. } => { source.status_code() } Error::InvalidCatalogValue { source, .. } => source.status_code(), @@ -275,14 +275,14 @@ impl ErrorExt for Error { | Error::OpenTable { source, .. } | Error::CreateTable { source, .. } | Error::DeregisterTable { source, .. } - | Error::TableSchemaMismatch { source } => source.status_code(), + | Error::TableSchemaMismatch { source, .. } => source.status_code(), Error::MetaSrv { source, .. } => source.status_code(), - Error::SystemCatalogTableScan { source } => source.status_code(), - Error::SystemCatalogTableScanExec { source } => source.status_code(), - Error::InvalidTableInfoInCatalog { source } => source.status_code(), + Error::SystemCatalogTableScan { source, .. } => source.status_code(), + Error::SystemCatalogTableScanExec { source, .. } => source.status_code(), + Error::InvalidTableInfoInCatalog { source, .. } => source.status_code(), - Error::CompileScriptInternal { source } | Error::Internal { source } => { + Error::CompileScriptInternal { source, .. } | Error::Internal { source, .. } => { source.status_code() } diff --git a/src/client/src/error.rs b/src/client/src/error.rs index 0bfb67ec0d..c45f686469 100644 --- a/src/client/src/error.rs +++ b/src/client/src/error.rs @@ -34,13 +34,13 @@ pub enum Error { #[snafu(display("Failed to convert FlightData, source: {}", source))] ConvertFlightData { - #[snafu(backtrace)] + location: Location, source: common_grpc::Error, }, #[snafu(display("Column datatype error, source: {}", source))] ColumnDataType { - #[snafu(backtrace)] + location: Location, source: api::error::Error, }, @@ -57,7 +57,7 @@ pub enum Error { ))] CreateChannel { addr: String, - #[snafu(backtrace)] + location: Location, source: common_grpc::error::Error, }, @@ -85,7 +85,7 @@ impl ErrorExt for Error { Error::Server { code, .. } => *code, Error::FlightGet { source, .. } => source.status_code(), - Error::CreateChannel { source, .. } | Error::ConvertFlightData { source } => { + Error::CreateChannel { source, .. } | Error::ConvertFlightData { source, .. } => { source.status_code() } Error::IllegalGrpcClientState { .. } => StatusCode::Unexpected, diff --git a/src/cmd/src/error.rs b/src/cmd/src/error.rs index a4841a11df..2e90d3e301 100644 --- a/src/cmd/src/error.rs +++ b/src/cmd/src/error.rs @@ -24,43 +24,43 @@ use snafu::Location; pub enum Error { #[snafu(display("Failed to start datanode, source: {}", source))] StartDatanode { - #[snafu(backtrace)] + location: Location, source: datanode::error::Error, }, #[snafu(display("Failed to shutdown datanode, source: {}", source))] ShutdownDatanode { - #[snafu(backtrace)] + location: Location, source: datanode::error::Error, }, #[snafu(display("Failed to start frontend, source: {}", source))] StartFrontend { - #[snafu(backtrace)] + location: Location, source: frontend::error::Error, }, #[snafu(display("Failed to shutdown frontend, source: {}", source))] ShutdownFrontend { - #[snafu(backtrace)] + location: Location, source: frontend::error::Error, }, #[snafu(display("Failed to build meta server, source: {}", source))] BuildMetaServer { - #[snafu(backtrace)] + location: Location, source: meta_srv::error::Error, }, #[snafu(display("Failed to start meta server, source: {}", source))] StartMetaServer { - #[snafu(backtrace)] + location: Location, source: meta_srv::error::Error, }, #[snafu(display("Failed to shutdown meta server, source: {}", source))] ShutdownMetaServer { - #[snafu(backtrace)] + location: Location, source: meta_srv::error::Error, }, @@ -72,14 +72,14 @@ pub enum Error { #[snafu(display("Illegal auth config: {}", source))] IllegalAuthConfig { - #[snafu(backtrace)] + location: Location, source: servers::auth::Error, }, #[snafu(display("Unsupported selector type, {} source: {}", selector_type, source))] UnsupportedSelectorType { selector_type: String, - #[snafu(backtrace)] + location: Location, source: meta_srv::error::Error, }, @@ -101,44 +101,44 @@ pub enum Error { #[snafu(display("Failed to request database, sql: {sql}, source: {source}"))] RequestDatabase { sql: String, - #[snafu(backtrace)] + location: Location, source: client::Error, }, #[snafu(display("Failed to collect RecordBatches, source: {source}"))] CollectRecordBatches { - #[snafu(backtrace)] + location: Location, source: common_recordbatch::error::Error, }, #[snafu(display("Failed to pretty print Recordbatches, source: {source}"))] PrettyPrintRecordBatches { - #[snafu(backtrace)] + location: Location, source: common_recordbatch::error::Error, }, #[snafu(display("Failed to start Meta client, source: {}", source))] StartMetaClient { - #[snafu(backtrace)] + location: Location, source: meta_client::error::Error, }, #[snafu(display("Failed to parse SQL: {}, source: {}", sql, source))] ParseSql { sql: String, - #[snafu(backtrace)] + location: Location, source: query::error::Error, }, #[snafu(display("Failed to plan statement, source: {}", source))] PlanStatement { - #[snafu(backtrace)] + location: Location, source: query::error::Error, }, #[snafu(display("Failed to encode logical plan in substrait, source: {}", source))] SubstraitEncodeLogicalPlan { - #[snafu(backtrace)] + location: Location, source: substrait::error::Error, }, @@ -150,7 +150,7 @@ pub enum Error { #[snafu(display("Failed to start catalog manager, source: {}", source))] StartCatalogManager { - #[snafu(backtrace)] + location: Location, source: catalog::error::Error, }, } @@ -160,13 +160,13 @@ pub type Result = std::result::Result; impl ErrorExt for Error { fn status_code(&self) -> StatusCode { match self { - Error::StartDatanode { source } => source.status_code(), - Error::StartFrontend { source } => source.status_code(), - Error::ShutdownDatanode { source } => source.status_code(), - Error::ShutdownFrontend { source } => source.status_code(), - Error::StartMetaServer { source } => source.status_code(), - Error::ShutdownMetaServer { source } => source.status_code(), - Error::BuildMetaServer { source } => source.status_code(), + Error::StartDatanode { source, .. } => source.status_code(), + Error::StartFrontend { source, .. } => source.status_code(), + Error::ShutdownDatanode { source, .. } => source.status_code(), + Error::ShutdownFrontend { source, .. } => source.status_code(), + Error::StartMetaServer { source, .. } => source.status_code(), + Error::ShutdownMetaServer { source, .. } => source.status_code(), + Error::BuildMetaServer { source, .. } => source.status_code(), Error::UnsupportedSelectorType { source, .. } => source.status_code(), Error::MissingConfig { .. } | Error::LoadLayeredConfig { .. } @@ -175,15 +175,14 @@ impl ErrorExt for Error { | Error::IllegalAuthConfig { .. } => StatusCode::InvalidArguments, Error::ReplCreation { .. } | Error::Readline { .. } => StatusCode::Internal, Error::RequestDatabase { source, .. } => source.status_code(), - Error::CollectRecordBatches { source } | Error::PrettyPrintRecordBatches { source } => { + Error::CollectRecordBatches { source, .. } + | Error::PrettyPrintRecordBatches { source, .. } => source.status_code(), + Error::StartMetaClient { source, .. } => source.status_code(), + Error::ParseSql { source, .. } | Error::PlanStatement { source, .. } => { source.status_code() } - Error::StartMetaClient { source } => source.status_code(), - Error::ParseSql { source, .. } | Error::PlanStatement { source } => { - source.status_code() - } - Error::SubstraitEncodeLogicalPlan { source } => source.status_code(), - Error::StartCatalogManager { source } => source.status_code(), + Error::SubstraitEncodeLogicalPlan { source, .. } => source.status_code(), + Error::StartCatalogManager { source, .. } => source.status_code(), } } diff --git a/src/common/grpc-expr/src/error.rs b/src/common/grpc-expr/src/error.rs index 42417c6adc..bb207e4575 100644 --- a/src/common/grpc-expr/src/error.rs +++ b/src/common/grpc-expr/src/error.rs @@ -32,7 +32,7 @@ pub enum Error { #[snafu(display("Column datatype error, source: {}", source))] ColumnDataType { - #[snafu(backtrace)] + location: Location, source: api::error::Error, }, @@ -54,7 +54,7 @@ pub enum Error { InvalidColumnProto { err_msg: String, location: Location }, #[snafu(display("Failed to create vector, source: {}", source))] CreateVector { - #[snafu(backtrace)] + location: Location, source: datatypes::error::Error, }, @@ -68,13 +68,13 @@ pub enum Error { ))] InvalidColumnDef { column: String, - #[snafu(backtrace)] + location: Location, source: api::error::Error, }, #[snafu(display("Unrecognized table option: {}", source))] UnrecognizedTableOption { - #[snafu(backtrace)] + location: Location, source: table::error::Error, }, diff --git a/src/common/grpc/src/error.rs b/src/common/grpc/src/error.rs index df003037db..3fc23a1a43 100644 --- a/src/common/grpc/src/error.rs +++ b/src/common/grpc/src/error.rs @@ -53,7 +53,7 @@ pub enum Error { #[snafu(display("Failed to create RecordBatch, source: {}", source))] CreateRecordBatch { - #[snafu(backtrace)] + location: Location, source: common_recordbatch::error::Error, }, @@ -71,7 +71,7 @@ pub enum Error { #[snafu(display("Failed to convert Arrow Schema, source: {}", source))] ConvertArrowSchema { - #[snafu(backtrace)] + location: Location, source: datatypes::error::Error, }, } @@ -88,8 +88,8 @@ impl ErrorExt for Error { | Error::Conversion { .. } | Error::DecodeFlightData { .. } => StatusCode::Internal, - Error::CreateRecordBatch { source } => source.status_code(), - Error::ConvertArrowSchema { source } => source.status_code(), + Error::CreateRecordBatch { source, .. } => source.status_code(), + Error::ConvertArrowSchema { source, .. } => source.status_code(), } } diff --git a/src/common/procedure/src/error.rs b/src/common/procedure/src/error.rs index 42561f0755..03183fbe85 100644 --- a/src/common/procedure/src/error.rs +++ b/src/common/procedure/src/error.rs @@ -29,10 +29,7 @@ pub enum Error { "Failed to execute procedure due to external error, source: {}", source ))] - External { - #[snafu(backtrace)] - source: BoxedError, - }, + External { source: BoxedError }, #[snafu(display("Loader {} is already registered", name))] LoaderConflict { name: String, location: Location }, @@ -52,7 +49,7 @@ pub enum Error { #[snafu(display("Failed to put state, key: '{key}', source: {source}"))] PutState { key: String, - #[snafu(backtrace)] + location: Location, source: BoxedError, }, @@ -65,14 +62,14 @@ pub enum Error { #[snafu(display("Failed to delete keys: '{keys}', source: {source}"))] DeleteStates { keys: String, - #[snafu(backtrace)] + location: Location, source: BoxedError, }, #[snafu(display("Failed to list state, path: '{path}', source: {source}"))] ListState { path: String, - #[snafu(backtrace)] + location: Location, source: BoxedError, }, @@ -83,10 +80,7 @@ pub enum Error { }, #[snafu(display("Procedure exec failed, source: {}", source))] - RetryLater { - #[snafu(backtrace)] - source: BoxedError, - }, + RetryLater { source: BoxedError }, #[snafu(display("Procedure panics, procedure_id: {}", procedure_id))] ProcedurePanic { procedure_id: ProcedureId }, diff --git a/src/common/query/src/error.rs b/src/common/query/src/error.rs index d16950ee93..fabdd1aa83 100644 --- a/src/common/query/src/error.rs +++ b/src/common/query/src/error.rs @@ -40,7 +40,7 @@ pub enum Error { source ))] UdfTempRecordBatch { - #[snafu(backtrace)] + location: Location, source: RecordbatchError, }, @@ -65,19 +65,19 @@ pub enum Error { #[snafu(display("Fail to cast scalar value into vector: {}", source))] FromScalarValue { - #[snafu(backtrace)] + location: Location, source: DataTypeError, }, #[snafu(display("Fail to cast arrow array into vector: {}", source))] FromArrowArray { - #[snafu(backtrace)] + location: Location, source: DataTypeError, }, #[snafu(display("Fail to cast arrow array into vector: {:?}, {}", data_type, source))] IntoVector { - #[snafu(backtrace)] + location: Location, source: DataTypeError, data_type: ArrowDatatype, }, @@ -93,7 +93,7 @@ pub enum Error { #[snafu(display("Invalid input type: {}", err_msg))] InvalidInputType { - #[snafu(backtrace)] + location: Location, source: DataTypeError, err_msg: String, }, @@ -120,19 +120,19 @@ pub enum Error { source ))] ConvertDfRecordBatchStream { - #[snafu(backtrace)] + location: Location, source: common_recordbatch::error::Error, }, #[snafu(display("Failed to convert arrow schema, source: {}", source))] ConvertArrowSchema { - #[snafu(backtrace)] + location: Location, source: DataTypeError, }, #[snafu(display("Failed to execute physical plan, source: {}", source))] ExecutePhysicalPlan { - #[snafu(backtrace)] + location: Location, source: BoxedError, }, @@ -154,13 +154,13 @@ pub enum Error { #[snafu(display("Query engine fail to cast value: {}", source))] ToScalarValue { - #[snafu(backtrace)] + location: Location, source: DataTypeError, }, #[snafu(display("Failed to get scalar vector, {}", source))] GetScalarVector { - #[snafu(backtrace)] + location: Location, source: DataTypeError, }, @@ -188,9 +188,9 @@ impl ErrorExt for Error { Error::InvalidInputType { source, .. } | Error::IntoVector { source, .. } - | Error::FromScalarValue { source } - | Error::ConvertArrowSchema { source } - | Error::FromArrowArray { source } => source.status_code(), + | Error::FromScalarValue { source, .. } + | Error::ConvertArrowSchema { source, .. } + | Error::FromArrowArray { source, .. } => source.status_code(), Error::ExecuteRepeatedly { .. } | Error::GeneralDataFusion { .. } => { StatusCode::Unexpected @@ -201,7 +201,7 @@ impl ErrorExt for Error { | Error::InvalidFuncArgs { .. } => StatusCode::InvalidArguments, Error::ConvertDfRecordBatchStream { source, .. } => source.status_code(), - Error::ExecutePhysicalPlan { source } => source.status_code(), + Error::ExecutePhysicalPlan { source, .. } => source.status_code(), } } @@ -215,9 +215,3 @@ impl From for DataFusionError { DataFusionError::External(Box::new(e)) } } - -impl From for Error { - fn from(source: BoxedError) -> Self { - Error::ExecutePhysicalPlan { source } - } -} diff --git a/src/common/recordbatch/src/adapter.rs b/src/common/recordbatch/src/adapter.rs index 4e7c90fcb5..260b52fe41 100644 --- a/src/common/recordbatch/src/adapter.rs +++ b/src/common/recordbatch/src/adapter.rs @@ -225,6 +225,7 @@ mod test { use datatypes::prelude::ConcreteDataType; use datatypes::schema::ColumnSchema; use datatypes::vectors::Int32Vector; + use snafu::IntoError; use super::*; use crate::RecordBatches; @@ -296,9 +297,8 @@ mod test { let poll_err_stream = new_future_stream(Ok(vec![ Ok(batch1.clone()), - Err(error::Error::External { - source: BoxedError::new(MockError::new(StatusCode::Unknown)), - }), + Err(error::ExternalSnafu + .into_error(BoxedError::new(MockError::new(StatusCode::Unknown)))), ])); let adapter = AsyncRecordBatchStreamAdapter::new(schema.clone(), poll_err_stream); let result = RecordBatches::try_collect(Box::pin(adapter)).await; @@ -307,9 +307,9 @@ mod test { "Failed to poll stream, source: External error: External error, source: Unknown" ); - let failed_to_init_stream = new_future_stream(Err(error::Error::External { - source: BoxedError::new(MockError::new(StatusCode::Internal)), - })); + let failed_to_init_stream = + new_future_stream(Err(error::ExternalSnafu + .into_error(BoxedError::new(MockError::new(StatusCode::Internal))))); let adapter = AsyncRecordBatchStreamAdapter::new(schema.clone(), failed_to_init_stream); let result = RecordBatches::try_collect(Box::pin(adapter)).await; assert_eq!( diff --git a/src/common/recordbatch/src/error.rs b/src/common/recordbatch/src/error.rs index 10fee35e54..9ef3d07481 100644 --- a/src/common/recordbatch/src/error.rs +++ b/src/common/recordbatch/src/error.rs @@ -33,13 +33,13 @@ pub enum Error { #[snafu(display("Data types error, source: {}", source))] DataTypes { - #[snafu(backtrace)] + location: Location, source: datatypes::error::Error, }, #[snafu(display("External error, source: {}", source))] External { - #[snafu(backtrace)] + location: Location, source: BoxedError, }, @@ -99,7 +99,7 @@ pub enum Error { CastVector { from_type: ConcreteDataType, to_type: ConcreteDataType, - #[snafu(backtrace)] + location: Location, source: datatypes::error::Error, }, } @@ -117,7 +117,7 @@ impl ErrorExt for Error { | Error::ColumnNotExists { .. } | Error::ProjectArrowRecordBatch { .. } => StatusCode::Internal, - Error::External { source } => source.status_code(), + Error::External { source, .. } => source.status_code(), Error::SchemaConversion { source, .. } | Error::CastVector { source, .. } => { source.status_code() diff --git a/src/common/substrait/src/error.rs b/src/common/substrait/src/error.rs index aa56d3bac8..c673273440 100644 --- a/src/common/substrait/src/error.rs +++ b/src/common/substrait/src/error.rs @@ -74,7 +74,7 @@ pub enum Error { #[snafu(display("Internal error: {}", source))] Internal { - #[snafu(backtrace)] + location: Location, source: BoxedError, }, @@ -96,14 +96,14 @@ pub enum Error { #[snafu(display("Failed to convert DataFusion schema, source: {}", source))] ConvertDfSchema { - #[snafu(backtrace)] + location: Location, source: datatypes::error::Error, }, #[snafu(display("Unable to resolve table: {table_name}, error: {source}"))] ResolveTable { table_name: String, - #[snafu(backtrace)] + location: Location, source: catalog::error::Error, }, @@ -141,7 +141,7 @@ impl ErrorExt for Error { | Error::Internal { .. } | Error::EncodeDfPlan { .. } | Error::DecodeDfPlan { .. } => StatusCode::Internal, - Error::ConvertDfSchema { source } => source.status_code(), + Error::ConvertDfSchema { source, .. } => source.status_code(), Error::ResolveTable { source, .. } => source.status_code(), } } diff --git a/src/datanode/src/error.rs b/src/datanode/src/error.rs index 88b59b4ff5..35101269b3 100644 --- a/src/datanode/src/error.rs +++ b/src/datanode/src/error.rs @@ -27,14 +27,14 @@ use table::error::Error as TableError; pub enum Error { #[snafu(display("Failed to access catalog, source: {}", source))] AccessCatalog { - #[snafu(backtrace)] + location: Location, source: catalog::error::Error, }, #[snafu(display("Failed to deregister table: {}, source: {}", table_name, source))] DeregisterTable { table_name: String, - #[snafu(backtrace)] + location: Location, source: catalog::error::Error, }, @@ -48,7 +48,7 @@ pub enum Error { #[snafu(display("Failed to open table: {}, source: {}", table_name, source))] OpenTable { table_name: String, - #[snafu(backtrace)] + location: Location, source: TableError, }, @@ -68,7 +68,7 @@ pub enum Error { CloseTable { table_name: String, region_numbers: Vec, - #[snafu(backtrace)] + location: Location, source: TableError, }, @@ -93,31 +93,31 @@ pub enum Error { #[snafu(display("Failed to execute sql, source: {}", source))] ExecuteSql { - #[snafu(backtrace)] + location: Location, source: query::error::Error, }, #[snafu(display("Failed to plan statement, source: {}", source))] PlanStatement { - #[snafu(backtrace)] + location: Location, source: query::error::Error, }, #[snafu(display("Failed to execute statement, source: {}", source))] ExecuteStatement { - #[snafu(backtrace)] + location: Location, source: query::error::Error, }, #[snafu(display("Failed to execute logical plan, source: {}", source))] ExecuteLogicalPlan { - #[snafu(backtrace)] + location: Location, source: query::error::Error, }, #[snafu(display("Failed to decode logical plan, source: {}", source))] DecodeLogicalPlan { - #[snafu(backtrace)] + location: Location, source: substrait::error::Error, }, @@ -126,7 +126,7 @@ pub enum Error { #[snafu(display("Failed to create catalog list, source: {}", source))] NewCatalog { - #[snafu(backtrace)] + location: Location, source: catalog::error::Error, }, @@ -139,21 +139,21 @@ pub enum Error { #[snafu(display("Failed to create table: {}, source: {}", table_name, source))] CreateTable { table_name: String, - #[snafu(backtrace)] + location: Location, source: TableError, }, #[snafu(display("Failed to drop table {}, source: {}", table_name, source))] DropTable { table_name: String, - #[snafu(backtrace)] + location: Location, source: BoxedError, }, #[snafu(display("Table engine not found: {}, source: {}", engine_name, source))] TableEngineNotFound { engine_name: String, - #[snafu(backtrace)] + location: Location, source: table::error::Error, }, @@ -164,7 +164,7 @@ pub enum Error { ))] EngineProcedureNotFound { engine_name: String, - #[snafu(backtrace)] + location: Location, source: table::error::Error, }, @@ -192,7 +192,7 @@ pub enum Error { #[snafu(display("Failed to parse sql value, source: {}", source))] ParseSqlValue { - #[snafu(backtrace)] + location: Location, source: sql::error::Error, }, @@ -202,7 +202,7 @@ pub enum Error { #[snafu(display("Failed to insert value to table: {}, source: {}", table_name, source))] Insert { table_name: String, - #[snafu(backtrace)] + location: Location, source: TableError, }, @@ -213,20 +213,20 @@ pub enum Error { ))] Delete { table_name: String, - #[snafu(backtrace)] + location: Location, source: TableError, }, #[snafu(display("Failed to flush table: {}, source: {}", table_name, source))] FlushTable { table_name: String, - #[snafu(backtrace)] + location: Location, source: TableError, }, #[snafu(display("Failed to start server, source: {}", source))] StartServer { - #[snafu(backtrace)] + location: Location, source: servers::error::Error, }, @@ -250,8 +250,8 @@ pub enum Error { #[snafu(display("Failed to open log store, source: {}", source))] OpenLogStore { - #[snafu(backtrace)] - source: log_store::error::Error, + location: Location, + source: Box, }, #[snafu(display("Failed to init backend, source: {}", source))] @@ -262,7 +262,7 @@ pub enum Error { #[snafu(display("Runtime resource error, source: {}", source))] RuntimeResource { - #[snafu(backtrace)] + location: Location, source: common_runtime::error::Error, }, @@ -289,7 +289,7 @@ pub enum Error { #[snafu(display("Failed to register a new schema, source: {}", source))] RegisterSchema { - #[snafu(backtrace)] + location: Location, source: catalog::error::Error, }, @@ -298,25 +298,25 @@ pub enum Error { #[snafu(display("Failed to convert alter expr to request: {}", source))] AlterExprToRequest { - #[snafu(backtrace)] + location: Location, source: common_grpc_expr::error::Error, }, #[snafu(display("Failed to convert create expr to request: {}", source))] CreateExprToRequest { - #[snafu(backtrace)] + location: Location, source: common_grpc_expr::error::Error, }, #[snafu(display("Failed to convert delete expr to request: {}", source))] DeleteExprToRequest { - #[snafu(backtrace)] + location: Location, source: common_grpc_expr::error::Error, }, #[snafu(display("Failed to parse SQL, source: {}", source))] ParseSql { - #[snafu(backtrace)] + location: Location, source: sql::error::Error, }, @@ -327,38 +327,38 @@ pub enum Error { ))] ParseTimestamp { raw: String, - #[snafu(backtrace)] + location: Location, source: common_time::error::Error, }, #[snafu(display("Failed to prepare immutable table: {}", source))] PrepareImmutableTable { - #[snafu(backtrace)] + location: Location, source: query::error::Error, }, #[snafu(display("Failed to access catalog, source: {}", source))] Catalog { - #[snafu(backtrace)] + location: Location, source: catalog::error::Error, }, #[snafu(display("Failed to find table {} from catalog, source: {}", table_name, source))] FindTable { table_name: String, - #[snafu(backtrace)] + location: Location, source: catalog::error::Error, }, #[snafu(display("Failed to initialize meta client, source: {}", source))] MetaClientInit { - #[snafu(backtrace)] + location: Location, source: meta_client::error::Error, }, #[snafu(display("Failed to insert data, source: {}", source))] InsertData { - #[snafu(backtrace)] + location: Location, source: common_grpc_expr::error::Error, }, @@ -369,7 +369,7 @@ pub enum Error { #[snafu(display("Failed to bump table id, source: {}", source))] BumpTableId { - #[snafu(backtrace)] + location: Location, source: table::error::Error, }, @@ -392,7 +392,7 @@ pub enum Error { ))] ColumnDefaultValue { column: String, - #[snafu(backtrace)] + location: Location, source: datatypes::error::Error, }, @@ -404,45 +404,45 @@ pub enum Error { #[snafu(display("Unrecognized table option: {}", source))] UnrecognizedTableOption { - #[snafu(backtrace)] + location: Location, source: table::error::Error, }, #[snafu(display("Failed to recover procedure, source: {}", source))] RecoverProcedure { - #[snafu(backtrace)] + location: Location, source: common_procedure::error::Error, }, #[snafu(display("Failed to submit procedure {}, source: {}", procedure_id, source))] SubmitProcedure { procedure_id: ProcedureId, - #[snafu(backtrace)] + location: Location, source: common_procedure::error::Error, }, #[snafu(display("Failed to wait procedure {} done, source: {}", procedure_id, source))] WaitProcedure { procedure_id: ProcedureId, - #[snafu(backtrace)] + location: Location, source: common_procedure::error::Error, }, #[snafu(display("Failed to close table engine, source: {}", source))] CloseTableEngine { - #[snafu(backtrace)] + location: Location, source: BoxedError, }, #[snafu(display("Failed to shutdown server, source: {}", source))] ShutdownServer { - #[snafu(backtrace)] + location: Location, source: servers::error::Error, }, #[snafu(display("Failed to shutdown instance, source: {}", source))] ShutdownInstance { - #[snafu(backtrace)] + location: Location, source: BoxedError, }, @@ -487,15 +487,15 @@ impl ErrorExt for Error { fn status_code(&self) -> StatusCode { use Error::*; match self { - ExecuteSql { source } - | PlanStatement { source } - | ExecuteStatement { source } - | ExecuteLogicalPlan { source } => source.status_code(), + ExecuteSql { source, .. } + | PlanStatement { source, .. } + | ExecuteStatement { source, .. } + | ExecuteLogicalPlan { source, .. } => source.status_code(), HandleHeartbeatResponse { source, .. } => source.status_code(), - DecodeLogicalPlan { source } => source.status_code(), - NewCatalog { source } | RegisterSchema { source } => source.status_code(), + DecodeLogicalPlan { source, .. } => source.status_code(), + NewCatalog { source, .. } | RegisterSchema { source, .. } => source.status_code(), FindTable { source, .. } => source.status_code(), CreateTable { source, .. } => source.status_code(), DropTable { source, .. } => source.status_code(), @@ -512,9 +512,9 @@ impl ErrorExt for Error { ParseSqlValue { source, .. } | ParseSql { source, .. } => source.status_code(), AlterExprToRequest { source, .. } - | CreateExprToRequest { source } - | DeleteExprToRequest { source } - | InsertData { source } => source.status_code(), + | CreateExprToRequest { source, .. } + | DeleteExprToRequest { source, .. } + | InsertData { source, .. } => source.status_code(), ColumnValuesNumberMismatch { .. } | InvalidSql { .. } @@ -559,13 +559,13 @@ impl ErrorExt for Error { | CloseTableEngine { .. } | JoinTask { .. } => StatusCode::Internal, - StartServer { source } - | ShutdownServer { source } + StartServer { source, .. } + | ShutdownServer { source, .. } | WaitForGrpcServing { source, .. } => source.status_code(), InitBackend { .. } => StatusCode::StorageUnavailable, - OpenLogStore { source } => source.status_code(), + OpenLogStore { source, .. } => source.status_code(), RuntimeResource { .. } => StatusCode::RuntimeResourcesExhausted, MetaClientInit { source, .. } => source.status_code(), TableIdProviderNotFound { .. } => StatusCode::Unsupported, diff --git a/src/datanode/src/instance.rs b/src/datanode/src/instance.rs index 85ff745b18..68ea2c828c 100644 --- a/src/datanode/src/instance.rs +++ b/src/datanode/src/instance.rs @@ -421,6 +421,7 @@ pub(crate) async fn create_log_store( let logstore = RaftEngineLogStore::try_new(log_config) .await + .map_err(Box::new) .context(OpenLogStoreSnafu)?; Ok(logstore) } diff --git a/src/file-table-engine/src/error.rs b/src/file-table-engine/src/error.rs index ec45857fe2..ac00ebeb2c 100644 --- a/src/file-table-engine/src/error.rs +++ b/src/file-table-engine/src/error.rs @@ -115,13 +115,13 @@ pub enum Error { source ))] ConvertRaw { - #[snafu(backtrace)] + location: Location, source: table::metadata::ConvertError, }, #[snafu(display("Invalid schema, source: {}", source))] InvalidRawSchema { - #[snafu(backtrace)] + location: Location, source: datatypes::error::Error, }, @@ -130,7 +130,7 @@ pub enum Error { #[snafu(display("Failed to build backend, source: {}", source))] BuildBackend { - #[snafu(backtrace)] + location: Location, source: common_datasource::error::Error, }, @@ -154,13 +154,13 @@ pub enum Error { #[snafu(display("Failed to build stream adapter: {}", source))] BuildStreamAdapter { - #[snafu(backtrace)] + location: Location, source: common_recordbatch::error::Error, }, #[snafu(display("Failed to parse file format: {}", source))] ParseFileFormat { - #[snafu(backtrace)] + location: Location, source: common_datasource::error::Error, }, diff --git a/src/log-store/src/error.rs b/src/log-store/src/error.rs index b234d8ce0e..7cac957aed 100644 --- a/src/log-store/src/error.rs +++ b/src/log-store/src/error.rs @@ -23,13 +23,13 @@ use snafu::Location; pub enum Error { #[snafu(display("Failed to start log store gc task, source: {}", source))] StartGcTask { - #[snafu(backtrace)] + location: Location, source: RuntimeError, }, #[snafu(display("Failed to stop log store gc task, source: {}", source))] StopGcTask { - #[snafu(backtrace)] + location: Location, source: RuntimeError, }, diff --git a/src/meta-client/src/error.rs b/src/meta-client/src/error.rs index 1834255fa9..1af04cd165 100644 --- a/src/meta-client/src/error.rs +++ b/src/meta-client/src/error.rs @@ -35,7 +35,7 @@ pub enum Error { #[snafu(display("Failed to create gRPC channel, source: {}", source))] CreateChannel { - #[snafu(backtrace)] + location: Location, source: common_grpc::error::Error, }, @@ -50,19 +50,19 @@ pub enum Error { #[snafu(display("Invalid response header, source: {}", source))] InvalidResponseHeader { - #[snafu(backtrace)] + location: Location, source: common_meta::error::Error, }, #[snafu(display("Failed to convert Metasrv request, source: {}", source))] ConvertMetaRequest { - #[snafu(backtrace)] + location: Location, source: common_meta::error::Error, }, #[snafu(display("Failed to convert Metasrv response, source: {}", source))] ConvertMetaResponse { - #[snafu(backtrace)] + location: Location, source: common_meta::error::Error, }, } @@ -86,9 +86,9 @@ impl ErrorExt for Error { | Error::CreateHeartbeatStream { .. } | Error::CreateChannel { .. } => StatusCode::Internal, - Error::InvalidResponseHeader { source } - | Error::ConvertMetaRequest { source } - | Error::ConvertMetaResponse { source } => source.status_code(), + Error::InvalidResponseHeader { source, .. } + | Error::ConvertMetaRequest { source, .. } + | Error::ConvertMetaResponse { source, .. } => source.status_code(), } } } diff --git a/src/meta-srv/src/error.rs b/src/meta-srv/src/error.rs index 6c33b30296..3dd295f4ec 100644 --- a/src/meta-srv/src/error.rs +++ b/src/meta-srv/src/error.rs @@ -26,7 +26,7 @@ pub enum Error { #[snafu(display("Failed to shutdown {} server, source: {}", server, source))] ShutdownServer { - #[snafu(backtrace)] + location: Location, source: servers::error::Error, server: String, }, @@ -60,7 +60,7 @@ pub enum Error { }, #[snafu(display("Failed to start http server, source: {}", source))] StartHttp { - #[snafu(backtrace)] + location: Location, source: servers::error::Error, }, #[snafu(display("Failed to parse address {}, source: {}", addr, source))] @@ -130,7 +130,7 @@ pub enum Error { #[snafu(display("Cannot parse catalog value, source: {}", source))] InvalidCatalogValue { - #[snafu(backtrace)] + location: Location, source: common_catalog::error::Error, }, @@ -190,7 +190,7 @@ pub enum Error { #[snafu(display("Failed to create gRPC channel, source: {}", source))] CreateChannel { - #[snafu(backtrace)] + location: Location, source: common_grpc::error::Error, }, @@ -273,7 +273,7 @@ pub enum Error { #[snafu(display("Failed to recover procedure, source: {source}"))] RecoverProcedure { - #[snafu(backtrace)] + location: Location, source: common_procedure::Error, }, @@ -321,7 +321,7 @@ pub enum Error { ))] RegisterProcedureLoader { type_name: String, - #[snafu(backtrace)] + location: Location, source: common_procedure::error::Error, }, @@ -350,7 +350,7 @@ pub enum Error { #[snafu(display("Failed to convert table route, source: {}", source))] TableRouteConversion { - #[snafu(backtrace)] + location: Location, source: common_meta::error::Error, }, @@ -434,15 +434,15 @@ impl ErrorExt for Error { | Error::Unexpected { .. } => StatusCode::Unexpected, Error::TableNotFound { .. } => StatusCode::TableNotFound, Error::InvalidCatalogValue { source, .. } => source.status_code(), - Error::RecoverProcedure { source } => source.status_code(), - Error::ShutdownServer { source, .. } | Error::StartHttp { source } => { + Error::RecoverProcedure { source, .. } => source.status_code(), + Error::ShutdownServer { source, .. } | Error::StartHttp { source, .. } => { source.status_code() } Error::RegionFailoverCandidatesNotFound { .. } => StatusCode::RuntimeResourcesExhausted, Error::RegisterProcedureLoader { source, .. } => source.status_code(), - Error::TableRouteConversion { source } => source.status_code(), + Error::TableRouteConversion { source, .. } => source.status_code(), Error::Other { source, .. } => source.status_code(), } } diff --git a/src/mito/src/error.rs b/src/mito/src/error.rs index 38dabc7e07..3e6844da55 100644 --- a/src/mito/src/error.rs +++ b/src/mito/src/error.rs @@ -107,7 +107,7 @@ pub enum Error { source, ))] UpdateTableManifest { - #[snafu(backtrace)] + location: Location, source: storage::error::Error, table_name: String, }, @@ -118,7 +118,7 @@ pub enum Error { source, ))] ScanTableManifest { - #[snafu(backtrace)] + location: Location, source: storage::error::Error, table_name: String, }, @@ -149,7 +149,7 @@ pub enum Error { source ))] ConvertRaw { - #[snafu(backtrace)] + location: Location, source: table::metadata::ConvertError, }, diff --git a/src/partition/src/error.rs b/src/partition/src/error.rs index 89c1e3c1e6..42ad5719c6 100644 --- a/src/partition/src/error.rs +++ b/src/partition/src/error.rs @@ -28,7 +28,7 @@ pub enum Error { #[snafu(display("Failed to request Meta, source: {}", source))] RequestMeta { - #[snafu(backtrace)] + location: Location, source: meta_client::error::Error, }, @@ -75,7 +75,7 @@ pub enum Error { ))] CreateDefaultToRead { column: String, - #[snafu(backtrace)] + location: Location, source: datatypes::error::Error, }, @@ -128,7 +128,7 @@ pub enum Error { ))] ConvertScalarValue { value: ScalarValue, - #[snafu(backtrace)] + location: Location, source: datatypes::error::Error, }, diff --git a/src/query/src/datafusion/error.rs b/src/query/src/datafusion/error.rs index 569f7d4790..62f1abe077 100644 --- a/src/query/src/datafusion/error.rs +++ b/src/query/src/datafusion/error.rs @@ -34,7 +34,7 @@ pub enum InnerError { #[snafu(display("Fail to convert arrow schema, source: {}", source))] ConvertSchema { - #[snafu(backtrace)] + location: Location, source: datatypes::error::Error, }, @@ -43,13 +43,13 @@ pub enum InnerError { source ))] ConvertDfRecordBatchStream { - #[snafu(backtrace)] + location: Location, source: common_recordbatch::error::Error, }, #[snafu(display("Failed to execute physical plan, source: {}", source))] ExecutePhysicalPlan { - #[snafu(backtrace)] + location: Location, source: common_query::error::Error, }, } @@ -62,8 +62,8 @@ impl ErrorExt for InnerError { // TODO(yingwen): Further categorize datafusion error. Datafusion { .. } => StatusCode::EngineExecuteQuery, PhysicalPlanDowncast { .. } | ConvertSchema { .. } => StatusCode::Unexpected, - ConvertDfRecordBatchStream { source } => source.status_code(), - ExecutePhysicalPlan { source } => source.status_code(), + ConvertDfRecordBatchStream { source, .. } => source.status_code(), + ExecutePhysicalPlan { source, .. } => source.status_code(), } } diff --git a/src/script/src/error.rs b/src/script/src/error.rs index fcd445a85f..ffa88035ce 100644 --- a/src/script/src/error.rs +++ b/src/script/src/error.rs @@ -23,7 +23,7 @@ use snafu::Location; pub enum Error { #[snafu(display("Failed to find scripts table, source: {}", source))] FindScriptsTable { - #[snafu(backtrace)] + location: Location, source: catalog::error::Error, }, @@ -32,7 +32,7 @@ pub enum Error { #[snafu(display("Failed to register scripts table, source: {}", source))] RegisterScriptsTable { - #[snafu(backtrace)] + location: Location, source: catalog::error::Error, }, @@ -46,21 +46,21 @@ pub enum Error { ))] InsertScript { name: String, - #[snafu(backtrace)] + location: Location, source: table::error::Error, }, #[snafu(display("Failed to compile python script, name: {}, source: {}", name, source))] CompilePython { name: String, - #[snafu(backtrace)] + location: Location, source: crate::python::error::Error, }, #[snafu(display("Failed to execute python script {}, source: {}", name, source))] ExecutePython { name: String, - #[snafu(backtrace)] + location: Location, source: crate::python::error::Error, }, @@ -70,13 +70,13 @@ pub enum Error { #[snafu(display("Failed to find script by name: {}", name))] FindScript { name: String, - #[snafu(backtrace)] + location: Location, source: query::error::Error, }, #[snafu(display("Failed to collect record batch, source: {}", source))] CollectRecords { - #[snafu(backtrace)] + location: Location, source: common_recordbatch::error::Error, }, @@ -92,11 +92,13 @@ impl ErrorExt for Error { match self { FindColumnInScriptsTable { .. } | CastType { .. } => StatusCode::Unexpected, ScriptsTableNotFound { .. } => StatusCode::TableNotFound, - RegisterScriptsTable { source } | FindScriptsTable { source } => source.status_code(), + RegisterScriptsTable { source, .. } | FindScriptsTable { source, .. } => { + source.status_code() + } InsertScript { source, .. } => source.status_code(), CompilePython { source, .. } | ExecutePython { source, .. } => source.status_code(), FindScript { source, .. } => source.status_code(), - CollectRecords { source } => source.status_code(), + CollectRecords { source, .. } => source.status_code(), ScriptNotFound { .. } => StatusCode::InvalidArguments, } } diff --git a/src/script/src/python/engine.rs b/src/script/src/python/engine.rs index 152e529b8d..10c3de5b9f 100644 --- a/src/script/src/python/engine.rs +++ b/src/script/src/python/engine.rs @@ -40,7 +40,7 @@ use snafu::{ensure, ResultExt}; use sql::statements::statement::Statement; use crate::engine::{CompileContext, EvalContext, Script, ScriptEngine}; -use crate::python::error::{self, PyRuntimeSnafu, Result, TokioJoinSnafu}; +use crate::python::error::{self, DatabaseQuerySnafu, PyRuntimeSnafu, Result, TokioJoinSnafu}; use crate::python::ffi_types::copr::{exec_parsed, parse, AnnotationInfo, CoprocessorRef}; use crate::python::utils::spawn_blocking_script; const PY_ENGINE: &str = "python"; @@ -290,8 +290,13 @@ impl Script for PyScript { .query_engine .planner() .plan(stmt, QueryContext::arc()) - .await?; - let res = self.query_engine.execute(plan, QueryContext::arc()).await?; + .await + .context(DatabaseQuerySnafu)?; + let res = self + .query_engine + .execute(plan, QueryContext::arc()) + .await + .context(DatabaseQuerySnafu)?; let copr = self.copr.clone(); match res { Output::Stream(stream) => Ok(Output::Stream(Box::pin(CoprStream::try_new( @@ -346,6 +351,7 @@ impl ScriptEngine for PyEngine { }) } } + #[cfg(test)] pub(crate) use tests::sample_script_engine; diff --git a/src/script/src/python/error.rs b/src/script/src/python/error.rs index 65ebb29788..124ccc634b 100644 --- a/src/script/src/python/error.rs +++ b/src/script/src/python/error.rs @@ -35,13 +35,13 @@ pub(crate) fn ret_other_error_with(reason: String) -> OtherSnafu { pub enum Error { #[snafu(display("Datatype error: {}", source))] TypeCast { - #[snafu(backtrace)] + location: SnafuLocation, source: DataTypeError, }, #[snafu(display("Failed to query, source: {}", source))] DatabaseQuery { - #[snafu(backtrace)] + location: SnafuLocation, source: QueryError, }, @@ -105,25 +105,19 @@ pub enum Error { #[snafu(display("Failed to retrieve record batches, source: {}", source))] RecordBatch { - #[snafu(backtrace)] + location: SnafuLocation, source: common_recordbatch::error::Error, }, #[snafu(display("Failed to create record batch, source: {}", source))] NewRecordBatch { - #[snafu(backtrace)] + location: SnafuLocation, source: common_recordbatch::error::Error, }, #[snafu(display("Failed to create tokio task, source: {}", source))] TokioJoin { source: tokio::task::JoinError }, } -impl From for Error { - fn from(source: QueryError) -> Self { - Self::DatabaseQuery { source } - } -} - impl ErrorExt for Error { fn status_code(&self) -> StatusCode { match self { @@ -133,11 +127,11 @@ impl ErrorExt for Error { | Error::TokioJoin { .. } | Error::Other { .. } => StatusCode::Internal, - Error::RecordBatch { source } | Error::NewRecordBatch { source } => { + Error::RecordBatch { source, .. } | Error::NewRecordBatch { source, .. } => { source.status_code() } - Error::DatabaseQuery { source } => source.status_code(), - Error::TypeCast { source } => source.status_code(), + Error::DatabaseQuery { source, .. } => source.status_code(), + Error::TypeCast { source, .. } => source.status_code(), Error::PyParse { .. } | Error::PyCompile { .. } @@ -150,12 +144,6 @@ impl ErrorExt for Error { self } } -// impl from for those error so one can use question mark and implicitly cast into `CoprError` -impl From for Error { - fn from(e: DataTypeError) -> Self { - Self::TypeCast { source: e } - } -} /// pretty print [`Error`] in given script, /// basically print a arrow which point to where error occurs(if possible to get a location) diff --git a/src/servers/src/auth.rs b/src/servers/src/auth.rs index 756cb25de6..222a21af30 100644 --- a/src/servers/src/auth.rs +++ b/src/servers/src/auth.rs @@ -111,7 +111,7 @@ pub enum Error { #[snafu(display("Auth failed, source: {}", source))] AuthBackend { - #[snafu(backtrace)] + location: Location, source: BoxedError, }, diff --git a/src/servers/src/error.rs b/src/servers/src/error.rs index 1993125f3f..1981af3fe0 100644 --- a/src/servers/src/error.rs +++ b/src/servers/src/error.rs @@ -49,7 +49,7 @@ pub enum Error { #[snafu(display("Failed to collect recordbatch, source: {}", source))] CollectRecordbatch { - #[snafu(backtrace)] + location: Location, source: common_recordbatch::error::Error, }, @@ -71,19 +71,19 @@ pub enum Error { #[snafu(display("Failed to execute query: {}, source: {}", query, source))] ExecuteQuery { query: String, - #[snafu(backtrace)] + location: Location, source: BoxedError, }, #[snafu(display("{source}"))] ExecuteGrpcQuery { - #[snafu(backtrace)] + location: Location, source: BoxedError, }, #[snafu(display("Failed to check database validity, source: {}", source))] CheckDatabaseValidity { - #[snafu(backtrace)] + location: Location, source: BoxedError, }, @@ -93,14 +93,14 @@ pub enum Error { #[snafu(display("Failed to insert script with name: {}, source: {}", name, source))] InsertScript { name: String, - #[snafu(backtrace)] + location: Location, source: BoxedError, }, #[snafu(display("Failed to execute script by name: {}, source: {}", name, source))] ExecuteScript { name: String, - #[snafu(backtrace)] + location: Location, source: BoxedError, }, @@ -112,19 +112,19 @@ pub enum Error { #[snafu(display("Failed to parse InfluxDB line protocol, source: {}", source))] InfluxdbLineProtocol { - #[snafu(backtrace)] + location: Location, source: influxdb_line_protocol::Error, }, #[snafu(display("Failed to write InfluxDB line protocol, source: {}", source))] InfluxdbLinesWrite { - #[snafu(backtrace)] + location: Location, source: common_grpc::error::Error, }, #[snafu(display("Failed to write prometheus series, source: {}", source))] PromSeriesWrite { - #[snafu(backtrace)] + location: Location, source: common_grpc::error::Error, }, @@ -178,7 +178,7 @@ pub enum Error { #[snafu(display("Failed to get user info, source: {}", source))] Auth { - #[snafu(backtrace)] + location: Location, source: auth::Error, }, @@ -221,7 +221,7 @@ pub enum Error { #[cfg(feature = "mem-prof")] #[snafu(display("Failed to dump profile data, source: {}", source))] DumpProfileData { - #[snafu(backtrace)] + location: Location, source: common_mem_prof::error::Error, }, @@ -246,7 +246,7 @@ pub enum Error { #[snafu(display("Failed to parse PromQL: {query:?}, source: {source}"))] ParsePromQL { query: PromQuery, - #[snafu(backtrace)] + location: Location, source: query::error::Error, }, @@ -420,12 +420,6 @@ impl From for Error { } } -impl From for Error { - fn from(e: auth::Error) -> Self { - Error::Auth { source: e } - } -} - impl IntoResponse for Error { fn into_response(self) -> Response { let (status, error_message) = match self { diff --git a/src/servers/src/grpc/handler.rs b/src/servers/src/grpc/handler.rs index c01535d489..777dc91588 100644 --- a/src/servers/src/grpc/handler.rs +++ b/src/servers/src/grpc/handler.rs @@ -29,8 +29,8 @@ use snafu::{OptionExt, ResultExt}; use tonic::Status; use crate::auth::{Identity, Password, UserProviderRef}; -use crate::error::Error::{Auth, UnsupportedAuthScheme}; -use crate::error::{InvalidQuerySnafu, JoinTaskSnafu, NotFoundAuthHeaderSnafu}; +use crate::error::Error::UnsupportedAuthScheme; +use crate::error::{AuthSnafu, InvalidQuerySnafu, JoinTaskSnafu, NotFoundAuthHeaderSnafu}; use crate::grpc::TonicResult; use crate::metrics::{ METRIC_AUTH_FAILURE, METRIC_CODE_LABEL, METRIC_SERVER_GRPC_DB_REQUEST_TIMER, @@ -123,7 +123,7 @@ impl GreptimeRequestHandler { &query_ctx.current_schema(), ) .await - .map_err(|e| Auth { source: e }), + .context(AuthSnafu), AuthScheme::Token(_) => Err(UnsupportedAuthScheme { name: "Token AuthScheme".to_string(), }), diff --git a/src/servers/src/http/authorize.rs b/src/servers/src/http/authorize.rs index 84e3e6dcfe..5879a1f287 100644 --- a/src/servers/src/http/authorize.rs +++ b/src/servers/src/http/authorize.rs @@ -23,16 +23,15 @@ use http_body::Body; use metrics::increment_counter; use secrecy::SecretString; use session::context::UserInfo; -use snafu::{ensure, OptionExt, ResultExt}; +use snafu::{ensure, IntoError, OptionExt, ResultExt}; use tower_http::auth::AsyncAuthorizeRequest; use super::PUBLIC_APIS; use crate::auth::Error::IllegalParam; use crate::auth::{Identity, IllegalParamSnafu, UserProviderRef}; -use crate::error::Error::Auth; use crate::error::{ - self, InvalidAuthorizationHeaderSnafu, InvisibleASCIISnafu, NotFoundInfluxAuthSnafu, Result, - UnsupportedAuthSchemeSnafu, + self, AuthSnafu, InvalidAuthorizationHeaderSnafu, InvisibleASCIISnafu, NotFoundInfluxAuthSnafu, + Result, UnsupportedAuthSchemeSnafu, }; use crate::http::HTTP_API_PREFIX; @@ -183,12 +182,9 @@ fn get_influxdb_credentials( (Some(username), Some(password)) => { Ok(Some((username.to_string(), password.to_string().into()))) } - _ => Err(Auth { - source: IllegalParam { - msg: "influxdb auth: username and password must be provided together" - .to_string(), - }, - }), + _ => Err(AuthSnafu.into_error(IllegalParam { + msg: "influxdb auth: username and password must be provided together".to_string(), + })), } } } diff --git a/src/servers/src/postgres/auth_handler.rs b/src/servers/src/postgres/auth_handler.rs index 688d47ac53..3398d43f35 100644 --- a/src/servers/src/postgres/auth_handler.rs +++ b/src/servers/src/postgres/auth_handler.rs @@ -26,10 +26,11 @@ use pgwire::messages::startup::Authentication; use pgwire::messages::{PgWireBackendMessage, PgWireFrontendMessage}; use session::context::UserInfo; use session::Session; +use snafu::IntoError; use super::PostgresServerHandler; use crate::auth::{Identity, Password, UserProviderRef}; -use crate::error::Result; +use crate::error::{AuthSnafu, Result}; use crate::query_handler::sql::ServerSqlQueryHandlerRef; pub(crate) struct PgLoginVerifier { @@ -106,7 +107,7 @@ impl PgLoginVerifier { format!("{}", e.status_code()) )] ); - Err(e.into()) + Err(AuthSnafu.into_error(e)) } else { Ok(true) } diff --git a/src/sql/src/error.rs b/src/sql/src/error.rs index 2ad5ad7b03..d78f1c7875 100644 --- a/src/sql/src/error.rs +++ b/src/sql/src/error.rs @@ -98,13 +98,13 @@ pub enum Error { #[snafu(display("Invalid default constraint, column: {}, source: {}", column, source))] InvalidDefault { column: String, - #[snafu(backtrace)] + location: Location, source: datatypes::error::Error, }, #[snafu(display("Failed to serialize column default constraint, source: {}", source))] SerializeColumnDefaultConstraint { - #[snafu(backtrace)] + location: Location, source: datatypes::error::Error, }, @@ -113,7 +113,7 @@ pub enum Error { source ))] ConvertToGrpcDataType { - #[snafu(backtrace)] + location: Location, source: api::error::Error, }, diff --git a/src/storage/src/error.rs b/src/storage/src/error.rs index 02ad5a9795..6f8c6977d5 100644 --- a/src/storage/src/error.rs +++ b/src/storage/src/error.rs @@ -38,7 +38,7 @@ pub enum Error { #[snafu(display("Invalid region descriptor, region: {}, source: {}", region, source))] InvalidRegionDesc { region: String, - #[snafu(backtrace)] + location: Location, source: MetadataError, }, @@ -53,7 +53,7 @@ pub enum Error { #[snafu(display("Failed to write to buffer, source: {}", source))] WriteBuffer { - #[snafu(backtrace)] + location: Location, source: common_datasource::error::Error, }, @@ -147,7 +147,7 @@ pub enum Error { ))] WriteWal { region_id: RegionId, - #[snafu(backtrace)] + location: Location, source: BoxedError, }, @@ -218,7 +218,7 @@ pub enum Error { #[snafu(display("Failed to read WAL, region_id: {}, source: {}", region_id, source))] ReadWal { region_id: RegionId, - #[snafu(backtrace)] + location: Location, source: BoxedError, }, @@ -229,7 +229,7 @@ pub enum Error { ))] MarkWalObsolete { region_id: u64, - #[snafu(backtrace)] + location: Location, source: BoxedError, }, @@ -265,14 +265,14 @@ pub enum Error { #[snafu(display("Failed to convert store schema, file: {}, source: {}", file, source))] ConvertStoreSchema { file: String, - #[snafu(backtrace)] + location: Location, source: MetadataError, }, #[snafu(display("Invalid raw region metadata, region: {}, source: {}", region, source))] InvalidRawRegion { region: String, - #[snafu(backtrace)] + location: Location, source: MetadataError, }, @@ -281,13 +281,13 @@ pub enum Error { #[snafu(display("Invalid projection, source: {}", source))] InvalidProjection { - #[snafu(backtrace)] + location: Location, source: MetadataError, }, #[snafu(display("Failed to push data to batch builder, source: {}", source))] PushBatch { - #[snafu(backtrace)] + location: Location, source: datatypes::error::Error, }, @@ -297,19 +297,19 @@ pub enum Error { #[snafu(display("Failed to filter column {}, source: {}", name, source))] FilterColumn { name: String, - #[snafu(backtrace)] + location: Location, source: datatypes::error::Error, }, #[snafu(display("Invalid alter request, source: {}", source))] InvalidAlterRequest { - #[snafu(backtrace)] + location: Location, source: MetadataError, }, #[snafu(display("Failed to alter metadata, source: {}", source))] AlterMetadata { - #[snafu(backtrace)] + location: Location, source: MetadataError, }, @@ -320,7 +320,7 @@ pub enum Error { ))] CreateDefault { name: String, - #[snafu(backtrace)] + location: Location, source: datatypes::error::Error, }, @@ -353,7 +353,7 @@ pub enum Error { ))] CreateDefaultToRead { column: String, - #[snafu(backtrace)] + location: Location, source: datatypes::error::Error, }, @@ -367,7 +367,7 @@ pub enum Error { ))] ConvertChunk { name: String, - #[snafu(backtrace)] + location: Location, source: datatypes::error::Error, }, @@ -376,7 +376,7 @@ pub enum Error { #[snafu(display("Failed to create record batch for write batch, source:{}", source))] CreateRecordBatch { - #[snafu(backtrace)] + location: Location, source: common_recordbatch::error::Error, }, @@ -451,13 +451,13 @@ pub enum Error { #[snafu(display("Failed to start manifest gc task: {}", source))] StartManifestGcTask { - #[snafu(backtrace)] + location: Location, source: RuntimeError, }, #[snafu(display("Failed to stop manifest gc task: {}", source))] StopManifestGcTask { - #[snafu(backtrace)] + location: Location, source: RuntimeError, }, @@ -475,7 +475,7 @@ pub enum Error { #[snafu(display("Failed to calculate SST expire time, source: {}", source))] TtlCalculation { - #[snafu(backtrace)] + location: Location, source: common_time::error::Error, }, @@ -501,13 +501,13 @@ pub enum Error { #[snafu(display("Failed to start picking task for flush: {}", source))] StartPickTask { - #[snafu(backtrace)] + location: Location, source: RuntimeError, }, #[snafu(display("Failed to stop picking task for flush: {}", source))] StopPickTask { - #[snafu(backtrace)] + location: Location, source: RuntimeError, }, diff --git a/src/storage/src/metadata.rs b/src/storage/src/metadata.rs index 63ec0b2d26..4b9a3489ad 100644 --- a/src/storage/src/metadata.rs +++ b/src/storage/src/metadata.rs @@ -51,7 +51,7 @@ pub enum Error { #[snafu(display("Failed to build schema, source: {}", source))] InvalidSchema { - #[snafu(backtrace)] + location: Location, source: datatypes::error::Error, }, @@ -86,7 +86,7 @@ pub enum Error { // End of variants for validating `AlterRequest`. #[snafu(display("Failed to convert to column schema, source: {}", source))] ToColumnSchema { - #[snafu(backtrace)] + location: Location, source: datatypes::error::Error, }, @@ -113,7 +113,7 @@ pub enum Error { #[snafu(display("Failed to convert from arrow schema, source: {}", source))] ConvertArrowSchema { - #[snafu(backtrace)] + location: Location, source: datatypes::error::Error, }, @@ -127,13 +127,13 @@ pub enum Error { ))] ConvertChunk { name: String, - #[snafu(backtrace)] + location: Location, source: datatypes::error::Error, }, #[snafu(display("Failed to convert schema, source: {}", source))] ConvertSchema { - #[snafu(backtrace)] + location: Location, source: datatypes::error::Error, }, diff --git a/src/storage/src/wal.rs b/src/storage/src/wal.rs index 80dc4183fd..4826fdadde 100644 --- a/src/storage/src/wal.rs +++ b/src/storage/src/wal.rs @@ -19,7 +19,7 @@ use common_error::prelude::BoxedError; use common_telemetry::timer; use futures::{stream, Stream, TryStreamExt}; use prost::Message; -use snafu::{ensure, ResultExt}; +use snafu::{ensure, Location, ResultExt}; use store_api::logstore::entry::{Entry, Id}; use store_api::logstore::LogStore; use store_api::storage::{RegionId, SequenceNumber}; @@ -157,6 +157,7 @@ impl Wal { .map_err(|e| Error::ReadWal { region_id: self.region_id(), source: BoxedError::new(e), + location: Location::default(), }) .and_then(|entries| async { let iter = entries.into_iter().map(|x| self.decode_entry(x)); diff --git a/src/table-procedure/src/error.rs b/src/table-procedure/src/error.rs index c4f02137e0..25cca7c910 100644 --- a/src/table-procedure/src/error.rs +++ b/src/table-procedure/src/error.rs @@ -34,13 +34,13 @@ pub enum Error { #[snafu(display("Invalid raw schema, source: {}", source))] InvalidRawSchema { - #[snafu(backtrace)] + location: Location, source: datatypes::error::Error, }, #[snafu(display("Failed to access catalog, source: {}", source))] AccessCatalog { - #[snafu(backtrace)] + location: Location, source: catalog::error::Error, }, @@ -66,7 +66,7 @@ impl ErrorExt for Error { match self { SerializeProcedure { .. } | DeserializeProcedure { .. } => StatusCode::Internal, InvalidRawSchema { source, .. } => source.status_code(), - AccessCatalog { source } => source.status_code(), + AccessCatalog { source, .. } => source.status_code(), CatalogNotFound { .. } | SchemaNotFound { .. } | TableExists { .. } => { StatusCode::InvalidArguments } diff --git a/src/table/src/error.rs b/src/table/src/error.rs index e377099c00..5351af03c4 100644 --- a/src/table/src/error.rs +++ b/src/table/src/error.rs @@ -15,7 +15,6 @@ use std::any::Any; use common_error::prelude::*; -use common_recordbatch::error::Error as RecordBatchError; use datafusion::error::DataFusionError; use datatypes::arrow::error::ArrowError; use snafu::Location; @@ -54,7 +53,7 @@ pub enum Error { #[snafu(display("Failed to create record batch for Tables, source: {}", source))] TablesRecordBatch { - #[snafu(backtrace)] + location: Location, source: BoxedError, }, @@ -67,7 +66,7 @@ pub enum Error { #[snafu(display("Failed to build schema, msg: {}, source: {}", msg, source))] SchemaBuild { - #[snafu(backtrace)] + location: Location, source: datatypes::error::Error, msg: String, }, @@ -173,11 +172,3 @@ impl From for DataFusionError { DataFusionError::External(Box::new(e)) } } - -impl From for RecordBatchError { - fn from(e: Error) -> RecordBatchError { - RecordBatchError::External { - source: BoxedError::new(e), - } - } -}