shuwenwei opened a new pull request, #11855:
URL: https://github.com/apache/iotdb/pull/11855

   ## Description
   Fix compaction log is not deleted after exception.
   ```
     protected boolean doCompaction() {
       long startTime = System.currentTimeMillis();
       // get resource of target file
       recoverMemoryStatus = true;
       LOGGER.info(
           "{}-{} [Compaction] {} InnerSpaceCompaction task starts with {} 
files, "
               + "total file size is {} MB, memory cost is {} MB",
           storageGroupName,
           dataRegionId,
           sequence ? "Sequence" : "Unsequence",
           selectedTsFileResourceList.size(),
           selectedFileSize / 1024 / 1024,
           memoryCost == 0 ? 0 : (double) memoryCost / 1024 / 1024);
       boolean isSuccess = true;
   
       try {
         prepare();
         try (SimpleCompactionLogger compactionLogger = new 
SimpleCompactionLogger(logFile)) {
           // Here is tmpTargetFile, which is xxx.target
           targetTsFileList = new 
ArrayList<>(Collections.singletonList(targetTsFileResource));
           compactionLogger.logSourceFiles(selectedTsFileResourceList);
           compactionLogger.logTargetFile(targetTsFileResource);
           compactionLogger.force();
           LOGGER.info(
               "{}-{} [Compaction] compaction with {}",
               storageGroupName,
               dataRegionId,
               selectedTsFileResourceList);
   
           // carry out the compaction
           performer.setSourceFiles(selectedTsFileResourceList);
           // As elements in targetFiles may be removed in 
ReadPointCompactionPerformer, we should use
           // a
           // mutable list instead of Collections.singletonList()
           performer.setTargetFiles(targetTsFileList);
           performer.setSummary(summary);
           performer.perform();
   
           CompactionUtils.updateProgressIndex(
               targetTsFileList, selectedTsFileResourceList, 
Collections.emptyList());
           CompactionUtils.moveTargetFile(
               targetTsFileList, true, storageGroupName + "-" + dataRegionId);
   
           LOGGER.info(
               "{}-{} [InnerSpaceCompactionTask] start to rename mods file",
               storageGroupName,
               dataRegionId);
           CompactionUtils.combineModsInInnerCompaction(
               selectedTsFileResourceList, targetTsFileResource);
   
           if (Thread.currentThread().isInterrupted() || summary.isCancel()) {
             throw new InterruptedException(
                 String.format("%s-%s [Compaction] abort", storageGroupName, 
dataRegionId));
           }
   
           validateCompactionResult(
               sequence ? selectedTsFileResourceList : Collections.emptyList(),
               sequence ? Collections.emptyList() : selectedTsFileResourceList,
               targetTsFileList);
   
           // replace the old files with new file, the new is in same position 
as the old
           tsFileManager.replace(
               sequence ? selectedTsFileResourceList : Collections.emptyList(),
               sequence ? Collections.emptyList() : selectedTsFileResourceList,
               targetTsFileList,
               timePartition,
               sequence);
   
           if (targetTsFileResource.isDeleted()) {
             compactionLogger.logEmptyTargetFile(targetTsFileResource);
             isTargetTsFileEmpty = true;
             compactionLogger.force();
           }
   
           LOGGER.info(
               "{}-{} [Compaction] Compacted target files, try to get the write 
lock of source files",
               storageGroupName,
               dataRegionId);
           // release the read lock of all source files, and get the write lock 
of them to delete them
           for (int i = 0; i < selectedTsFileResourceList.size(); ++i) {
             selectedTsFileResourceList.get(i).writeLock();
             isHoldingWriteLock[i] = true;
           }
   
           if (targetTsFileResource.getTsFile().exists()
               && targetTsFileResource.getTsFile().length()
                   < TSFileConfig.MAGIC_STRING.getBytes().length * 2L + 
Byte.BYTES) {
             // the file size is smaller than magic string and version number
             throw new TsFileNotCompleteException(
                 String.format(
                     "target file %s is smaller than magic string and version 
number size",
                     targetTsFileResource));
           }
   
           LOGGER.info(
               "{}-{} [Compaction] compaction finish, start to delete old 
files",
               storageGroupName,
               dataRegionId);
           CompactionUtils.deleteSourceTsFileAndUpdateFileMetrics(
               selectedTsFileResourceList, sequence);
           CompactionUtils.deleteModificationForSourceFile(
               selectedTsFileResourceList, storageGroupName + "-" + 
dataRegionId);
   
           // inner space compaction task has only one target file
           if (!targetTsFileResource.isDeleted()) {
             FileMetrics.getInstance()
                 .addTsFile(
                     targetTsFileResource.getDatabaseName(),
                     targetTsFileResource.getDataRegionId(),
                     targetTsFileResource.getTsFile().length(),
                     sequence,
                     targetTsFileResource.getTsFile().getName());
   
             // set target resource to CLOSED, so that it can be selected to 
compact
             targetTsFileResource.setStatus(TsFileResourceStatus.NORMAL);
           } else {
             // target resource is empty after compaction, then delete it
             targetTsFileResource.remove();
           }
           CompactionMetrics.getInstance().recordSummaryInfo(summary);
   
           double costTime = (System.currentTimeMillis() - startTime) / 1000.0d;
           LOGGER.info(
               "{}-{} [Compaction] {} InnerSpaceCompaction task finishes 
successfully, "
                   + "target file is {},"
                   + "time cost is {} s, "
                   + "compaction speed is {} MB/s, {}",
               storageGroupName,
               dataRegionId,
               sequence ? "Sequence" : "Unsequence",
               targetTsFileResource.getTsFile().getName(),
               String.format("%.2f", costTime),
               String.format("%.2f", selectedFileSize / 1024.0d / 1024.0d / 
costTime),
               summary);
         }
         Files.deleteIfExists(logFile.toPath());
       } catch (Exception e) {
         isSuccess = false;
         printLogWhenException(LOGGER, e);
         recover();
       } finally {
         releaseAllLocks();
       }
       return isSuccess;
     }
   ```
   The log file is not deleted if an exception occured in try block.


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