qiaojialin commented on a change in pull request #4549:
URL: https://github.com/apache/iotdb/pull/4549#discussion_r766628295
##########
File path:
server/src/main/java/org/apache/iotdb/db/engine/compaction/inner/utils/InnerSpaceCompactionUtils.java
##########
@@ -584,4 +587,46 @@ public static ICrossSpaceMergeFileSelector
getCrossSpaceFileSelector(
return new File[0];
}
}
+
+ /**
+ * Update the targetResource. Move xxx.target to xxx.tsfile and
xxx.target.resource to
+ * xxx.tsfile.resource.
+ *
+ * @param targetResource the old tsfile to be moved, which is xxx.target
+ * @throws IOException
+ */
+ public static void moveTargetFile(TsFileResource targetResource, String
fullStorageGroupName)
+ throws IOException {
+ if
(!targetResource.getTsFilePath().endsWith(TsFileNameGenerator.COMPACTION_TMP_FILE_SUFFIX))
{
+ logger.warn(
+ "TmpTargetFileReource "
Review comment:
```suggestion
"Tmp target TsFile "
```
##########
File path:
server/src/main/java/org/apache/iotdb/db/engine/compaction/inner/sizetiered/SizeTieredCompactionRecoverTask.java
##########
@@ -93,33 +104,88 @@ public void doCompaction() {
logAnalyzer.analyze();
List<TsFileIdentifier> sourceFileIdentifiers =
logAnalyzer.getSourceFileInfos();
TsFileIdentifier targetFileIdentifier =
logAnalyzer.getTargetFileInfo();
+
+ // compaction log file is incomplete
if (targetFileIdentifier == null || sourceFileIdentifiers.isEmpty()) {
LOGGER.info(
"{}-{} [Compaction][Recover] incomplete log file, abort recover",
logicalStorageGroupName,
virtualStorageGroup);
return;
}
- File targetFile = targetFileIdentifier.getFileFromDataDirs();
- if (targetFile == null) {
- // cannot find target file from data dirs
- LOGGER.info(
- "{}-{} [Compaction][Recover] cannot find target file {} from
data dirs, abort recover",
- logicalStorageGroupName,
- virtualStorageGroup,
- targetFileIdentifier);
- return;
+ // xxx.target
+ File tmpTargetFile = targetFileIdentifier.getFileFromDataDirs();
+ // xxx.tsfile
+ File targetFile =
+ getFileFromDataDirs(
+ targetFileIdentifier
+ .getFilePath()
+ .replace(
+ TsFileNameGenerator.COMPACTION_TMP_FILE_SUFFIX,
+ TsFileConstant.TSFILE_SUFFIX));
+ // xxx.target.resource
+ File tmpTargetResourceFile =
+ getFileFromDataDirs(
+ targetFileIdentifier.getFilePath() +
TsFileResource.RESOURCE_SUFFIX);
Review comment:
```suggestion
new File(tmpTargetFile.getPath()+
TsFileResource.RESOURCE_SUFFIX);
```
##########
File path:
server/src/main/java/org/apache/iotdb/db/engine/compaction/inner/utils/InnerSpaceCompactionUtils.java
##########
@@ -584,4 +587,46 @@ public static ICrossSpaceMergeFileSelector
getCrossSpaceFileSelector(
return new File[0];
}
}
+
+ /**
+ * Update the targetResource. Move xxx.target to xxx.tsfile and
xxx.target.resource to
+ * xxx.tsfile.resource.
+ *
+ * @param targetResource the old tsfile to be moved, which is xxx.target
+ * @throws IOException
+ */
+ public static void moveTargetFile(TsFileResource targetResource, String
fullStorageGroupName)
+ throws IOException {
+ if
(!targetResource.getTsFilePath().endsWith(TsFileNameGenerator.COMPACTION_TMP_FILE_SUFFIX))
{
+ logger.warn(
+ "TmpTargetFileReource "
+ + targetResource.getTsFilePath()
+ + " should be end with "
+ + TsFileNameGenerator.COMPACTION_TMP_FILE_SUFFIX);
+ return;
+ }
+ File oldFile = targetResource.getTsFile();
+
+ // move TsFile and delete old tsfile
+ String newFilePath =
+ targetResource
+ .getTsFilePath()
+ .replace(TsFileNameGenerator.COMPACTION_TMP_FILE_SUFFIX,
TsFileConstant.TSFILE_SUFFIX);
+ File newFile = new File(newFilePath);
+ FSFactoryProducer.getFSFactory().moveFile(oldFile, newFile);
+
+ // move resource file
+ targetResource.setFile(newFile);
+ targetResource.setClosed(true);
+ targetResource.serialize();
+
+ // delete old resource file
+ File oldResourceFile = new File(oldFile.getPath() +
TsFileResource.RESOURCE_SUFFIX);
+ if (!oldResourceFile.delete()) {
+ logger.error(
+ "{} [Compaction] Fail to delete old resource file {}",
+ fullStorageGroupName,
+ oldResourceFile.getAbsolutePath());
Review comment:
Use FSFactoryProducer.getFSFactory().moveFile(oldFile, newFile) to move
resource, this is a atomic action.
Do not use write new, then delete. You will meet two .resource when
restarting.
##########
File path:
server/src/main/java/org/apache/iotdb/db/engine/compaction/inner/sizetiered/SizeTieredCompactionRecoverTask.java
##########
@@ -93,33 +104,88 @@ public void doCompaction() {
logAnalyzer.analyze();
List<TsFileIdentifier> sourceFileIdentifiers =
logAnalyzer.getSourceFileInfos();
TsFileIdentifier targetFileIdentifier =
logAnalyzer.getTargetFileInfo();
+
+ // compaction log file is incomplete
if (targetFileIdentifier == null || sourceFileIdentifiers.isEmpty()) {
LOGGER.info(
"{}-{} [Compaction][Recover] incomplete log file, abort recover",
logicalStorageGroupName,
virtualStorageGroup);
return;
}
- File targetFile = targetFileIdentifier.getFileFromDataDirs();
- if (targetFile == null) {
- // cannot find target file from data dirs
- LOGGER.info(
- "{}-{} [Compaction][Recover] cannot find target file {} from
data dirs, abort recover",
- logicalStorageGroupName,
- virtualStorageGroup,
- targetFileIdentifier);
- return;
+ // xxx.target
+ File tmpTargetFile = targetFileIdentifier.getFileFromDataDirs();
+ // xxx.tsfile
+ File targetFile =
+ getFileFromDataDirs(
+ targetFileIdentifier
+ .getFilePath()
+ .replace(
+ TsFileNameGenerator.COMPACTION_TMP_FILE_SUFFIX,
+ TsFileConstant.TSFILE_SUFFIX));
+ // xxx.target.resource
+ File tmpTargetResourceFile =
+ getFileFromDataDirs(
+ targetFileIdentifier.getFilePath() +
TsFileResource.RESOURCE_SUFFIX);
+
+ // xxx.tsfile.resource
+ File targetResourceFile =
+ getFileFromDataDirs(
+ targetFileIdentifier
+ .getFilePath()
+ .replace(
+ TsFileNameGenerator.COMPACTION_TMP_FILE_SUFFIX,
+ TsFileConstant.TSFILE_SUFFIX)
+ + TsFileResource.RESOURCE_SUFFIX);
+
+ if (tmpTargetFile != null) {
+ // xxx.target exists, then move it to xxx.tsfile
+ if (targetFile != null) {
+ targetFile.delete();
+ }
+ TsFileResource targetResource = new TsFileResource(tmpTargetFile);
+ InnerSpaceCompactionUtils.moveTargetFile(targetResource,
fullStorageGroupName);
Review comment:
why fullStorageGroupName?
##########
File path:
server/src/main/java/org/apache/iotdb/db/engine/storagegroup/TsFileNameGenerator.java
##########
@@ -38,6 +38,7 @@
public class TsFileNameGenerator {
private static FSFactory fsFactory = FSFactoryProducer.getFSFactory();
+ public static final String COMPACTION_TMP_FILE_SUFFIX = ".target";
Review comment:
move to IoTDBConstant
##########
File path:
server/src/main/java/org/apache/iotdb/db/engine/compaction/inner/sizetiered/SizeTieredCompactionTask.java
##########
@@ -105,6 +105,7 @@ protected void doCompaction() throws Exception {
long startTime = System.currentTimeMillis();
// get resource of target file
String dataDirectory =
selectedTsFileResourceList.get(0).getTsFile().getParent();
+ // Here is tmpTargetFile, which is xxx.target
Review comment:
will this .target be conflict with merge target file?
##########
File path:
server/src/main/java/org/apache/iotdb/db/engine/compaction/inner/sizetiered/SizeTieredCompactionRecoverTask.java
##########
@@ -93,33 +104,88 @@ public void doCompaction() {
logAnalyzer.analyze();
List<TsFileIdentifier> sourceFileIdentifiers =
logAnalyzer.getSourceFileInfos();
TsFileIdentifier targetFileIdentifier =
logAnalyzer.getTargetFileInfo();
+
+ // compaction log file is incomplete
if (targetFileIdentifier == null || sourceFileIdentifiers.isEmpty()) {
LOGGER.info(
"{}-{} [Compaction][Recover] incomplete log file, abort recover",
logicalStorageGroupName,
virtualStorageGroup);
return;
}
- File targetFile = targetFileIdentifier.getFileFromDataDirs();
- if (targetFile == null) {
- // cannot find target file from data dirs
- LOGGER.info(
- "{}-{} [Compaction][Recover] cannot find target file {} from
data dirs, abort recover",
- logicalStorageGroupName,
- virtualStorageGroup,
- targetFileIdentifier);
- return;
+ // xxx.target
+ File tmpTargetFile = targetFileIdentifier.getFileFromDataDirs();
+ // xxx.tsfile
+ File targetFile =
+ getFileFromDataDirs(
+ targetFileIdentifier
+ .getFilePath()
+ .replace(
+ TsFileNameGenerator.COMPACTION_TMP_FILE_SUFFIX,
+ TsFileConstant.TSFILE_SUFFIX));
+ // xxx.target.resource
+ File tmpTargetResourceFile =
+ getFileFromDataDirs(
+ targetFileIdentifier.getFilePath() +
TsFileResource.RESOURCE_SUFFIX);
+
+ // xxx.tsfile.resource
+ File targetResourceFile =
+ getFileFromDataDirs(
+ targetFileIdentifier
+ .getFilePath()
+ .replace(
+ TsFileNameGenerator.COMPACTION_TMP_FILE_SUFFIX,
+ TsFileConstant.TSFILE_SUFFIX)
+ + TsFileResource.RESOURCE_SUFFIX);
Review comment:
```suggestion
new File(targetFile.getPath()+ TsFileResource.RESOURCE_SUFFIX);
```
--
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
To unsubscribe, e-mail: [email protected]
For queries about this service, please contact Infrastructure at:
[email protected]