This is an automated email from the ASF dual-hosted git repository.

cshannon pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/accumulo.git


The following commit(s) were added to refs/heads/main by this push:
     new a4b658a4a1 Prefer splitting over compacting (#5105)
a4b658a4a1 is described below

commit a4b658a4a1129c85462d7c638e11bbad173b167f
Author: Christopher L. Shannon <cshan...@apache.org>
AuthorDate: Sun Nov 24 16:21:30 2024 -0500

    Prefer splitting over compacting (#5105)
    
    If a tablet needs to both split and compact it is better to split first
    and compact after splitting so that the compaction work can be divided
    up better
    
    This close #5101
---
 .../apache/accumulo/manager/TabletGroupWatcher.java    | 18 +++++++++++++-----
 1 file changed, 13 insertions(+), 5 deletions(-)

diff --git 
a/server/manager/src/main/java/org/apache/accumulo/manager/TabletGroupWatcher.java
 
b/server/manager/src/main/java/org/apache/accumulo/manager/TabletGroupWatcher.java
index 72a4669183..6496f500e9 100644
--- 
a/server/manager/src/main/java/org/apache/accumulo/manager/TabletGroupWatcher.java
+++ 
b/server/manager/src/main/java/org/apache/accumulo/manager/TabletGroupWatcher.java
@@ -606,16 +606,24 @@ abstract class TabletGroupWatcher extends 
AccumuloDaemonThread {
             state, goal, actions, tm.getLogs().size());
       }
 
-      if (actions.contains(ManagementAction.NEEDS_SPLITTING)) {
+      final boolean needsSplit = 
actions.contains(ManagementAction.NEEDS_SPLITTING);
+      if (needsSplit) {
         LOG.debug("{} may need splitting.", tm.getExtent());
         manager.getSplitter().initiateSplit(new SeedSplitTask(manager, 
tm.getExtent()));
       }
 
       if (actions.contains(ManagementAction.NEEDS_COMPACTING) && 
compactionGenerator != null) {
-        var jobs = compactionGenerator.generateJobs(tm,
-            TabletManagementIterator.determineCompactionKinds(actions));
-        LOG.debug("{} may need compacting adding {} jobs", tm.getExtent(), 
jobs.size());
-        manager.getCompactionCoordinator().addJobs(tm, jobs);
+        // Check if tablet needs splitting, priority should be giving to 
splits over
+        // compactions because it's best to compact after a split
+        if (!needsSplit) {
+          var jobs = compactionGenerator.generateJobs(tm,
+              TabletManagementIterator.determineCompactionKinds(actions));
+          LOG.debug("{} may need compacting adding {} jobs", tm.getExtent(), 
jobs.size());
+          manager.getCompactionCoordinator().addJobs(tm, jobs);
+        } else {
+          LOG.trace("skipping compaction job generation because {} may need 
splitting.",
+              tm.getExtent());
+        }
       }
 
       if (actions.contains(ManagementAction.NEEDS_LOCATION_UPDATE)

Reply via email to