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

rong pushed a commit to branch dev/1.3
in repository https://gitbox.apache.org/repos/asf/iotdb.git


The following commit(s) were added to refs/heads/dev/1.3 by this push:
     new de88b9b336f Load: fix memory leak when failed to send chunk data in 
first phase (#15518) (#15542)
de88b9b336f is described below

commit de88b9b336f10a4f134f0068ad83bfc34389584b
Author: Zikun Ma <[email protected]>
AuthorDate: Tue May 20 16:51:11 2025 +0800

    Load: fix memory leak when failed to send chunk data in first phase 
(#15518) (#15542)
    
    This commit addresses a memory leak issue in the load process by ensuring 
that memory usage is reduced even when the dispatch of a piece node fails. The 
key changes include:
    
    - Storing the result of the dispatch call in a variable (isDispatchSuccess) 
before reducing memory usage.
    - Deducting the memory usage prior to checking the dispatch result to avoid 
leaks.
    - Returning false immediately after the reduction when the dispatch fails.
    
    (cherry picked from commit 417ddd0becd8f85103d0776d47450f9936241e86)
---
 .../plan/scheduler/load/LoadTsFileScheduler.java           | 14 +++++++++-----
 1 file changed, 9 insertions(+), 5 deletions(-)

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 f45e9805200..49a9fc9e3be 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
@@ -663,12 +663,8 @@ public class LoadTsFileScheduler implements IScheduler {
           if (pieceNode.getDataSize() == 0) { // total data size has been 
reduced to 0
             break;
           }
-          if (!scheduler.dispatchOnePieceNode(pieceNode, replicaSet)) {
-            return false;
-          }
+          final boolean isDispatchSuccess = 
scheduler.dispatchOnePieceNode(pieceNode, replicaSet);
 
-          dataSize -= pieceNode.getDataSize();
-          block.reduceMemoryUsage(pieceNode.getDataSize());
           regionId2ReplicaSetAndNode.replace(
               sortedRegionId,
               new Pair<>(
@@ -678,6 +674,14 @@ public class LoadTsFileScheduler implements IScheduler {
                       singleTsFileNode
                           .getTsFileResource()
                           .getTsFile()))); // can not just remove, because of 
deletion
+          dataSize -= pieceNode.getDataSize();
+          block.reduceMemoryUsage(pieceNode.getDataSize());
+
+          if (!isDispatchSuccess) {
+            // Currently there is no retry, so return directly
+            return false;
+          }
+
           if (isMemoryEnough()) {
             break;
           }

Reply via email to