This is an automated email from the ASF dual-hosted git repository.
justinchen pushed a commit to branch load_fix
in repository https://gitbox.apache.org/repos/asf/iotdb.git
The following commit(s) were added to refs/heads/load_fix by this push:
new 955103e3526 Load: Fixed multiple bugs (#17413)
955103e3526 is described below
commit 955103e3526846dd71037bc62cafde5c325426a6
Author: Caideyipi <[email protected]>
AuthorDate: Thu Apr 2 09:37:39 2026 +0800
Load: Fixed multiple bugs (#17413)
* fix
* load
* Update ClusterConfigTaskExecutor.java
* fix
---
.../plan/execution/config/executor/ClusterConfigTaskExecutor.java | 2 ++
.../db/queryengine/plan/scheduler/load/LoadTsFileScheduler.java | 5 ++++-
.../org/apache/iotdb/db/storageengine/load/LoadTsFileManager.java | 4 ++--
.../iotdb/db/storageengine/load/active/ActiveLoadPendingQueue.java | 4 ++--
.../iotdb/db/storageengine/load/config/LoadTsFileConfigurator.java | 4 ++--
.../iotdb/db/storageengine/load/memory/LoadTsFileMemoryManager.java | 1 -
.../db/storageengine/load/metrics/LoadTsFileCostMetricsSet.java | 2 +-
7 files changed, 13 insertions(+), 9 deletions(-)
diff --git
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/execution/config/executor/ClusterConfigTaskExecutor.java
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/execution/config/executor/ClusterConfigTaskExecutor.java
index 24c64c24030..023f7e33793 100644
---
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/execution/config/executor/ClusterConfigTaskExecutor.java
+++
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/execution/config/executor/ClusterConfigTaskExecutor.java
@@ -2871,6 +2871,7 @@ public class ClusterConfigTaskExecutor implements
IConfigTaskExecutor {
future.setException(
new IOException(
"The DataNode to be removed is not in the cluster, or the
input format is incorrect."));
+ return future;
}
LOGGER.info("Starting to remove DataNode with nodeIds: {}", nodeIds);
@@ -2940,6 +2941,7 @@ public class ClusterConfigTaskExecutor implements
IConfigTaskExecutor {
future.setException(
new IOException(
"The ConfigNode to be removed is not in the cluster, or the
input format is incorrect."));
+ return future;
}
TConfigNodeLocation configNodeLocation =
removeConfigNodeLocations.get(0);
diff --git
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/scheduler/load/LoadTsFileScheduler.java
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/scheduler/load/LoadTsFileScheduler.java
index e9cd679250b..4a85b6d0ebc 100644
---
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/scheduler/load/LoadTsFileScheduler.java
+++
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/scheduler/load/LoadTsFileScheduler.java
@@ -275,7 +275,10 @@ public class LoadTsFileScheduler implements IScheduler {
final StringBuilder failedTsFiles =
new StringBuilder(
!tsFileNodeList.isEmpty()
- ? tsFileNodeList.get(0).getTsFileResource().getTsFilePath()
+ ? tsFileNodeList
+ .get(failedTsFileNodeIndexes.get(0))
+ .getTsFileResource()
+ .getTsFilePath()
: "");
final ListIterator<Integer> iterator =
failedTsFileNodeIndexes.listIterator(1);
while (iterator.hasNext()) {
diff --git
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/load/LoadTsFileManager.java
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/load/LoadTsFileManager.java
index 1e94188f01b..ce1bb680f21 100644
---
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/load/LoadTsFileManager.java
+++
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/load/LoadTsFileManager.java
@@ -220,7 +220,7 @@ public class LoadTsFileManager {
}
}
- final Optional<CleanupTask> cleanupTask =
Optional.of(uuid2CleanupTask.get(uuid));
+ final Optional<CleanupTask> cleanupTask =
Optional.ofNullable(uuid2CleanupTask.get(uuid));
cleanupTask.ifPresent(CleanupTask::markLoadTaskRunning);
try {
final AtomicReference<Exception> exception = new AtomicReference<>();
@@ -293,7 +293,7 @@ public class LoadTsFileManager {
return false;
}
- final Optional<CleanupTask> cleanupTask =
Optional.of(uuid2CleanupTask.get(uuid));
+ final Optional<CleanupTask> cleanupTask =
Optional.ofNullable(uuid2CleanupTask.get(uuid));
cleanupTask.ifPresent(CleanupTask::markLoadTaskRunning);
try {
uuid2WriterManager.get(uuid).loadAll(isGeneratedByPipe,
timePartitionProgressIndexMap);
diff --git
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/load/active/ActiveLoadPendingQueue.java
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/load/active/ActiveLoadPendingQueue.java
index bb611b842be..3ca83956462 100644
---
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/load/active/ActiveLoadPendingQueue.java
+++
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/load/active/ActiveLoadPendingQueue.java
@@ -66,11 +66,11 @@ public class ActiveLoadPendingQueue {
return loadingFileSet.contains(file) || pendingFileSet.contains(file);
}
- public int size() {
+ public synchronized int size() {
return pendingFileQueue.size() + loadingFileSet.size();
}
- public boolean isEmpty() {
+ public synchronized boolean isEmpty() {
return pendingFileQueue.isEmpty() && loadingFileSet.isEmpty();
}
diff --git
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/load/config/LoadTsFileConfigurator.java
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/load/config/LoadTsFileConfigurator.java
index 65d5b9d2941..510d47b0b23 100644
---
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/load/config/LoadTsFileConfigurator.java
+++
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/load/config/LoadTsFileConfigurator.java
@@ -66,14 +66,14 @@ public class LoadTsFileConfigurator {
public static void validateDatabaseLevelParam(final String databaseLevel) {
try {
- int level = Integer.parseInt(databaseLevel);
+ final int level = Integer.parseInt(databaseLevel);
if (level < DATABASE_LEVEL_MIN_VALUE) {
throw new SemanticException(
String.format(
"Given database level %d is less than the minimum value %d,
please input a valid database level.",
level, DATABASE_LEVEL_MIN_VALUE));
}
- } catch (Exception e) {
+ } catch (final NumberFormatException e) {
throw new SemanticException(
String.format(
"Given database level %s is not a valid integer, please input a
valid database level.",
diff --git
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/load/memory/LoadTsFileMemoryManager.java
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/load/memory/LoadTsFileMemoryManager.java
index 4b08064bb9c..6c85d2280fd 100644
---
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/load/memory/LoadTsFileMemoryManager.java
+++
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/load/memory/LoadTsFileMemoryManager.java
@@ -127,7 +127,6 @@ public class LoadTsFileMemoryManager {
final long actuallyAllocateMemoryInBytes =
tryAllocateFromQuery(MEMORY_TOTAL_SIZE_FROM_QUERY_IN_BYTES >> 2);
dataCacheMemoryBlock = new
LoadTsFileDataCacheMemoryBlock(actuallyAllocateMemoryInBytes);
- usedMemorySizeInBytes.addAndGet(actuallyAllocateMemoryInBytes);
LOGGER.info(
"Create Data Cache Memory Block {}, allocate memory {}",
dataCacheMemoryBlock,
diff --git
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/load/metrics/LoadTsFileCostMetricsSet.java
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/load/metrics/LoadTsFileCostMetricsSet.java
index 28bd40c2d29..1ce119131ae 100644
---
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/load/metrics/LoadTsFileCostMetricsSet.java
+++
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/load/metrics/LoadTsFileCostMetricsSet.java
@@ -159,7 +159,7 @@ public class LoadTsFileCostMetricsSet implements IMetricSet
{
stage));
metricService.remove(
- MetricType.RATE,
+ MetricType.COUNTER,
Metric.LOAD_DISK_IO.toString(),
Tag.NAME.toString(),
String.valueOf(IoTDBDescriptor.getInstance().getConfig().getDataNodeId()));