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)