From b68dcf46e9eacbce3325f70163756f91b0447658 Mon Sep 17 00:00:00 2001 From: Peter Somogyi Date: Fri, 25 Nov 2022 15:31:56 +0100 Subject: [PATCH] HBASE-27506 Optionally disable sorting directories by size in CleanerChore (#4896) Signed-off-by: Wellington Chevreuil (cherry picked from commit 1ddb5bb43cfe4f543710a84884a5df20d02ff0a8) --- .../hadoop/hbase/master/cleaner/CleanerChore.java | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/hbase-server/src/main/java/org/apache/hadoop/hbase/master/cleaner/CleanerChore.java b/hbase-server/src/main/java/org/apache/hadoop/hbase/master/cleaner/CleanerChore.java index 71fe53815496..83ead85eaaf6 100644 --- a/hbase-server/src/main/java/org/apache/hadoop/hbase/master/cleaner/CleanerChore.java +++ b/hbase-server/src/main/java/org/apache/hadoop/hbase/master/cleaner/CleanerChore.java @@ -71,6 +71,13 @@ public abstract class CleanerChore extends Schedu */ public static final String LOG_CLEANER_CHORE_SIZE = "hbase.log.cleaner.scan.dir.concurrent.size"; static final String DEFAULT_LOG_CLEANER_CHORE_POOL_SIZE = "1"; + /** + * Enable the CleanerChore to sort the subdirectories by consumed space and start the cleaning + * with the largest subdirectory. Enabled by default. + */ + public static final String LOG_CLEANER_CHORE_DIRECTORY_SORTING = + "hbase.cleaner.directory.sorting"; + static final boolean DEFAULT_LOG_CLEANER_CHORE_DIRECTORY_SORTING = true; private final DirScanPool pool; @@ -81,6 +88,7 @@ public abstract class CleanerChore extends Schedu private final AtomicBoolean enabled = new AtomicBoolean(true); protected List cleanersChain; protected List excludeDirs; + private boolean sortDirectories; public CleanerChore(String name, final int sleepPeriod, final Stoppable s, Configuration conf, FileSystem fs, Path oldFileDir, String confKey, DirScanPool pool) { @@ -122,6 +130,8 @@ public CleanerChore(String name, final int sleepPeriod, final Stoppable s, Confi if (excludeDirs != null) { LOG.info("Cleaner {} excludes sub dirs: {}", name, excludeDirs); } + sortDirectories = conf.getBoolean(LOG_CLEANER_CHORE_DIRECTORY_SORTING, + DEFAULT_LOG_CLEANER_CHORE_DIRECTORY_SORTING); initCleanerChain(confKey); } @@ -429,7 +439,9 @@ private void traverseAndDelete(Path dir, boolean root, CompletableFuture> futures = new ArrayList<>(); if (!subDirs.isEmpty()) { - sortByConsumedSpace(subDirs); + if (sortDirectories) { + sortByConsumedSpace(subDirs); + } // Submit the request of sub-directory deletion. subDirs.forEach(subDir -> { if (!shouldExclude(subDir)) {