This is an automated email from the ASF dual-hosted git repository.

haonan pushed a commit to branch rc/2.0.1
in repository https://gitbox.apache.org/repos/asf/iotdb.git

commit 3aadc71205287561d0021f6bc7a843ff2aeea2b6
Author: Caideyipi <[email protected]>
AuthorDate: Mon Dec 2 14:08:38 2024 +0800

    Fixed the bug that drop table won't release device num in quota & table 
requests may block forever after ConfigNode restart
---
 .../org/apache/iotdb/confignode/manager/ProcedureManager.java    | 2 +-
 .../main/java/org/apache/iotdb/db/schemaengine/SchemaEngine.java | 7 ++++---
 .../iotdb/db/schemaengine/rescon/DataNodeSchemaQuotaManager.java | 4 ++--
 .../iotdb/db/schemaengine/rescon/MemSchemaRegionStatistics.java  | 5 ++++-
 .../schemaregion/mtree/impl/mem/MTreeBelowSGMemoryImpl.java      | 2 --
 .../iotdb/db/schemaengine/schemaregion/tag/TagLogFile.java       | 9 ++++++---
 6 files changed, 17 insertions(+), 12 deletions(-)

diff --git 
a/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/manager/ProcedureManager.java
 
b/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/manager/ProcedureManager.java
index 2822e03b7a0..dfe6f14441b 100644
--- 
a/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/manager/ProcedureManager.java
+++ 
b/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/manager/ProcedureManager.java
@@ -1720,7 +1720,7 @@ public class ProcedureManager {
     ProcedureType type;
     for (final Procedure<?> procedure : executor.getProcedures().values()) {
       type = ProcedureFactory.getProcedureType(procedure);
-      if (type == null) {
+      if (type == null || procedure.isFinished()) {
         continue;
       }
       // A table shall not be concurrently operated or else the dataNode cache
diff --git 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/schemaengine/SchemaEngine.java
 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/schemaengine/SchemaEngine.java
index 4f73a8707c1..de336b0a9df 100644
--- 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/schemaengine/SchemaEngine.java
+++ 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/schemaengine/SchemaEngine.java
@@ -418,7 +418,8 @@ public class SchemaEngine {
    * @param req heartbeat request
    * @param resp heartbeat response
    */
-  public void updateAndFillSchemaCountMap(TDataNodeHeartbeatReq req, 
TDataNodeHeartbeatResp resp) {
+  public void updateAndFillSchemaCountMap(
+      final TDataNodeHeartbeatReq req, final TDataNodeHeartbeatResp resp) {
     // update DataNodeSchemaQuotaManager
     schemaQuotaManager.updateRemain(
         req.getTimeSeriesQuotaRemain(),
@@ -427,7 +428,7 @@ public class SchemaEngine {
       if (resp.getRegionDeviceUsageMap() == null) {
         resp.setRegionDeviceUsageMap(new HashMap<>());
       }
-      Map<Integer, Long> tmp = resp.getRegionDeviceUsageMap();
+      final Map<Integer, Long> tmp = resp.getRegionDeviceUsageMap();
       
SchemaRegionConsensusImpl.getInstance().getAllConsensusGroupIds().stream()
           .filter(
               consensusGroupId ->
@@ -446,7 +447,7 @@ public class SchemaEngine {
       if (resp.getRegionSeriesUsageMap() == null) {
         resp.setRegionSeriesUsageMap(new HashMap<>());
       }
-      Map<Integer, Long> tmp = resp.getRegionSeriesUsageMap();
+      final Map<Integer, Long> tmp = resp.getRegionSeriesUsageMap();
       
SchemaRegionConsensusImpl.getInstance().getAllConsensusGroupIds().stream()
           .filter(
               consensusGroupId ->
diff --git 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/schemaengine/rescon/DataNodeSchemaQuotaManager.java
 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/schemaengine/rescon/DataNodeSchemaQuotaManager.java
index 962e68c7512..f1f2506007c 100644
--- 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/schemaengine/rescon/DataNodeSchemaQuotaManager.java
+++ 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/schemaengine/rescon/DataNodeSchemaQuotaManager.java
@@ -72,7 +72,7 @@ public class DataNodeSchemaQuotaManager {
     }
   }
 
-  public void check(long acquireMeasurementNumber, int acquireDeviceNumber)
+  public void check(final long acquireMeasurementNumber, final int 
acquireDeviceNumber)
       throws SchemaQuotaExceededException {
     if (acquireDeviceNumber > 0) {
       checkDeviceLevel();
@@ -80,7 +80,7 @@ public class DataNodeSchemaQuotaManager {
     // if pass device check, check measurement level
     try {
       checkMeasurementLevel(acquireMeasurementNumber);
-    } catch (SchemaQuotaExceededException e) {
+    } catch (final SchemaQuotaExceededException e) {
       // if measurement level check failed, roll back device remain
       if (acquireDeviceNumber > 0) {
         deviceRemain.addAndGet(1L);
diff --git 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/schemaengine/rescon/MemSchemaRegionStatistics.java
 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/schemaengine/rescon/MemSchemaRegionStatistics.java
index ad29546a78b..f373f33a341 100644
--- 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/schemaengine/rescon/MemSchemaRegionStatistics.java
+++ 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/schemaengine/rescon/MemSchemaRegionStatistics.java
@@ -117,8 +117,11 @@ public class MemSchemaRegionStatistics implements 
ISchemaRegionStatistics {
     tableDeviceNumber.computeIfPresent(table, (tableName, num) -> num - 
decrease);
   }
 
+  // Reset table device, will alter the schema statistics as well
   public void resetTableDevice(final String table) {
-    tableDeviceNumber.computeIfPresent(table, (tableName, num) -> 0L);
+    final long num = tableDeviceNumber.remove(table);
+    devicesNumber.addAndGet(-num);
+    schemaEngineStatistics.deleteDevice(num);
   }
 
   public void addDevice() {
diff --git 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/schemaengine/schemaregion/mtree/impl/mem/MTreeBelowSGMemoryImpl.java
 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/schemaengine/schemaregion/mtree/impl/mem/MTreeBelowSGMemoryImpl.java
index d16ab74ba03..9423aa9815a 100644
--- 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/schemaengine/schemaregion/mtree/impl/mem/MTreeBelowSGMemoryImpl.java
+++ 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/schemaengine/schemaregion/mtree/impl/mem/MTreeBelowSGMemoryImpl.java
@@ -1701,8 +1701,6 @@ public class MTreeBelowSGMemoryImpl {
     }
   }
 
-  public void renameTableAttribute() {}
-
   public boolean deleteTableDevice(final String tableName, final IntConsumer 
attributeDeleter)
       throws MetadataException {
     if (!store.hasChild(storageGroupMNode, tableName)) {
diff --git 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/schemaengine/schemaregion/tag/TagLogFile.java
 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/schemaengine/schemaregion/tag/TagLogFile.java
index 9cf9d51cf21..b63d5a68abb 100644
--- 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/schemaengine/schemaregion/tag/TagLogFile.java
+++ 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/schemaengine/schemaregion/tag/TagLogFile.java
@@ -41,6 +41,7 @@ import java.util.ArrayList;
 import java.util.Collections;
 import java.util.List;
 import java.util.Map;
+import java.util.Objects;
 
 public class TagLogFile implements AutoCloseable {
 
@@ -359,8 +360,10 @@ public class TagLogFile implements AutoCloseable {
 
   @Override
   public void close() throws IOException {
-    fileChannel.force(true);
-    fileChannel.close();
-    fileChannel = null;
+    if (Objects.nonNull(fileChannel) && fileChannel.isOpen()) {
+      fileChannel.force(true);
+      fileChannel.close();
+      fileChannel = null;
+    }
   }
 }

Reply via email to