Skip to content

Commit 06ccdd1

Browse files
Load: fix memory leak when failed in 2nd phase (#15503)
1 parent 59c46cf commit 06ccdd1

File tree

3 files changed

+15
-9
lines changed

3 files changed

+15
-9
lines changed

iotdb-core/datanode/src/main/java/org/apache/iotdb/db/pipe/receiver/protocol/thrift/IoTDBDataNodeReceiver.java

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -798,11 +798,13 @@ private TSStatus executeStatementAndClassifyExceptions(final Statement statement
798798
} catch (final PipeRuntimeOutOfMemoryCriticalException e) {
799799
final String message =
800800
String.format(
801-
"Temporarily out of memory when executing statement %s, Requested memory: %s, used memory: %s, total memory: %s",
801+
"Temporarily out of memory when executing statement %s, Requested memory: %s, "
802+
+ "used memory: %s, free memory: %s, total non-floating memory: %s",
802803
statement,
803804
estimatedMemory * pipeReceiverActualToEstimatedMemoryRatio,
804805
PipeDataNodeResourceManager.memory().getUsedMemorySizeInBytes(),
805-
PipeDataNodeResourceManager.memory().getFreeMemorySizeInBytes());
806+
PipeDataNodeResourceManager.memory().getFreeMemorySizeInBytes(),
807+
PipeDataNodeResourceManager.memory().getTotalNonFloatingMemorySizeInBytes());
806808
if (LOGGER.isDebugEnabled()) {
807809
LOGGER.debug("Receiver id = {}: {}", receiverId.get(), message, e);
808810
}

iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/scheduler/load/LoadTsFileScheduler.java

Lines changed: 9 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -425,7 +425,9 @@ private boolean secondPhase(
425425
result.getFailureStatus().getMessage());
426426
TSStatus status = result.getFailureStatus();
427427
status.setMessage(
428-
String.format("Load %s error in 2nd phase. Because ", tsFile) + status.getMessage());
428+
String.format(
429+
"Load %s error in second phase. Because %s, first phase is %s",
430+
tsFile, status.getMessage(), isFirstPhaseSuccess ? "success" : "failed"));
429431
stateMachine.transitionToFailed(status);
430432
return false;
431433
}
@@ -780,19 +782,21 @@ private boolean addOrSendDeletionData(DeletionData deletionData) throws LoadFile
780782
private boolean sendAllTsFileData() throws LoadFileException {
781783
routeChunkData();
782784

785+
boolean isAllSuccess = true;
783786
for (Map.Entry<TConsensusGroupId, Pair<TRegionReplicaSet, LoadTsFilePieceNode>> entry :
784787
regionId2ReplicaSetAndNode.entrySet()) {
785788
block.reduceMemoryUsage(entry.getValue().getRight().getDataSize());
786-
if (!scheduler.dispatchOnePieceNode(
787-
entry.getValue().getRight(), entry.getValue().getLeft())) {
789+
if (isAllSuccess
790+
&& !scheduler.dispatchOnePieceNode(
791+
entry.getValue().getRight(), entry.getValue().getLeft())) {
788792
LOGGER.warn(
789793
"Dispatch piece node {} of TsFile {} error.",
790794
entry.getValue(),
791795
singleTsFileNode.getTsFileResource().getTsFile());
792-
return false;
796+
isAllSuccess = false;
793797
}
794798
}
795-
return true;
799+
return isAllSuccess;
796800
}
797801

798802
private void clear() {

iotdb-core/node-commons/src/main/java/org/apache/iotdb/commons/pipe/datastructure/pattern/TablePattern.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -151,9 +151,9 @@ public static boolean isTableModelDataAllowToBeCaptured(final PipeParameters sou
151151
@Override
152152
public String toString() {
153153
return "TablePattern{"
154-
+ "isTableModelDataAllowedToBeCaptured"
154+
+ "isTableModelDataAllowedToBeCaptured="
155155
+ isTableModelDataAllowedToBeCaptured
156-
+ "databasePattern="
156+
+ ", databasePattern="
157157
+ databasePattern
158158
+ ", tablePattern="
159159
+ tablePattern

0 commit comments

Comments
 (0)