From 91b1c844302cb9fd144424460ac88652c6eec548 Mon Sep 17 00:00:00 2001 From: junxiang Mu <1948535941@qq.com> Date: Thu, 24 Jul 2025 12:18:05 +0800 Subject: [PATCH] rebase Signed-off-by: junxiang Mu <1948535941@qq.com> --- crates/ecstore/src/rpc/tonic_service.rs | 31 ++++++++++++++++--------- 1 file changed, 20 insertions(+), 11 deletions(-) diff --git a/crates/ecstore/src/rpc/tonic_service.rs b/crates/ecstore/src/rpc/tonic_service.rs index ad6d58d9..cbf30dcc 100644 --- a/crates/ecstore/src/rpc/tonic_service.rs +++ b/crates/ecstore/src/rpc/tonic_service.rs @@ -36,6 +36,7 @@ use rustfs_common::{globals::GLOBAL_Local_Node_Name, heal_channel::HealOpts}; use bytes::Bytes; use rmp_serde::{Deserializer, Serializer}; use rustfs_filemeta::{FileInfo, MetacacheReader}; +use rustfs_lock::{LockClient, LockRequest}; use rustfs_madmin::health::{ get_cpus, get_mem_info, get_os_info, get_partitions, get_proc_info, get_sys_config, get_sys_errors, get_sys_services, }; @@ -1436,20 +1437,28 @@ impl Node for NodeService { async fn lock(&self, request: Request) -> Result, Status> { let request = request.into_inner(); - match &serde_json::from_str::(&request.args) { - Ok(args) => match GLOBAL_LOCAL_SERVER.write().await.lock(args).await { - Ok(result) => Ok(tonic::Response::new(GenerallyLockResponse { - success: result, - error_info: None, - })), - Err(err) => Ok(tonic::Response::new(GenerallyLockResponse { + // Parse the request to extract resource and owner + let args: LockRequest = match serde_json::from_str(&request.args) { + Ok(args) => args, + Err(err) => { + return Ok(tonic::Response::new(GenerallyLockResponse { success: false, - error_info: Some(format!("can not lock, args: {args}, err: {err}")), - })), - }, + error_info: Some(format!("can not decode args, err: {err}")), + })); + } + }; + + match self.lock_manager.acquire_exclusive(&args).await { + Ok(result) => Ok(tonic::Response::new(GenerallyLockResponse { + success: result.success, + error_info: None, + })), Err(err) => Ok(tonic::Response::new(GenerallyLockResponse { success: false, - error_info: Some(format!("can not decode args, err: {err}")), + error_info: Some(format!( + "can not lock, resource: {0}, owner: {1}, err: {2}", + args.resource, args.owner, err + )), })), } }