From effc0f467aa32711783141c086706c74dd886960 Mon Sep 17 00:00:00 2001 From: Millione Date: Mon, 4 Dec 2023 16:55:06 +0800 Subject: [PATCH] fix: normalize make_transport error to TransportError --- Cargo.lock | 6 +++--- volo-thrift/Cargo.toml | 2 +- .../src/transport/pool/make_transport.rs | 8 ++++---- volo-thrift/src/transport/pool/mod.rs | 18 ++++++++++++------ 4 files changed, 20 insertions(+), 14 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 5ed61d3d..5ae003da 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1650,9 +1650,9 @@ dependencies = [ [[package]] name = "pilota-build" -version = "0.9.10" +version = "0.9.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4a6a15c72d2e75d195fee6d5f81641e2a33c5577fb30e7a3232a22d440cf6d7e" +checksum = "68aba7abce083335d96a9088d2fde39910f284cd829becdb943dab5848112644" dependencies = [ "anyhow", "dashmap", @@ -2961,7 +2961,7 @@ version = "0.8.0" [[package]] name = "volo-thrift" -version = "0.8.2" +version = "0.8.3" dependencies = [ "anyhow", "bytes", diff --git a/volo-thrift/Cargo.toml b/volo-thrift/Cargo.toml index e940dc94..3950b685 100644 --- a/volo-thrift/Cargo.toml +++ b/volo-thrift/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "volo-thrift" -version = "0.8.2" +version = "0.8.3" edition.workspace = true homepage.workspace = true repository.workspace = true diff --git a/volo-thrift/src/transport/pool/make_transport.rs b/volo-thrift/src/transport/pool/make_transport.rs index 15c27adf..8acb897c 100644 --- a/volo-thrift/src/transport/pool/make_transport.rs +++ b/volo-thrift/src/transport/pool/make_transport.rs @@ -2,7 +2,7 @@ use std::{fmt::Debug, hash::Hash}; -use motore::{service::UnaryService, BoxError}; +use motore::service::UnaryService; use super::{Pool, Poolable, Pooled}; @@ -48,14 +48,14 @@ where Key: Clone + Eq + Hash + Debug + Send + 'static, MT: UnaryService + Send + Clone + 'static + Sync, MT::Response: Poolable + Send, - MT::Error: Into, + MT::Error: Into, { type Response = Pooled; - type Error = BoxError; + type Error = crate::Error; async fn call(&self, key: Key) -> Result { let mt = self.inner.clone(); - self.pool.get(key, mt).await + self.pool.get(key, mt).await.map_err(Into::into) } } diff --git a/volo-thrift/src/transport/pool/mod.rs b/volo-thrift/src/transport/pool/mod.rs index 37723a1a..fd232852 100644 --- a/volo-thrift/src/transport/pool/mod.rs +++ b/volo-thrift/src/transport/pool/mod.rs @@ -21,7 +21,7 @@ use futures::{ }; use linked_hash_map::LinkedHashMap; pub use make_transport::PooledMakeTransport; -use motore::{service::UnaryService, BoxError}; +use motore::service::UnaryService; use pin_project::pin_project; use started::Started as _; use tokio::{ @@ -201,10 +201,14 @@ where Pool { inner } } - pub async fn get(&self, key: Key, mt: MT) -> Result, BoxError> + pub async fn get( + &self, + key: Key, + mt: MT, + ) -> Result, pilota::thrift::TransportError> where MT: UnaryService + Send + 'static + Sync, - MT::Error: Into, + MT::Error: Into, { let (rx, _waiter_token) = { let mut inner = self.inner.lock().volo_unwrap(); @@ -270,9 +274,11 @@ where } // means connection pool is dropped Either::Left((Err(e), _)) => { - let e = e.into(); tracing::error!("[VOLO] wait a idle connection error: {:?}", e); - Err(e) + Err(pilota::thrift::TransportError::new( + pilota::thrift::TransportErrorKind::Unknown, + format!("wait a idle connection error: {:?}", e), + )) } // maybe there is no more connection put back into pool and waiter will block forever, // so just return error @@ -537,7 +543,7 @@ where if let Some(t) = value { // means doesn't send success // then put back to idle list - let idle = self.idle.entry(key).or_insert_with(Vec::new); + let idle = self.idle.entry(key).or_default(); if idle.len() < self.max_idle_per_key { idle.push(Idle { inner: t,