Skip to content

Commit 2c381fe

Browse files
authored
Load: Fixed the bug that mods is not deleted in load tsFile when there are exceptions & Fixed the potential NPE in air gap agent close() method (apache#16775)
1 parent bd97844 commit 2c381fe

File tree

4 files changed

+22
-5
lines changed

4 files changed

+22
-5
lines changed

iotdb-core/datanode/src/main/java/org/apache/iotdb/db/pipe/receiver/protocol/airgap/IoTDBAirGapReceiverAgent.java

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,7 @@
3232
import java.io.IOException;
3333
import java.net.ServerSocket;
3434
import java.net.Socket;
35+
import java.util.Objects;
3536
import java.util.concurrent.ExecutorService;
3637
import java.util.concurrent.atomic.AtomicBoolean;
3738
import java.util.concurrent.atomic.AtomicLong;
@@ -84,7 +85,9 @@ public void start() throws StartupException {
8485
@Override
8586
public void stop() {
8687
try {
87-
serverSocket.close();
88+
if (Objects.nonNull(serverSocket)) {
89+
serverSocket.close();
90+
}
8891
} catch (final IOException e) {
8992
LOGGER.warn("Failed to close IoTDBAirGapReceiverAgent's server socket", e);
9093
}

iotdb-core/datanode/src/main/java/org/apache/iotdb/db/pipe/receiver/visitor/PipeTableStatementDataTypeConvertExecutionVisitor.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -37,10 +37,10 @@
3737
import org.apache.iotdb.db.queryengine.plan.statement.crud.InsertRowsStatement;
3838
import org.apache.iotdb.db.queryengine.plan.statement.crud.InsertTabletStatement;
3939
import org.apache.iotdb.db.queryengine.plan.statement.crud.LoadTsFileStatement;
40+
import org.apache.iotdb.db.storageengine.load.LoadTsFileManager;
4041
import org.apache.iotdb.pipe.api.event.dml.insertion.TabletInsertionEvent;
4142
import org.apache.iotdb.rpc.TSStatusCode;
4243

43-
import org.apache.tsfile.external.commons.io.FileUtils;
4444
import org.apache.tsfile.utils.Pair;
4545
import org.slf4j.Logger;
4646
import org.slf4j.LoggerFactory;
@@ -193,7 +193,7 @@ public Optional<TSStatus> visitLoadFile(
193193
}
194194

195195
if (loadTsFileStatement.isDeleteAfterLoad()) {
196-
loadTsFileStatement.getTsFiles().forEach(FileUtils::deleteQuietly);
196+
loadTsFileStatement.getTsFiles().forEach(LoadTsFileManager::cleanTsFile);
197197
}
198198

199199
LOGGER.warn(

iotdb-core/datanode/src/main/java/org/apache/iotdb/db/pipe/receiver/visitor/PipeTreeStatementDataTypeConvertExecutionVisitor.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -36,9 +36,9 @@
3636
import org.apache.iotdb.db.queryengine.plan.statement.crud.InsertRowsStatement;
3737
import org.apache.iotdb.db.queryengine.plan.statement.crud.InsertTabletStatement;
3838
import org.apache.iotdb.db.queryengine.plan.statement.crud.LoadTsFileStatement;
39+
import org.apache.iotdb.db.storageengine.load.LoadTsFileManager;
3940
import org.apache.iotdb.rpc.TSStatusCode;
4041

41-
import org.apache.tsfile.external.commons.io.FileUtils;
4242
import org.apache.tsfile.utils.Pair;
4343
import org.apache.tsfile.write.record.Tablet;
4444
import org.slf4j.Logger;
@@ -153,7 +153,7 @@ file, new IoTDBTreePattern(null), Long.MIN_VALUE, Long.MAX_VALUE, null, null, tr
153153
}
154154

155155
if (loadTsFileStatement.isDeleteAfterLoad()) {
156-
loadTsFileStatement.getTsFiles().forEach(FileUtils::deleteQuietly);
156+
loadTsFileStatement.getTsFiles().forEach(LoadTsFileManager::cleanTsFile);
157157
}
158158

159159
LOGGER.warn(

iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/load/LoadTsFileManager.java

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -46,6 +46,7 @@
4646
import org.apache.iotdb.db.storageengine.dataregion.DataRegion;
4747
import org.apache.iotdb.db.storageengine.dataregion.flush.MemTableFlushTask;
4848
import org.apache.iotdb.db.storageengine.dataregion.modification.ModificationFile;
49+
import org.apache.iotdb.db.storageengine.dataregion.modification.v1.ModificationFileV1;
4950
import org.apache.iotdb.db.storageengine.dataregion.tsfile.TsFileResource;
5051
import org.apache.iotdb.db.storageengine.dataregion.tsfile.TsFileResourceStatus;
5152
import org.apache.iotdb.db.storageengine.load.active.ActiveLoadAgent;
@@ -400,6 +401,19 @@ public static void updateWritePointCountMetrics(
400401
}
401402
}
402403

404+
public static void cleanTsFile(final File tsFile) {
405+
try {
406+
Files.deleteIfExists(tsFile.toPath());
407+
Files.deleteIfExists(
408+
new File(tsFile.getAbsolutePath() + TsFileResource.RESOURCE_SUFFIX).toPath());
409+
Files.deleteIfExists(ModificationFile.getExclusiveMods(tsFile).toPath());
410+
Files.deleteIfExists(
411+
new File(tsFile.getAbsolutePath() + ModificationFileV1.FILE_SUFFIX).toPath());
412+
} catch (final IOException e) {
413+
LOGGER.warn("Delete After Loading {} error.", tsFile, e);
414+
}
415+
}
416+
403417
private static class TsFileWriterManager {
404418

405419
private final File taskDir;

0 commit comments

Comments
 (0)