From 4b89fac06f62c588a38bb30f8714f58916a55c94 Mon Sep 17 00:00:00 2001 From: yangxw Date: Fri, 13 Oct 2023 23:24:38 +0900 Subject: [PATCH] feat(services/redb): change blocking_x in async_x call to tokio::task::blocking_spawn --- core/src/services/redb/backend.rs | 27 ++++++++++++++++++++++++--- 1 file changed, 24 insertions(+), 3 deletions(-) diff --git a/core/src/services/redb/backend.rs b/core/src/services/redb/backend.rs index 2d721800ef22..ab3c0f601788 100644 --- a/core/src/services/redb/backend.rs +++ b/core/src/services/redb/backend.rs @@ -22,8 +22,10 @@ use std::sync::Arc; use async_trait::async_trait; use redb::ReadableTable; +use tokio::task; use crate::raw::adapters::kv; +use crate::raw::*; use crate::Builder; use crate::Error; use crate::ErrorKind; @@ -132,7 +134,13 @@ 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>> { @@ -154,7 +162,14 @@ impl kv::Adapter for Adapter { } async fn set(&self, path: &str, value: &[u8]) -> Result<()> { - self.blocking_set(path, value) + let cloned_self = self.clone(); + let cloned_path = path.to_string(); + let cloned_value = value.to_vec(); + + 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<()> { @@ -176,7 +191,13 @@ impl kv::Adapter for Adapter { } async fn delete(&self, path: &str) -> Result<()> { - self.blocking_delete(path) + let cloned_self = self.clone(); + let cloned_path = path.to_string(); + + 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<()> {