diff --git a/core/src/services/persy/backend.rs b/core/src/services/persy/backend.rs index 0c92a92ffbb4..29f63e3a86b5 100644 --- a/core/src/services/persy/backend.rs +++ b/core/src/services/persy/backend.rs @@ -22,8 +22,10 @@ use std::str; use async_trait::async_trait; use persy; +use tokio::task; use crate::raw::adapters::kv; +use crate::raw::*; use crate::Builder; use crate::Error; use crate::ErrorKind; @@ -175,7 +177,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(new_task_join_error) + .and_then(|inner_result| inner_result) } fn blocking_get(&self, path: &str) -> Result>> { @@ -192,7 +199,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(new_task_join_error) + .and_then(|inner_result| inner_result) } fn blocking_set(&self, path: &str, value: &[u8]) -> Result<()> { @@ -208,7 +222,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(new_task_join_error) + .and_then(|inner_result| inner_result) } fn blocking_delete(&self, path: &str) -> Result<()> {