fix(meta): release region guards after drop rollback (#8751)

Signed-off-by: WenyXu <wenymedia@gmail.com>
This commit is contained in:
Weny Xu
2026-08-05 14:15:00 +08:00
committed by GitHub
parent 9f724aa5f6
commit b70daafc77
2 changed files with 16 additions and 1 deletions
+4 -1
View File
@@ -456,7 +456,10 @@ impl Procedure for DropTableProcedure {
&self.data.region_wal_options,
)
.await
.map_err(ProcedureError::external)
.map_err(ProcedureError::external)?;
self.dropping_regions.clear();
Ok(())
}
}
@@ -2646,6 +2646,18 @@ async fn test_on_rollback() {
procedure.on_delete_metadata().await.unwrap();
assert!(procedure.rollback_supported());
procedure.rollback(&ctx).await.unwrap();
assert!(procedure.dropping_regions.is_empty());
assert_eq!(ddl_context.memory_region_keeper.len(), 0);
// The physical table can be dropped again after the metadata rollback.
let retry_task = new_drop_table_task("phy_table", physical_table_id, false);
let mut retry = DropTableProcedure::new(retry_task, ddl_context.clone());
retry.on_prepare().await.unwrap();
retry.on_delete_metadata().await.unwrap();
retry.rollback(&ctx).await.unwrap();
assert!(retry.dropping_regions.is_empty());
assert_eq!(ddl_context.memory_region_keeper.len(), 0);
// Rollback again
assert!(procedure.rollback_supported());
procedure.rollback(&ctx).await.unwrap();