You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@iotdb.apache.org by ha...@apache.org on 2024/03/06 01:37:01 UTC
(iotdb) branch master updated: Add removeTsFile for DataRegion (#12126)
This is an automated email from the ASF dual-hosted git repository.
haonan 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 2c8a8b0346f Add removeTsFile for DataRegion (#12126)
2c8a8b0346f is described below
commit 2c8a8b0346f759fad0ebe8a507e8ee2ca5bd75dd
Author: Alan Choo <43...@users.noreply.github.com>
AuthorDate: Wed Mar 6 09:36:54 2024 +0800
Add removeTsFile for DataRegion (#12126)
---
.../db/storageengine/dataregion/DataRegion.java | 66 ++++++++++++++--------
1 file changed, 43 insertions(+), 23 deletions(-)
diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/dataregion/DataRegion.java b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/dataregion/DataRegion.java
index d08af91dfe3..2de67afec9d 100644
--- a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/dataregion/DataRegion.java
+++ b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/dataregion/DataRegion.java
@@ -2894,6 +2894,21 @@ public class DataRegion implements IDataRegionForQuery {
return workSequenceTsFileProcessors.values();
}
+ public boolean removeTsFile(File fileToBeRemoved) {
+ TsFileResource tsFileResourceToBeRemoved = unloadTsFileInside(fileToBeRemoved);
+ if (tsFileResourceToBeRemoved == null) {
+ return false;
+ }
+ tsFileResourceToBeRemoved.writeLock();
+ try {
+ tsFileResourceToBeRemoved.remove();
+ logger.info("Remove tsfile {} successfully.", tsFileResourceToBeRemoved.getTsFile());
+ } finally {
+ tsFileResourceToBeRemoved.writeUnlock();
+ }
+ return true;
+ }
+
/**
* Unload tsfile and move it to the target directory if it exists.
*
@@ -2905,29 +2920,47 @@ public class DataRegion implements IDataRegionForQuery {
* @return whether the file to be unloaded exists. @UsedBy load external tsfile module.
*/
public boolean unloadTsfile(File fileToBeUnloaded, File targetDir) throws IOException {
- writeLock("unloadTsfile");
- TsFileResource tsFileResourceToBeMoved = null;
+ TsFileResource tsFileResourceToBeMoved = unloadTsFileInside(fileToBeUnloaded);
+ if (tsFileResourceToBeMoved == null) {
+ return false;
+ }
+ tsFileResourceToBeMoved.writeLock();
+ try {
+ tsFileResourceToBeMoved.moveTo(targetDir);
+ logger.info(
+ "Move tsfile {} to target dir {} successfully.",
+ tsFileResourceToBeMoved.getTsFile(),
+ targetDir.getPath());
+ } finally {
+ tsFileResourceToBeMoved.writeUnlock();
+ }
+ return true;
+ }
+
+ private TsFileResource unloadTsFileInside(File fileToBeUnloaded) {
+ writeLock("unloadTsFileInside");
+ TsFileResource unloadedTsFileResource = null;
try {
Iterator<TsFileResource> sequenceIterator = tsFileManager.getIterator(true);
while (sequenceIterator.hasNext()) {
TsFileResource sequenceResource = sequenceIterator.next();
if (sequenceResource.getTsFile().getName().equals(fileToBeUnloaded.getName())) {
- tsFileResourceToBeMoved = sequenceResource;
- tsFileManager.remove(tsFileResourceToBeMoved, true);
+ unloadedTsFileResource = sequenceResource;
+ tsFileManager.remove(unloadedTsFileResource, true);
FileMetrics.getInstance()
- .deleteTsFile(true, Collections.singletonList(tsFileResourceToBeMoved));
+ .deleteTsFile(true, Collections.singletonList(unloadedTsFileResource));
break;
}
}
- if (tsFileResourceToBeMoved == null) {
+ if (unloadedTsFileResource == null) {
Iterator<TsFileResource> unsequenceIterator = tsFileManager.getIterator(false);
while (unsequenceIterator.hasNext()) {
TsFileResource unsequenceResource = unsequenceIterator.next();
if (unsequenceResource.getTsFile().getName().equals(fileToBeUnloaded.getName())) {
- tsFileResourceToBeMoved = unsequenceResource;
- tsFileManager.remove(tsFileResourceToBeMoved, false);
+ unloadedTsFileResource = unsequenceResource;
+ tsFileManager.remove(unloadedTsFileResource, false);
FileMetrics.getInstance()
- .deleteTsFile(false, Collections.singletonList(tsFileResourceToBeMoved));
+ .deleteTsFile(false, Collections.singletonList(unloadedTsFileResource));
break;
}
}
@@ -2935,20 +2968,7 @@ public class DataRegion implements IDataRegionForQuery {
} finally {
writeUnlock();
}
- if (tsFileResourceToBeMoved == null) {
- return false;
- }
- tsFileResourceToBeMoved.writeLock();
- try {
- tsFileResourceToBeMoved.moveTo(targetDir);
- logger.info(
- "Move tsfile {} to target dir {} successfully.",
- tsFileResourceToBeMoved.getTsFile(),
- targetDir.getPath());
- } finally {
- tsFileResourceToBeMoved.writeUnlock();
- }
- return true;
+ return unloadedTsFileResource;
}
/**