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 <[email protected]>
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)