From ccb1978c98b6c5e687af7b8530c053bebae3ae7f Mon Sep 17 00:00:00 2001 From: yihong Date: Mon, 10 Feb 2025 11:28:34 +0800 Subject: [PATCH] fix: close issue #5466 by do not shortcut the drop command (#5467) fix: close issue #5466 by do not shortcut by back it to READY when fail Signed-off-by: yihong0618 --- src/datanode/src/region_server.rs | 21 +++++++++++++++------ 1 file changed, 15 insertions(+), 6 deletions(-) diff --git a/src/datanode/src/region_server.rs b/src/datanode/src/region_server.rs index 43baf32ec3..f1eb63c51b 100644 --- a/src/datanode/src/region_server.rs +++ b/src/datanode/src/region_server.rs @@ -661,7 +661,7 @@ impl RegionServerInner { } } Err(e) => { - self.unset_region_status(region_id, *region_change); + self.unset_region_status(region_id, &engine, *region_change); error!(e; "Failed to open region: {}", region_id); errors.push(e); } @@ -670,7 +670,7 @@ impl RegionServerInner { } Err(e) => { for (®ion_id, region_change) in ®ion_changes { - self.unset_region_status(region_id, *region_change); + self.unset_region_status(region_id, &engine, *region_change); } error!(e; "Failed to open batch regions"); errors.push(BoxedError::new(e)); @@ -780,7 +780,7 @@ impl RegionServerInner { } Err(err) => { // Removes the region status if the operation fails. - self.unset_region_status(region_id, region_change); + self.unset_region_status(region_id, &engine, region_change); Err(err) } } @@ -809,12 +809,21 @@ impl RegionServerInner { } } - fn unset_region_status(&self, region_id: RegionId, region_change: RegionChange) { + fn unset_region_status( + &self, + region_id: RegionId, + engine: &RegionEngineRef, + region_change: RegionChange, + ) { match region_change { RegionChange::None => {} - RegionChange::Register(_) | RegionChange::Deregisters => { + RegionChange::Register(_) => { self.region_map.remove(®ion_id); } + RegionChange::Deregisters => { + self.region_map + .insert(region_id, RegionEngineWithStatus::Ready(engine.clone())); + } RegionChange::Catchup => {} } } @@ -1195,7 +1204,7 @@ mod tests { .unwrap_err(); let status = mock_region_server.inner.region_map.get(®ion_id); - assert!(status.is_none()); + assert!(status.is_some()); } struct CurrentEngineTest {