From 0dc649e0289fcbd7fd3d2ed502a0ca9c5dc65119 Mon Sep 17 00:00:00 2001 From: Weny Xu Date: Wed, 21 Oct 2026 11:55:44 +0000 Subject: [PATCH] fix(datanode): release region map guard before awaiting role changes (#9824) Signed-off-by: WenyXu --- src/datanode/src/region_server.rs | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/src/datanode/src/region_server.rs b/src/datanode/src/region_server.rs index 15bf786c389..135d069fd77 100644 --- a/src/datanode/src/region_server.rs +++ b/src/datanode/src/region_server.rs @@ -486,7 +486,14 @@ impl RegionServer { region_id: RegionId, state: SettableRegionRoleState, ) -> Result { - match self.inner.region_map.get(®ion_id) { + // Cloning releases the DashMap guard before awaiting the engine operation. + let engine = self + .inner + .region_map + .get(®ion_id) + .map(|entry| entry.value().clone()); + + match engine { Some(engine) => Ok(engine .set_region_role_state_gracefully(region_id, state) .await