From 82022742d7be9b29bbe029a9dd06e5c8dfa47541 Mon Sep 17 00:00:00 2001 From: zhongjiawei Date: Wed, 12 Mar 2025 17:03:08 +0800 Subject: [PATCH] isula-rust-extensions:Fix concurrency issue when calling sandbox API (cherry picked from commit 9e4690b10e3f09df6ab2a79bfe58a4e03cbb365d) --- ...rency-issue-when-calling-sandbox-API.patch | 64 +++++++++++++++++++ isula-rust-extensions.spec | 6 +- 2 files changed, 69 insertions(+), 1 deletion(-) create mode 100644 0002-Fix-concurrency-issue-when-calling-sandbox-API.patch diff --git a/0002-Fix-concurrency-issue-when-calling-sandbox-API.patch b/0002-Fix-concurrency-issue-when-calling-sandbox-API.patch new file mode 100644 index 0000000..47e1ce3 --- /dev/null +++ b/0002-Fix-concurrency-issue-when-calling-sandbox-API.patch @@ -0,0 +1,64 @@ +From 491b72d4e1e46fe00405163966841fcd28b653e5 Mon Sep 17 00:00:00 2001 +From: zhongjiawei +Date: Wed, 12 Mar 2025 17:09:02 +0800 +Subject: [PATCH] Fix concurrency issue when calling sandbox API + +--- + sandbox/src/lib.rs | 6 ++++++ + 1 file changed, 6 insertions(+) + +diff --git a/sandbox/src/lib.rs b/sandbox/src/lib.rs +index 1d2626c..09964a5 100644 +--- a/sandbox/src/lib.rs ++++ b/sandbox/src/lib.rs +@@ -22,6 +22,7 @@ use tokio::runtime::Runtime; + use async_recursion::async_recursion; + use std::time::{SystemTime, UNIX_EPOCH}; + use std::ffi::CStr; ++use std::sync::Mutex; + + use isula_common::isula_data_types::{ to_string, to_c_char_ptr }; + +@@ -45,6 +46,7 @@ lazy_static! { + std::process::exit(1); + } + }; ++ static ref RUNTIME_MUTEX: Mutex = Mutex::new(0); + static ref RETRY_WAIT_MUTEX: tokio::sync::Mutex = tokio::sync::Mutex::new(0); + } + +@@ -60,6 +62,7 @@ pub type ControllerHandle = *mut ControllerContext; + impl ControllerContext { + pub fn get_client(&mut self) -> Option<&mut client::Client>{ + if self.client.is_none() { ++ let _rt_lock = RUNTIME_MUTEX.lock().unwrap(); + match RT.block_on(controller::client::Client::new(self.address.clone())) { + Ok(client) => { + self.client = Some(client); +@@ -78,6 +81,7 @@ macro_rules! sandbox_api_execute { + ($context:ident, $request:ident, $rsp:ident, $method:ident) => { + match $context.get_client() { + Some(client) => { ++ let _rt_lock = RUNTIME_MUTEX.lock().unwrap(); + match RT.block_on((*client).$method($request)) { + Ok(response) => { + (*$rsp).from_controller(&response); +@@ -98,6 +102,7 @@ macro_rules! sandbox_api_execute { + ($context:ident, $request:ident, $method:ident) => { + match $context.get_client() { + Some(client) => { ++ let _rt_lock = RUNTIME_MUTEX.lock().unwrap(); + match RT.block_on((*client).$method($request)) { + Ok(_) => 0, + Err(e) => { +@@ -380,6 +385,7 @@ pub unsafe extern "C" fn sandbox_api_wait( + match controller_context.get_client() { + Some(client) => { + let sandbox_id = r_req.sandbox_id.clone(); ++ let _rt_lock = RUNTIME_MUTEX.lock().unwrap(); + RT.spawn(do_wait(client.clone(), sandbox_id, r_req, callback)); + 0 + } +-- +2.33.0 + diff --git a/isula-rust-extensions.spec b/isula-rust-extensions.spec index 89d5da6..5317572 100644 --- a/isula-rust-extensions.spec +++ b/isula-rust-extensions.spec @@ -7,7 +7,7 @@ Name: isula-rust-extensions Version: 0.0.2 -Release: 1 +Release: 2 URL: https://gitee.com/openeuler/isula-rust-extensions Source: %{name}-%{version}.tar.gz Summary: isula-rust-extensions is a rust-extension library for iSulad. @@ -17,6 +17,7 @@ License: Mulan PSL v2 ExclusiveArch: x86_64 aarch64 Patch0001: 0001-change-wait-callback-argument-from-u8-to-c_char.patch +Patch0002: 0002-Fix-concurrency-issue-when-calling-sandbox-API.patch BuildRequires: rust BuildRequires: cargo @@ -85,6 +86,9 @@ install -m 0755 sandbox/target/release/libisula_sandbox.so ${RPM_BUILD_ROOT}/%{_ %{_includedir}/isula_sandbox_api.h %changelog +* Wed Mar 12 2025 zhongjiawei - 0.0.2-2 +- Fix concurrency issue when calling sandbox API + * Fri Nov 22 2024 xuxuepeng - 0.0.2-1 - Update to 0.0.2, add support for sandbox API -- Gitee