From bca7c7d75395ef02f3b05fedd273f6e65eae5195 Mon Sep 17 00:00:00 2001 From: jiangliuwei Date: Fri, 10 Jan 2025 19:54:04 +0800 Subject: [PATCH] add global locks to solve dead locks --- src/cores/events.rs | 23 +++++++++++++++++++++++ src/cores/mod.rs | 5 +++++ 2 files changed, 28 insertions(+) diff --git a/src/cores/events.rs b/src/cores/events.rs index cefb11f..a837802 100644 --- a/src/cores/events.rs +++ b/src/cores/events.rs @@ -271,22 +271,45 @@ impl P2PEventServer { } pub async fn reply_create(service: Arc, app_state: Arc, req: WriteEventRequest) -> WriteEventResponse { + let _lock = crate::cores::GLOBAL_SQ_LOCK.lock().await; + let res = service.create_resource(req.params, req.data, app_state.clone()).await; + match res.clone() { + Ok(val) => {log::info!("--------create resource {} succeed--------",val)} + Err(e) => {log::info!("!!!!!!!!!create res failed {}!!!!!!!!!",e)} + } WriteEventResponse { res } } pub async fn reply_update(service: Arc, app_state: Arc, req: WriteEventRequest) -> WriteEventResponse { + let _lock = crate::cores::GLOBAL_SQ_LOCK.lock().await; let res = service.update_resource(req.params, req.data, app_state.clone()).await; + match res.clone() { + Ok(val) => {log::info!("--------update resource {} succeed--------",val)} + Err(e) => {log::info!("!!!!!!!!!update resource failed {}!!!!!!!!!",e)} + } WriteEventResponse { res } } pub async fn reply_patch(service: Arc, app_state: Arc, req: WriteEventRequest) -> WriteEventResponse { + let _lock = crate::cores::GLOBAL_SQ_LOCK.lock().await; + let res = service.patch_resource(req.params, req.data, app_state).await; + match res.clone() { + Ok(val) => {log::info!("--------patch resource {} succeed--------",val)} + Err(e) => {log::info!("!!!!!!!!!patch resource failed {}!!!!!!!!!",e)} + } WriteEventResponse { res } } pub async fn reply_delete(service: Arc, app_state: Arc, req: DeleteEventRequest) -> DeleteEventResponse { + let _lock = crate::cores::GLOBAL_SQ_LOCK.lock().await; + let res = service.delete_resource(req.params, app_state).await; + match res.clone() { + Ok(val) => {log::info!("--------delete resource {} succeed--------",val)} + Err(e) => {log::info!("!!!!!!!!!delete resource failed {}!!!!!!!!!",e)} + } DeleteEventResponse { res } } diff --git a/src/cores/mod.rs b/src/cores/mod.rs index b86df2e..3368400 100644 --- a/src/cores/mod.rs +++ b/src/cores/mod.rs @@ -21,7 +21,12 @@ pub mod events; pub mod services; pub mod plugin; pub mod reflector; +use tokio::sync::Mutex; + +lazy_static::lazy_static! { + pub static ref GLOBAL_SQ_LOCK: Arc> = Arc::new(Mutex::new(())); +} #[derive(Serialize, Deserialize, Debug, Clone)] pub struct ResourcesMessage { group: Option, -- Gitee