kishendas commented on a change in pull request #1583: URL: https://github.com/apache/hive/pull/1583#discussion_r509643679
########## File path: ql/src/java/org/apache/hadoop/hive/ql/txn/compactor/Cleaner.java ########## @@ -244,7 +249,32 @@ private void removeFiles(String location, ValidWriteIdList writeIdList, Compacti obsoleteDirs.addAll(dir.getAbortedDirectories()); List<Path> filesToDelete = new ArrayList<>(obsoleteDirs.size()); StringBuilder extraDebugInfo = new StringBuilder("["); + boolean delayedCleanupEnabled = conf.getBoolVar(HiveConf.ConfVars.HIVE_COMPACTOR_DELAYED_CLEANUP_ENABLED); + for (Path stat : obsoleteDirs) { + if (delayedCleanupEnabled) { + String filename = stat.toString(); + if (filename.startsWith(AcidUtils.BASE_PREFIX)) { + long writeId = AcidUtils.ParsedBase.parseBase(stat).getWriteId(); + if (ci.type == CompactionType.MINOR) { + LOG.info("Skipping base dir " + stat + " as this cleanup is for minor compaction" + + ", compaction id " + ci.id); + continue; + } else if (writeId > writeIdList.getHighWatermark()) { + LOG.info("Skipping base dir " + stat + " deletion as WriteId of this base dir is" + + " greater than highWaterMark for compaction id " + ci.id); + continue; + } + } + else if (filename.startsWith(AcidUtils.DELTA_PREFIX) || filename.startsWith(AcidUtils.DELETE_DELTA_PREFIX)) { + AcidUtils.ParsedDelta delta = AcidUtils.parsedDelta(stat, fs); + if (delta.getMaxWriteId() > writeIdList.getHighWatermark()) { Review comment: Please add relevant comments in the code, wherever its not very obvious. ########## File path: ql/src/java/org/apache/hadoop/hive/ql/txn/compactor/Cleaner.java ########## @@ -244,7 +249,32 @@ private void removeFiles(String location, ValidWriteIdList writeIdList, Compacti obsoleteDirs.addAll(dir.getAbortedDirectories()); List<Path> filesToDelete = new ArrayList<>(obsoleteDirs.size()); StringBuilder extraDebugInfo = new StringBuilder("["); + boolean delayedCleanupEnabled = conf.getBoolVar(HiveConf.ConfVars.HIVE_COMPACTOR_DELAYED_CLEANUP_ENABLED); + for (Path stat : obsoleteDirs) { + if (delayedCleanupEnabled) { + String filename = stat.toString(); + if (filename.startsWith(AcidUtils.BASE_PREFIX)) { + long writeId = AcidUtils.ParsedBase.parseBase(stat).getWriteId(); + if (ci.type == CompactionType.MINOR) { + LOG.info("Skipping base dir " + stat + " as this cleanup is for minor compaction" + + ", compaction id " + ci.id); + continue; + } else if (writeId > writeIdList.getHighWatermark()) { + LOG.info("Skipping base dir " + stat + " deletion as WriteId of this base dir is" + + " greater than highWaterMark for compaction id " + ci.id); + continue; + } + } + else if (filename.startsWith(AcidUtils.DELTA_PREFIX) || filename.startsWith(AcidUtils.DELETE_DELTA_PREFIX)) { + AcidUtils.ParsedDelta delta = AcidUtils.parsedDelta(stat, fs); Review comment: It would be helpful to extract this logic to a separate method. ########## File path: common/src/java/org/apache/hadoop/hive/conf/HiveConf.java ########## @@ -3058,6 +3058,11 @@ private static void populateLlapDaemonVarsSet(Set<String> llapDaemonVarsSetLocal HIVE_COMPACTOR_CLEANER_RUN_INTERVAL("hive.compactor.cleaner.run.interval", "5000ms", new TimeValidator(TimeUnit.MILLISECONDS), "Time between runs of the cleaner thread"), + HIVE_COMPACTOR_DELAYED_CLEANUP_ENABLED("hive.compactor.delayed.cleanup.enabled", false, + "When enabled, cleanup of obsolete files/dirs after compaction can be delayed. This delay \n" + + " can be configured by hive configuration hive.compactor.cleaner.retention.time.seconds"), + HIVE_COMPACTOR_CLEANER_RETENTION_TIME_SECONDS("hive.compactor.cleaner.retention.time.seconds", "300s", Review comment: It might be better to change the name to "HIVE_COMPACTOR_CLEANER_RETENTION_TIME", since the value would indicate whether it's in seconds or milliseconds. ---------------------------------------------------------------- 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. For queries about this service, please contact Infrastructure at: us...@infra.apache.org --------------------------------------------------------------------- To unsubscribe, e-mail: gitbox-unsubscr...@hive.apache.org For additional commands, e-mail: gitbox-h...@hive.apache.org