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; + } } }
