diff --git a/src/common/errors.rs b/src/common/errors.rs index 41e081a2..c48a2665 100644 --- a/src/common/errors.rs +++ b/src/common/errors.rs @@ -8,6 +8,20 @@ use crate::proto::kvrpcpb; use crate::region::RegionVerId; use crate::BoundRange; +/// Protobuf-generated region-level error returned by TiKV. +/// +/// This type is generated from TiKV's protobuf definitions and may change in a +/// future release even if the wire format is compatible. +#[doc(inline)] +pub use crate::proto::errorpb::Error as ProtoRegionError; + +/// Protobuf-generated per-key error returned by TiKV. +/// +/// This type is generated from TiKV's protobuf definitions and may change in a +/// future release even if the wire format is compatible. +#[doc(inline)] +pub use crate::proto::kvrpcpb::KeyError as ProtoKeyError; + /// An error originating from the TiKV client or dependencies. #[derive(Debug, Error)] #[allow(clippy::large_enum_variant)] @@ -63,13 +77,13 @@ pub enum Error { Canceled(#[from] futures::channel::oneshot::Canceled), /// Errors caused by changes of region information #[error("Region error: {0:?}")] - RegionError(Box), + RegionError(Box), /// Whether the transaction is committed or not is undetermined #[error("Whether the transaction is committed or not is undetermined")] UndeterminedError(Box), - /// Wraps `crate::proto::kvrpcpb::KeyError` + /// Wraps a per-key error returned by TiKV. #[error("{0:?}")] - KeyError(Box), + KeyError(Box), /// Multiple errors generated from the ExtractError plan. #[error("Multiple errors: {0:?}")] ExtractedErrors(Vec), @@ -116,14 +130,14 @@ pub enum Error { TxnNotFound(kvrpcpb::TxnNotFound), } -impl From for Error { - fn from(e: crate::proto::errorpb::Error) -> Error { +impl From for Error { + fn from(e: ProtoRegionError) -> Error { Error::RegionError(Box::new(e)) } } -impl From for Error { - fn from(e: crate::proto::kvrpcpb::KeyError) -> Error { +impl From for Error { + fn from(e: ProtoKeyError) -> Error { Error::KeyError(Box::new(e)) } } diff --git a/src/common/mod.rs b/src/common/mod.rs index cd05a56e..06236c64 100644 --- a/src/common/mod.rs +++ b/src/common/mod.rs @@ -4,4 +4,6 @@ mod errors; pub mod security; pub use self::errors::Error; +pub use self::errors::ProtoKeyError; +pub use self::errors::ProtoRegionError; pub use self::errors::Result; diff --git a/src/lib.rs b/src/lib.rs index 60dc2956..85cd9d27 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -122,6 +122,10 @@ pub use common::security::SecurityManager; #[doc(inline)] pub use common::Error; #[doc(inline)] +pub use common::ProtoKeyError; +#[doc(inline)] +pub use common::ProtoRegionError; +#[doc(inline)] pub use common::Result; #[doc(inline)] pub use config::Config; @@ -157,6 +161,8 @@ pub use crate::transaction::CheckLevel; #[doc(inline)] pub use crate::transaction::Client as TransactionClient; #[doc(inline)] +pub use crate::transaction::ProtoLockInfo; +#[doc(inline)] pub use crate::transaction::Snapshot; #[doc(inline)] pub use crate::transaction::Transaction; diff --git a/src/transaction/client.rs b/src/transaction/client.rs index f042b391..a40044b7 100644 --- a/src/transaction/client.rs +++ b/src/transaction/client.rs @@ -9,7 +9,6 @@ use crate::backoff::{DEFAULT_REGION_BACKOFF, DEFAULT_STORE_BACKOFF}; use crate::config::Config; use crate::pd::PdClient; use crate::pd::PdRpcClient; -use crate::proto::kvrpcpb; use crate::proto::pdpb::Timestamp; use crate::request::plan::CleanupLocksResult; use crate::request::EncodeKeyspace; @@ -29,6 +28,13 @@ use crate::Backoff; use crate::BoundRange; use crate::Result; +/// Protobuf-generated lock information returned by TiKV. +/// +/// This type is generated from TiKV's protobuf definitions and may change in a +/// future release even if the wire format is compatible. +#[doc(inline)] +pub use crate::proto::kvrpcpb::LockInfo as ProtoLockInfo; + // FIXME: cargo-culted value const SCAN_LOCK_BATCH_SIZE: u32 = 1024; @@ -302,7 +308,7 @@ impl Client { safepoint: &Timestamp, range: impl Into, batch_size: u32, - ) -> Result> { + ) -> Result> { use crate::request::TruncateKeyspace; let range = range.into().encode_keyspace(self.keyspace, KeyMode::Txn); @@ -321,10 +327,10 @@ impl Client { /// timestamp when checking transaction status. pub async fn resolve_locks( &self, - locks: Vec, + locks: Vec, timestamp: Timestamp, mut backoff: Backoff, - ) -> Result> { + ) -> Result> { use crate::request::TruncateKeyspace; let mut live_locks = locks; diff --git a/src/transaction/mod.rs b/src/transaction/mod.rs index 5bc8f0e4..af82caf3 100644 --- a/src/transaction/mod.rs +++ b/src/transaction/mod.rs @@ -9,6 +9,7 @@ //! **Warning:** It is not advisable to use both raw and transactional functionality in the same keyspace. pub use client::Client; +pub use client::ProtoLockInfo; pub(crate) use lock::resolve_locks; pub(crate) use lock::HasLocks; pub use snapshot::Snapshot;