From 0a3729211359eeb1e8249d218a098fdf5c8938f3 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 b68dcf46e9eacbce3325f70163756f91b0447658) --- .../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 f2fa4ac6691..f54c30c6e0e 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 @@ -63,6 +63,13 @@ public abstract class CleanerChore extends Schedu */ public static final String CHORE_POOL_SIZE = "hbase.cleaner.scan.dir.concurrent.size"; static final String DEFAULT_CHORE_POOL_SIZE = "0.25"; + /** + * 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; @@ -72,6 +79,7 @@ public abstract class CleanerChore extends Schedu protected final Map params; private final AtomicBoolean enabled = new AtomicBoolean(true); protected List cleanersChain; + private boolean sortDirectories; public CleanerChore(String name, final int sleepPeriod, final Stoppable s, Configuration conf, FileSystem fs, Path oldFileDir, String confKey, DirScanPool pool) { @@ -99,6 +107,8 @@ public abstract class CleanerChore extends Schedu this.oldFileDir = oldFileDir; this.conf = conf; this.params = params; + sortDirectories = conf.getBoolean(LOG_CLEANER_CHORE_DIRECTORY_SORTING, + DEFAULT_LOG_CLEANER_CHORE_DIRECTORY_SORTING); initCleanerChain(confKey); } @@ -406,7 +416,9 @@ public abstract class CleanerChore extends Schedu // Step.3: Start to traverse and delete the sub-directories. List> futures = new ArrayList<>(); if (!subDirs.isEmpty()) { - sortByConsumedSpace(subDirs); + if (sortDirectories) { + sortByConsumedSpace(subDirs); + } // Submit the request of sub-directory deletion. subDirs.forEach(subDir -> { CompletableFuture subFuture = new CompletableFuture<>();