From 051e0795100401926465059788cafbb962571887 Mon Sep 17 00:00:00 2001 From: Caideyipi <87789683+Caideyipi@users.noreply.github.com> Date: Mon, 29 Jun 2026 16:07:22 +0800 Subject: [PATCH] Fix stale deletion resource manager reuse --- .../consensus/deletion/DeletionResourceManager.java | 3 +++ .../iotdb/db/pipe/consensus/DeletionResourceTest.java | 10 ++++++++++ 2 files changed, 13 insertions(+) diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/pipe/consensus/deletion/DeletionResourceManager.java b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/pipe/consensus/deletion/DeletionResourceManager.java index d2292dae0ad27..956b7e1664be5 100644 --- a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/pipe/consensus/deletion/DeletionResourceManager.java +++ b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/pipe/consensus/deletion/DeletionResourceManager.java @@ -132,6 +132,9 @@ public void close() { LOGGER.info(DataNodePipeMessages.CLOSING_DELETION_RESOURCE_MANAGER_FOR, dataRegionId); this.deleteNode2ResourcesMap.clear(); this.deletionBuffer.close(); + if (DeletionResourceManagerHolder.CONSENSUS_GROUP_ID_2_INSTANCE_MAP != null) { + DeletionResourceManagerHolder.CONSENSUS_GROUP_ID_2_INSTANCE_MAP.remove(dataRegionId, this); + } LOGGER.info( DataNodePipeMessages.DELETION_RESOURCE_MANAGER_FOR_HAS_BEEN_SUCCESSFULLY, dataRegionId); } diff --git a/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/pipe/consensus/DeletionResourceTest.java b/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/pipe/consensus/DeletionResourceTest.java index 8eb43cab0771a..c64174720e160 100644 --- a/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/pipe/consensus/DeletionResourceTest.java +++ b/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/pipe/consensus/DeletionResourceTest.java @@ -102,6 +102,16 @@ public void testCreateBaseDir() { Assert.assertTrue(dataRegionDir.exists()); } + @Test + public void testGetInstanceAfterCloseReturnsFreshManager() { + DeletionResourceManager closedDeletionResourceManager = + DeletionResourceManager.getInstance(FAKE_DATA_REGION_IDS[0]); + closedDeletionResourceManager.close(); + + deletionResourceManager = DeletionResourceManager.getInstance(FAKE_DATA_REGION_IDS[0]); + Assert.assertNotSame(closedDeletionResourceManager, deletionResourceManager); + } + @Test public void testAddBatchDeletionResource() throws IllegalPathException, IOException, InterruptedException {