This is an automated email from the ASF dual-hosted git repository.
jiangtian 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 a5d33b20c21 fix deletion file handler leak (#16332)
a5d33b20c21 is described below
commit a5d33b20c21cf720fe14a0a9ed2b7044957ed24f
Author: Peng Junzhi <[email protected]>
AuthorDate: Wed Sep 3 04:22:59 2025 -0500
fix deletion file handler leak (#16332)
---
.../deletion/persist/PageCacheDeletionBuffer.java | 24 ++++++++++++++++------
.../consensus/deletion/recover/DeletionReader.java | 2 +-
2 files changed, 19 insertions(+), 7 deletions(-)
diff --git
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/pipe/consensus/deletion/persist/PageCacheDeletionBuffer.java
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/pipe/consensus/deletion/persist/PageCacheDeletionBuffer.java
index bf334b0ed8f..f401cbbc76a 100644
---
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/pipe/consensus/deletion/persist/PageCacheDeletionBuffer.java
+++
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/pipe/consensus/deletion/persist/PageCacheDeletionBuffer.java
@@ -184,12 +184,18 @@ public class PageCacheDeletionBuffer implements
DeletionBuffer {
pendingDeletionsInOneTask.forEach(DeletionResource::onPersistSucceed);
}
- private void closeCurrentLoggingFile() throws IOException {
+ private void closeCurrentLoggingFile(boolean notifySuccess) throws
IOException {
LOGGER.info("Deletion persist-{}: current file has been closed",
dataRegionId);
// Close old resource to fsync.
- this.logStream.close();
- this.logChannel.close();
- pendingDeletionsInOneTask.forEach(DeletionResource::onPersistSucceed);
+ if (this.logStream != null) {
+ this.logStream.close();
+ }
+ if (this.logChannel != null) {
+ this.logChannel.close();
+ }
+ if (notifySuccess) {
+ pendingDeletionsInOneTask.forEach(DeletionResource::onPersistSucceed);
+ }
}
private void resetTaskAttribute() {
@@ -271,6 +277,12 @@ public class PageCacheDeletionBuffer implements
DeletionBuffer {
Thread.currentThread().interrupt();
}
}
+ // close file handler
+ try {
+ closeCurrentLoggingFile(false);
+ } catch (IOException e) {
+ LOGGER.error("Fail to close current logging file when closing", e);
+ }
// clean buffer
MmapUtil.clean(serializeBuffer);
serializeBuffer = null;
@@ -370,7 +382,7 @@ public class PageCacheDeletionBuffer implements
DeletionBuffer {
deletionResources.add(deletionResource);
// 2. fsync immediately and roll to a new file.
appendCurrentBatch();
- closeCurrentLoggingFile();
+ closeCurrentLoggingFile(true);
resetTaskAttribute();
switchLoggingFile();
return;
@@ -384,7 +396,7 @@ public class PageCacheDeletionBuffer implements
DeletionBuffer {
// Persist deletions; Defensive programming here, just in case.
if (totalSize.get() > 0) {
appendCurrentBatch();
- closeCurrentLoggingFile();
+ closeCurrentLoggingFile(true);
resetTaskAttribute();
switchLoggingFile();
}
diff --git
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/pipe/consensus/deletion/recover/DeletionReader.java
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/pipe/consensus/deletion/recover/DeletionReader.java
index 22c4b7ca41d..943693e7b00 100644
---
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/pipe/consensus/deletion/recover/DeletionReader.java
+++
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/pipe/consensus/deletion/recover/DeletionReader.java
@@ -95,7 +95,7 @@ public class DeletionReader implements Closeable {
@Override
public void close() throws IOException {
- this.fileInputStream.close();
this.fileChannel.close();
+ this.fileInputStream.close();
}
}