From 5133002225624ee0309ff5cbe4da17ed08852eb6 Mon Sep 17 00:00:00 2001 From: suyanhanx Date: Thu, 4 Jan 2024 17:57:24 +0800 Subject: [PATCH 1/2] refactor(services/etcd): Impl parse_error instead of From Signed-off-by: suyanhanx --- core/src/services/etcd/backend.rs | 32 +++++++++++++++++++------------ 1 file changed, 20 insertions(+), 12 deletions(-) diff --git a/core/src/services/etcd/backend.rs b/core/src/services/etcd/backend.rs index 79f64caf514f..7ca456475d71 100644 --- a/core/src/services/etcd/backend.rs +++ b/core/src/services/etcd/backend.rs @@ -273,11 +273,15 @@ impl bb8::ManageConnection for Manager { type Error = Error; async fn connect(&self) -> std::result::Result { - Ok(Client::connect(self.endpoints.clone(), Some(self.options.clone())).await?) + Ok( + Client::connect(self.endpoints.clone(), Some(self.options.clone())) + .await + .map_err(format_etcd_error)?, + ) } async fn is_valid(&self, conn: &mut Self::Connection) -> std::result::Result<(), Self::Error> { - let _ = conn.status().await?; + let _ = conn.status().await.map_err(format_etcd_error)?; Ok(()) } @@ -347,7 +351,7 @@ impl kv::Adapter for Adapter { async fn get(&self, key: &str) -> Result>> { let mut client = self.conn().await?; - let resp = client.get(key, None).await?; + let resp = client.get(key, None).await.map_err(format_etcd_error)?; if let Some(kv) = resp.kvs().first() { Ok(Some(kv.value().to_vec())) } else { @@ -357,20 +361,26 @@ impl kv::Adapter for Adapter { async fn set(&self, key: &str, value: &[u8]) -> Result<()> { let mut client = self.conn().await?; - let _ = client.put(key, value, None).await?; + let _ = client + .put(key, value, None) + .await + .map_err(format_etcd_error)?; Ok(()) } async fn delete(&self, key: &str) -> Result<()> { let mut client = self.conn().await?; - let _ = client.delete(key, None).await?; + let _ = client.delete(key, None).await.map_err(format_etcd_error)?; Ok(()) } async fn scan(&self, path: &str) -> Result> { let mut client = self.conn().await?; let get_options = Some(GetOptions::new().with_prefix().with_keys_only()); - let resp = client.get(path, get_options).await?; + let resp = client + .get(path, get_options) + .await + .map_err(format_etcd_error)?; let mut res = Vec::default(); for kv in resp.kvs() { let v = kv.key_str().map(String::from).map_err(|err| { @@ -387,10 +397,8 @@ impl kv::Adapter for Adapter { } } -impl From for Error { - fn from(e: EtcdError) -> Self { - Error::new(ErrorKind::Unexpected, e.to_string().as_str()) - .set_source(e) - .set_temporary() - } +pub fn format_etcd_error(e: EtcdError) -> Error { + Error::new(ErrorKind::Unexpected, e.to_string().as_str()) + .set_source(e) + .set_temporary() } From c0df1a388182a568b5c38d1a263c8fd1bec7baba Mon Sep 17 00:00:00 2001 From: suyanhanx Date: Thu, 4 Jan 2024 18:03:40 +0800 Subject: [PATCH 2/2] extract conn Signed-off-by: suyanhanx --- core/src/services/etcd/backend.rs | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/core/src/services/etcd/backend.rs b/core/src/services/etcd/backend.rs index 7ca456475d71..1a4bae6372c0 100644 --- a/core/src/services/etcd/backend.rs +++ b/core/src/services/etcd/backend.rs @@ -273,11 +273,11 @@ impl bb8::ManageConnection for Manager { type Error = Error; async fn connect(&self) -> std::result::Result { - Ok( - Client::connect(self.endpoints.clone(), Some(self.options.clone())) - .await - .map_err(format_etcd_error)?, - ) + let conn = Client::connect(self.endpoints.clone(), Some(self.options.clone())) + .await + .map_err(format_etcd_error)?; + + Ok(conn) } async fn is_valid(&self, conn: &mut Self::Connection) -> std::result::Result<(), Self::Error> {