qiaojialin commented on a change in pull request #4549:
URL: https://github.com/apache/iotdb/pull/4549#discussion_r771370605



##########
File path: 
server/src/main/java/org/apache/iotdb/db/engine/compaction/inner/sizetiered/SizeTieredCompactionRecoverTask.java
##########
@@ -94,93 +99,78 @@ 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;
-        }
-        File resourceFile = new File(targetFile.getPath() + ".resource");
 
-        RestorableTsFileIOWriter writer = new 
RestorableTsFileIOWriter(targetFile, false);
-        writer.close();
-        if (writer.hasCrashed()) {
-          LOGGER.info(
-              "{}-{} [Compaction][Recover] target file {} crash, start to 
delete it",
-              logicalStorageGroupName,
-              virtualStorageGroup,
-              targetFile);
-          // the target tsfile is crashed, it is not completed
-          if (!targetFile.delete()) {
-            LOGGER.error(
-                "{}-{} [Compaction][Recover] fail to delete target file {}, 
this may cause data incorrectness",
-                logicalStorageGroupName,
-                virtualStorageGroup,
-                targetFile);
+        // check is all source files existed
+        boolean isAllSourcesFileExisted = true;
+        for (TsFileIdentifier sourceFileIdentifier : sourceFileIdentifiers) {
+          File sourceFile = sourceFileIdentifier.getFileFromDataDirs();
+          if (sourceFile == null) {
+            isAllSourcesFileExisted = false;
+            break;
           }
-          if (resourceFile.exists() && !resourceFile.delete()) {
-            LOGGER.error(
-                "{}-{} [Compaction][Recover] fail to delete target file {}, 
this may cause data incorrectness",
-                logicalStorageGroupName,
-                virtualStorageGroup,
-                resourceFile);
+        }
+
+        if (isAllSourcesFileExisted) {
+          // xxx.target
+          File tmpTargetFile = targetFileIdentifier.getFileFromDataDirs();
+          // xxx.tsfile
+          File targetFile =
+              getFileFromDataDirs(
+                  targetFileIdentifier
+                      .getFilePath()
+                      .replace(
+                          IoTDBConstant.COMPACTION_TMP_FILE_SUFFIX, 
TsFileConstant.TSFILE_SUFFIX));
+          TsFileResource targetResource;
+          if (tmpTargetFile != null) {
+            targetResource = new TsFileResource(tmpTargetFile);
+          } else {
+            targetResource = new TsFileResource(targetFile);
           }
-        } else {
-          // the target tsfile is completed
-          LOGGER.info(
-              "{}-{} [Compaction][Recover] target file {} is completed, delete 
source files {}",
-              logicalStorageGroupName,
-              virtualStorageGroup,
-              targetFile,
-              sourceFileIdentifiers);
-          TsFileResource targetResource = new TsFileResource(targetFile);
-          List<TsFileResource> sourceTsFileResources = new ArrayList<>();
+          List<TsFileResource> sourceResources = new ArrayList<>();
           for (TsFileIdentifier sourceFileIdentifier : sourceFileIdentifiers) {
-            File sourceFile = sourceFileIdentifier.getFileFromDataDirs();
-            if (sourceFile != null) {
-              sourceTsFileResources.add(new TsFileResource(sourceFile));
-            }
+            sourceResources.add(new 
TsFileResource(sourceFileIdentifier.getFileFromDataDirs()));
           }
-          ModificationFile modificationFileForTargetFile =
-              ModificationFile.getNormalMods(targetResource);
-          if (!modificationFileForTargetFile.exists()) {
-            InnerSpaceCompactionUtils.combineModsInCompaction(
-                sourceTsFileResources, targetResource);
-          }
-
-          InnerSpaceCompactionUtils.deleteTsFilesInDisk(
-              sourceTsFileResources, fullStorageGroupName);
-          InnerSpaceCompactionUtils.deleteModificationForSourceFile(
-              sourceTsFileResources, logicalStorageGroupName + "-" + 
virtualStorageGroup);
+          handleSuccess =
+              
InnerSpaceCompactionExceptionHandler.handleWhenAllSourceFilesExist(
+                  fullStorageGroupName, targetResource, sourceResources);
+          //  handleWithAllSourceFilesExist(targetFileIdentifier, 
sourceFileIdentifiers);

Review comment:
       ```suggestion
   ```




-- 
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]


Reply via email to