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 <[email protected]>
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;
}
/**