You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@iotdb.apache.org by ja...@apache.org on 2024/12/02 06:08:44 UTC
(iotdb) branch master updated: Fixed the bug that drop table won't release device num in quota & table requests may block forever after ConfigNode restart
This is an automated email from the ASF dual-hosted git repository.
jackietien pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/iotdb.git
The following commit(s) were added to refs/heads/master by this push:
new eece66eec7d Fixed the bug that drop table won't release device num in quota & table requests may block forever after ConfigNode restart
eece66eec7d is described below
commit eece66eec7d6dd2b085dba1bc7dd21e58ed8a244
Author: Caideyipi <87...@users.noreply.github.com>
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 893b9cf2281..d9a09bed98d 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
@@ -1724,8 +1724,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;
+ }
}
}