From ba8ae003ccc686c4434b9c90377656bef1fcb97a Mon Sep 17 00:00:00 2001 From: Manjusaka Date: Fri, 13 Oct 2023 02:05:01 +0800 Subject: [PATCH 1/3] feat(services/persy): change blocking_x in async_x call to tokio::task::blocking_spawn Signed-off-by: Manjusaka --- core/src/services/persy/backend.rs | 25 ++++++++++++++++++++++--- 1 file changed, 22 insertions(+), 3 deletions(-) diff --git a/core/src/services/persy/backend.rs b/core/src/services/persy/backend.rs index 0c92a92ffbb4..c03cd12f80bc 100644 --- a/core/src/services/persy/backend.rs +++ b/core/src/services/persy/backend.rs @@ -22,6 +22,7 @@ use std::str; use async_trait::async_trait; use persy; +use tokio::task; use crate::raw::adapters::kv; use crate::Builder; @@ -175,7 +176,12 @@ impl kv::Adapter for Adapter { } async fn get(&self, path: &str) -> Result>> { - self.blocking_get(path) + let cloned_self = self.clone(); + let cloned_path = path.to_string(); + task::spawn_blocking(move || cloned_self.blocking_get(cloned_path.as_str())) + .await + .map_err(Error::from) + .and_then(|inner_result| inner_result) } fn blocking_get(&self, path: &str) -> Result>> { @@ -192,7 +198,14 @@ impl kv::Adapter for Adapter { } async fn set(&self, path: &str, value: &[u8]) -> Result<()> { - self.blocking_set(path, value) + let cloned_path = path.to_string(); + let cloned_value = value.to_vec(); + let cloned_self = self.clone(); + + task::spawn_blocking(move || cloned_self.blocking_set(cloned_path.as_str(), &cloned_value)) + .await + .map_err(Error::from) + .and_then(|inner_result| inner_result) } fn blocking_set(&self, path: &str, value: &[u8]) -> Result<()> { @@ -208,7 +221,13 @@ impl kv::Adapter for Adapter { } async fn delete(&self, path: &str) -> Result<()> { - self.blocking_delete(path) + let cloned_path = path.to_string(); + let cloned_self = self.clone(); + + task::spawn_blocking(move || cloned_self.blocking_delete(cloned_path.as_str())) + .await + .map_err(Error::from) + .and_then(|inner_result| inner_result) } fn blocking_delete(&self, path: &str) -> Result<()> { From 13a45ef9436396066b18f6fb8e99d06a10109e76 Mon Sep 17 00:00:00 2001 From: Manjusaka Date: Fri, 13 Oct 2023 02:29:36 +0800 Subject: [PATCH 2/3] Update code Signed-off-by: Manjusaka --- core/src/services/persy/backend.rs | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/core/src/services/persy/backend.rs b/core/src/services/persy/backend.rs index c03cd12f80bc..f7f8935f1ac0 100644 --- a/core/src/services/persy/backend.rs +++ b/core/src/services/persy/backend.rs @@ -30,6 +30,7 @@ use crate::Error; use crate::ErrorKind; use crate::Scheme; use crate::*; +use crate::raw::*; /// persy service support. #[doc = include_str!("docs.md")] @@ -180,7 +181,7 @@ impl kv::Adapter for Adapter { let cloned_path = path.to_string(); task::spawn_blocking(move || cloned_self.blocking_get(cloned_path.as_str())) .await - .map_err(Error::from) + .map_err(new_task_join_error) .and_then(|inner_result| inner_result) } @@ -204,7 +205,7 @@ impl kv::Adapter for Adapter { task::spawn_blocking(move || cloned_self.blocking_set(cloned_path.as_str(), &cloned_value)) .await - .map_err(Error::from) + .map_err(new_task_join_error) .and_then(|inner_result| inner_result) } @@ -226,7 +227,7 @@ impl kv::Adapter for Adapter { task::spawn_blocking(move || cloned_self.blocking_delete(cloned_path.as_str())) .await - .map_err(Error::from) + .map_err(new_task_join_error) .and_then(|inner_result| inner_result) } From 9e239110d5f932d890187bbc28f1c7bdba21e127 Mon Sep 17 00:00:00 2001 From: Manjusaka Date: Fri, 13 Oct 2023 04:03:44 +0800 Subject: [PATCH 3/3] Update code Signed-off-by: Manjusaka --- core/src/services/persy/backend.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/core/src/services/persy/backend.rs b/core/src/services/persy/backend.rs index f7f8935f1ac0..29f63e3a86b5 100644 --- a/core/src/services/persy/backend.rs +++ b/core/src/services/persy/backend.rs @@ -25,12 +25,12 @@ use persy; use tokio::task; use crate::raw::adapters::kv; +use crate::raw::*; use crate::Builder; use crate::Error; use crate::ErrorKind; use crate::Scheme; use crate::*; -use crate::raw::*; /// persy service support. #[doc = include_str!("docs.md")]