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