risingwave_meta/model/
error.rsuse anyhow::anyhow;
use risingwave_pb::PbFieldNotFound;
use risingwave_rpc_client::error::ToTonicStatus;
use thiserror::Error;
use crate::storage::MetaStoreError;
pub type MetadataModelResult<T> = std::result::Result<T, MetadataModelError>;
#[derive(Error, Debug)]
pub enum MetadataModelError {
#[error("Meta store error: {0}")]
MetaStoreError(
#[from]
#[backtrace]
MetaStoreError,
),
#[error("Pb decode error: {0}")]
PbDecode(#[from] prost::DecodeError),
#[error(transparent)]
InternalError(
#[from]
#[backtrace]
anyhow::Error,
),
}
impl From<PbFieldNotFound> for MetadataModelError {
fn from(p: PbFieldNotFound) -> Self {
MetadataModelError::InternalError(anyhow::anyhow!(
"Failed to decode prost: field not found `{}`",
p.0
))
}
}
impl From<MetadataModelError> for tonic::Status {
fn from(e: MetadataModelError) -> Self {
e.to_status(tonic::Code::Internal, "meta")
}
}
impl MetadataModelError {
pub fn internal(msg: impl ToString) -> Self {
MetadataModelError::InternalError(anyhow!(msg.to_string()))
}
}