You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@accumulo.apache.org by dl...@apache.org on 2023/05/31 14:17:40 UTC

[accumulo] branch elasticity updated: Removed SplitScanner, moved into TabletGroupWatcher (#3439)

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

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


The following commit(s) were added to refs/heads/elasticity by this push:
     new 9cd9fa8921 Removed SplitScanner, moved into TabletGroupWatcher (#3439)
9cd9fa8921 is described below

commit 9cd9fa89211eca0aecdc97a74abf14a51eefe489
Author: Dave Marion <dl...@apache.org>
AuthorDate: Wed May 31 10:17:34 2023 -0400

    Removed SplitScanner, moved into TabletGroupWatcher (#3439)
---
 .../manager/state/TabletManagementIterator.java    | 27 +++---
 .../java/org/apache/accumulo/manager/Manager.java  |  2 +-
 .../accumulo/manager/TabletGroupWatcher.java       | 18 +++-
 .../accumulo/manager/split/SplitScanner.java       | 96 ----------------------
 .../apache/accumulo/manager/split/Splitter.java    | 44 +++-------
 .../accumulo/manager/tableOps/split/PreSplit.java  |  5 +-
 .../accumulo/manager/split/SplitterTest.java       | 47 +++++++----
 .../org/apache/accumulo/test/SplitRecoveryIT.java  |  2 +
 .../test/compaction/SplitCancelsMajCIT.java        |  3 +
 .../apache/accumulo/test/functional/SplitIT.java   |  1 -
 .../accumulo/test/functional/SplitRecoveryIT.java  |  2 +
 11 files changed, 85 insertions(+), 162 deletions(-)

diff --git a/server/base/src/main/java/org/apache/accumulo/server/manager/state/TabletManagementIterator.java b/server/base/src/main/java/org/apache/accumulo/server/manager/state/TabletManagementIterator.java
index 0556e68726..814c4ee224 100644
--- a/server/base/src/main/java/org/apache/accumulo/server/manager/state/TabletManagementIterator.java
+++ b/server/base/src/main/java/org/apache/accumulo/server/manager/state/TabletManagementIterator.java
@@ -30,7 +30,6 @@ import java.util.Map;
 import java.util.Map.Entry;
 import java.util.Set;
 import java.util.SortedMap;
-import java.util.stream.Collectors;
 
 import org.apache.accumulo.core.client.IteratorSetting;
 import org.apache.accumulo.core.client.ScannerBase;
@@ -53,6 +52,7 @@ import org.apache.accumulo.core.metadata.TabletState;
 import org.apache.accumulo.core.metadata.schema.DataFileValue;
 import org.apache.accumulo.core.metadata.schema.MetadataSchema.TabletsSection.ChoppedColumnFamily;
 import org.apache.accumulo.core.metadata.schema.MetadataSchema.TabletsSection.CurrentLocationColumnFamily;
+import org.apache.accumulo.core.metadata.schema.MetadataSchema.TabletsSection.DataFileColumnFamily;
 import org.apache.accumulo.core.metadata.schema.MetadataSchema.TabletsSection.FutureLocationColumnFamily;
 import org.apache.accumulo.core.metadata.schema.MetadataSchema.TabletsSection.HostingColumnFamily;
 import org.apache.accumulo.core.metadata.schema.MetadataSchema.TabletsSection.LastLocationColumnFamily;
@@ -214,8 +214,12 @@ public class TabletManagementIterator extends SkippingIterator {
 
   private static boolean shouldReturnDueToSplit(final TabletMetadata tm,
       final long splitThreshold) {
-    return tm.getFilesMap().values().stream().map(DataFileValue::getSize)
-        .collect(Collectors.summarizingLong(Long::longValue)).getSum() > splitThreshold;
+    final long sumOfFileSizes =
+        tm.getFilesMap().values().stream().mapToLong(DataFileValue::getSize).sum();
+    final boolean shouldSplit = sumOfFileSizes > splitThreshold;
+    LOG.debug("{} should split? sum: {}, threshold: {}, result: {}", tm.getExtent(), sumOfFileSizes,
+        splitThreshold, shouldSplit);
+    return shouldSplit;
   }
 
   private boolean shouldReturnDueToLocation(final TabletMetadata tm,
@@ -269,6 +273,7 @@ public class TabletManagementIterator extends SkippingIterator {
     scanner.fetchColumnFamily(LogColumnFamily.NAME);
     scanner.fetchColumnFamily(ChoppedColumnFamily.NAME);
     scanner.fetchColumnFamily(HostingColumnFamily.NAME);
+    scanner.fetchColumnFamily(DataFileColumnFamily.NAME);
     ServerColumnFamily.OPID_COLUMN.fetch(scanner);
     scanner.addScanIterator(new IteratorSetting(1000, "wholeRows", WholeRowIterator.class));
     IteratorSetting tabletChange =
@@ -405,14 +410,16 @@ public class TabletManagementIterator extends SkippingIterator {
       reasonsToReturnThisTablet.add(ManagementAction.NEEDS_LOCATION_UPDATE);
     }
 
-    final long splitThreshold =
-        ConfigurationTypeHelper.getFixedMemoryAsBytes(this.env.getPluginEnv()
-            .getConfiguration(tm.getTableId()).get(Property.TABLE_SPLIT_THRESHOLD.getKey()));
-    if (shouldReturnDueToSplit(tm, splitThreshold)) {
-      reasonsToReturnThisTablet.add(ManagementAction.NEEDS_SPLITTING);
-    }
+    if (tm.getOperationId() == null) {
+      final long splitThreshold =
+          ConfigurationTypeHelper.getFixedMemoryAsBytes(this.env.getPluginEnv()
+              .getConfiguration(tm.getTableId()).get(Property.TABLE_SPLIT_THRESHOLD.getKey()));
+      if (shouldReturnDueToSplit(tm, splitThreshold)) {
+        reasonsToReturnThisTablet.add(ManagementAction.NEEDS_SPLITTING);
+      }
 
-    // TODO: Add compaction logic
+      // TODO: Add compaction logic
+    }
 
   }
 }
diff --git a/server/manager/src/main/java/org/apache/accumulo/manager/Manager.java b/server/manager/src/main/java/org/apache/accumulo/manager/Manager.java
index 401d73d91d..534bf9cc17 100644
--- a/server/manager/src/main/java/org/apache/accumulo/manager/Manager.java
+++ b/server/manager/src/main/java/org/apache/accumulo/manager/Manager.java
@@ -1332,7 +1332,7 @@ public class Manager extends AbstractServer
       throw new IllegalStateException("Exception updating manager lock", e);
     }
 
-    this.splitter = new Splitter(context, DataLevel.USER, this);
+    this.splitter = new Splitter(context);
     this.splitter.start();
 
     while (!clientService.isServing()) {
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 2ef36c3726..44fb1ba38f 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
@@ -85,6 +85,7 @@ import org.apache.accumulo.core.tabletserver.thrift.NotServingTabletException;
 import org.apache.accumulo.core.util.TextUtil;
 import org.apache.accumulo.core.util.threads.Threads.AccumuloDaemonThread;
 import org.apache.accumulo.manager.Manager.TabletGoalState;
+import org.apache.accumulo.manager.split.SplitTask;
 import org.apache.accumulo.manager.state.MergeStats;
 import org.apache.accumulo.manager.state.TableCounts;
 import org.apache.accumulo.manager.state.TableStats;
@@ -292,7 +293,6 @@ abstract class TabletGroupWatcher extends AccumuloDaemonThread {
           stats.update(tableId, state);
           mergeStats.update(tm.getExtent(), state, tm.hasChopped(), !tm.getLogs().isEmpty());
           sendChopRequest(mergeStats.getMergeInfo(), state, tm);
-          sendSplitRequest(mergeStats.getMergeInfo(), state, tm);
 
           // Always follow through with assignments
           if (state == TabletState.ASSIGNED) {
@@ -307,6 +307,21 @@ abstract class TabletGroupWatcher extends AccumuloDaemonThread {
             }
           }
 
+          if (actions.contains(ManagementAction.NEEDS_SPLITTING)) {
+            LOG.debug("{} may need splitting.", tm.getExtent());
+            if (manager.getSplitter().isSplittable(tm)) {
+              if (manager.getSplitter().addSplitStarting(tm.getExtent())) {
+                LOG.debug("submitting tablet {} for split", tm.getExtent());
+                manager.getSplitter()
+                    .executeSplit(new SplitTask(manager.getContext(), tm, manager));
+              }
+            } else {
+              LOG.debug("{} is not splittable.", tm.getExtent());
+            }
+            // ELASITICITY_TODO: remove below
+            // sendSplitRequest(mergeStats.getMergeInfo(), state, tm);
+          }
+
           if (actions.contains(ManagementAction.NEEDS_LOCATION_UPDATE)) {
             if (goal == TabletGoalState.HOSTED) {
               if ((state != TabletState.HOSTED && !tm.getLogs().isEmpty())
@@ -561,6 +576,7 @@ abstract class TabletGroupWatcher extends AccumuloDaemonThread {
     return result;
   }
 
+  // ELASITICITY_TODO: Remove
   private void sendSplitRequest(MergeInfo info, TabletState state, TabletMetadata tm) {
     // Already split?
     if (!info.getState().equals(MergeState.SPLITTING)) {
diff --git a/server/manager/src/main/java/org/apache/accumulo/manager/split/SplitScanner.java b/server/manager/src/main/java/org/apache/accumulo/manager/split/SplitScanner.java
deleted file mode 100644
index 0d11e97944..0000000000
--- a/server/manager/src/main/java/org/apache/accumulo/manager/split/SplitScanner.java
+++ /dev/null
@@ -1,96 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   https://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.accumulo.manager.split;
-
-import org.apache.accumulo.core.conf.Property;
-import org.apache.accumulo.core.data.TableId;
-import org.apache.accumulo.core.manager.state.tables.TableState;
-import org.apache.accumulo.core.metadata.schema.Ample;
-import org.apache.accumulo.core.metadata.schema.DataFileValue;
-import org.apache.accumulo.core.metadata.schema.TabletMetadata;
-import org.apache.accumulo.core.metadata.schema.TabletMetadata.ColumnType;
-import org.apache.accumulo.manager.Manager;
-import org.apache.accumulo.server.ServerContext;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-import com.google.common.base.Preconditions;
-
-// ELASTICITY_TODO explore moving this functionality into TabletGroupWatcher (also consider the
-// compaction scan).  Could we do server side filtering to find candidates?  In addition to or
-// independently of moving code to the tablet group watcher, we could sum up files sizes on the
-// tablet server using an accumulo iterator and return on the sum.
-public class SplitScanner implements Runnable {
-
-  private static final Logger log = LoggerFactory.getLogger(SplitScanner.class);
-
-  private final Ample.DataLevel level;
-  private final ServerContext context;
-
-  private final Manager manager;
-
-  public SplitScanner(ServerContext context, Ample.DataLevel level, Manager manager) {
-    Preconditions.checkArgument(level != Ample.DataLevel.ROOT);
-    this.context = context;
-    this.level = level;
-    this.manager = manager;
-  }
-
-  @Override
-  public void run() {
-    var tablets = context.getAmple().readTablets().forLevel(level)
-        .fetch(ColumnType.FILES, ColumnType.OPID, ColumnType.PREV_ROW, ColumnType.LOCATION).build();
-
-    TableId lastTableId = null;
-    long threshold = Long.MAX_VALUE;
-
-    boolean isOnline = true;
-
-    for (TabletMetadata tablet : tablets) {
-      if (tablet.getOperationId() != null || !manager.getSplitter().shouldInspect(tablet)) {
-        log.debug("ignoring for split inspection {} {} {}", tablet.getExtent(),
-            tablet.getOperationId(), !manager.getSplitter().shouldInspect(tablet));
-        continue;
-      }
-
-      if (lastTableId == null || !lastTableId.equals(tablet.getTableId())) {
-        threshold = context.getTableConfiguration(tablet.getTableId())
-            .getAsBytes(Property.TABLE_SPLIT_THRESHOLD);
-        lastTableId = tablet.getTableId();
-
-        isOnline = context.getTableState(lastTableId) == TableState.ONLINE;
-      }
-
-      if (!isOnline) {
-        continue;
-      }
-
-      var tabletSize =
-          tablet.getFilesMap().values().stream().mapToLong(DataFileValue::getSize).sum();
-
-      if (tabletSize > threshold) {
-        if (manager.getSplitter().addSplitStarting(tablet.getExtent())) {
-          log.debug("submitting for split tablet:{} size:{} threshold:{}", tablet.getExtent(),
-              tabletSize, threshold);
-          manager.getSplitter().executeSplit(new SplitTask(context, tablet, manager));
-        }
-      }
-    }
-  }
-}
diff --git a/server/manager/src/main/java/org/apache/accumulo/manager/split/Splitter.java b/server/manager/src/main/java/org/apache/accumulo/manager/split/Splitter.java
index c41c9b6912..6fc79a4b81 100644
--- a/server/manager/src/main/java/org/apache/accumulo/manager/split/Splitter.java
+++ b/server/manager/src/main/java/org/apache/accumulo/manager/split/Splitter.java
@@ -23,8 +23,6 @@ import static java.nio.charset.StandardCharsets.UTF_8;
 import java.util.Objects;
 import java.util.Set;
 import java.util.concurrent.ExecutorService;
-import java.util.concurrent.ScheduledExecutorService;
-import java.util.concurrent.ScheduledFuture;
 import java.util.concurrent.TimeUnit;
 
 import org.apache.accumulo.core.conf.Property;
@@ -32,38 +30,24 @@ import org.apache.accumulo.core.data.TableId;
 import org.apache.accumulo.core.dataImpl.KeyExtent;
 import org.apache.accumulo.core.metadata.StoredTabletFile;
 import org.apache.accumulo.core.metadata.TabletFile;
-import org.apache.accumulo.core.metadata.schema.Ample;
 import org.apache.accumulo.core.metadata.schema.TabletMetadata;
-import org.apache.accumulo.manager.Manager;
 import org.apache.accumulo.server.ServerContext;
 import org.apache.accumulo.server.conf.TableConfiguration;
 import org.apache.accumulo.server.util.FileUtil;
 import org.apache.accumulo.server.util.FileUtil.FileInfo;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
 
 import com.github.benmanes.caffeine.cache.Cache;
 import com.github.benmanes.caffeine.cache.CacheLoader;
 import com.github.benmanes.caffeine.cache.Caffeine;
 import com.github.benmanes.caffeine.cache.LoadingCache;
 import com.github.benmanes.caffeine.cache.Weigher;
-import com.google.common.base.Preconditions;
 import com.google.common.hash.HashCode;
 import com.google.common.hash.Hashing;
 
 public class Splitter {
 
-  private static final Logger log = LoggerFactory.getLogger(Splitter.class);
-
-  private final ServerContext context;
-  private final Ample.DataLevel level;
-
   private final ExecutorService splitExecutor;
 
-  private final ScheduledExecutorService scanExecutor;
-  private final Manager manager;
-  private ScheduledFuture<?> scanFuture;
-
   Cache<KeyExtent,KeyExtent> splitsStarting;
 
   Cache<KeyExtent,HashCode> unsplittable;
@@ -112,14 +96,9 @@ public class Splitter {
     return size;
   }
 
-  public Splitter(ServerContext context, Ample.DataLevel level, Manager manager) {
-    this.context = context;
-    this.level = level;
-    this.manager = manager;
+  public Splitter(ServerContext context) {
     this.splitExecutor = context.threadPools().createExecutorService(context.getConfiguration(),
         Property.MANAGER_SPLIT_WORKER_THREADS, true);
-    this.scanExecutor =
-        context.threadPools().createScheduledExecutorService(1, "Tablet Split Scanner", true);
 
     Weigher<CacheKey,FileInfo> weigher =
         (key, info) -> key.tableId.canonical().length() + key.tabletFile.getPathStr().length()
@@ -151,17 +130,9 @@ public class Splitter {
         .maximumWeight(10_000_000L).weigher(weigher3).build();
   }
 
-  public synchronized void start() {
-    Preconditions.checkState(scanFuture == null);
-    Preconditions.checkState(!scanExecutor.isShutdown());
-    // ELASTICITY_TODO make this configurable if functionality is not moved elsewhere
-    scanFuture = scanExecutor.scheduleWithFixedDelay(new SplitScanner(context, level, manager), 1,
-        10, TimeUnit.SECONDS);
-  }
+  public synchronized void start() {}
 
   public synchronized void stop() {
-    scanFuture.cancel(true);
-    scanExecutor.shutdownNow();
     splitExecutor.shutdownNow();
   }
 
@@ -185,9 +156,10 @@ public class Splitter {
   }
 
   /**
-   * Determines if further inspection should be done on a tablet that meets the criteria for splits.
+   * If tablet has not been marked as unsplittable, or file set has changed since being marked
+   * splittable, then return true. Else false.
    */
-  public boolean shouldInspect(TabletMetadata tablet) {
+  public boolean isSplittable(TabletMetadata tablet) {
     if (splitsStarting.getIfPresent(tablet.getExtent()) != null) {
       return false;
     }
@@ -197,6 +169,10 @@ public class Splitter {
     if (hashCode != null) {
       if (hashCode.equals(caclulateFilesHash(tablet))) {
         return false;
+      } else {
+        // We know that the list of files for this tablet have changed
+        // so we can remove it from the set of unsplittable tablets.
+        unsplittable.invalidate(tablet.getExtent());
       }
     }
 
@@ -205,7 +181,7 @@ public class Splitter {
 
   /**
    * Temporarily remember that the process of splitting is starting for this tablet making
-   * {@link #shouldInspect(TabletMetadata)} return false in the future.
+   * {@link #isSplittable(TabletMetadata)} return false in the future.
    */
   public boolean addSplitStarting(KeyExtent extent) {
     Objects.requireNonNull(extent);
diff --git a/server/manager/src/main/java/org/apache/accumulo/manager/tableOps/split/PreSplit.java b/server/manager/src/main/java/org/apache/accumulo/manager/tableOps/split/PreSplit.java
index 592f552692..6b7e72298e 100644
--- a/server/manager/src/main/java/org/apache/accumulo/manager/tableOps/split/PreSplit.java
+++ b/server/manager/src/main/java/org/apache/accumulo/manager/tableOps/split/PreSplit.java
@@ -82,7 +82,7 @@ public class PreSplit extends ManagerRepo {
       Map<KeyExtent,Ample.ConditionalResult> results = tabletsMutator.process();
 
       if (results.get(splitInfo.getOriginal()).getStatus() == Status.ACCEPTED) {
-        log.trace("{} reserved {} for split", FateTxId.formatTid(tid), splitInfo.getOriginal());
+        log.debug("{} reserved {} for split", FateTxId.formatTid(tid), splitInfo.getOriginal());
         return 0;
       } else {
         var tabletMetadata = results.get(splitInfo.getOriginal()).readMetadata();
@@ -90,7 +90,8 @@ public class PreSplit extends ManagerRepo {
         // its possible the tablet no longer exists
         var optMeta = Optional.ofNullable(tabletMetadata);
 
-        log.debug("{} Failed to set operation id. extent:{} location:{} opid:{}",
+        log.debug(
+            "{} Failed to set operation id (may have location or operationId). extent:{} location:{} opid:{}",
             FateTxId.formatTid(tid), splitInfo.getOriginal(),
             optMeta.map(TabletMetadata::getLocation).orElse(null),
             optMeta.map(TabletMetadata::getOperationId).orElse(null));
diff --git a/server/manager/src/test/java/org/apache/accumulo/manager/split/SplitterTest.java b/server/manager/src/test/java/org/apache/accumulo/manager/split/SplitterTest.java
index ad49006d5d..407b5fc72b 100644
--- a/server/manager/src/test/java/org/apache/accumulo/manager/split/SplitterTest.java
+++ b/server/manager/src/test/java/org/apache/accumulo/manager/split/SplitterTest.java
@@ -22,9 +22,11 @@ import static org.easymock.EasyMock.createMock;
 import static org.easymock.EasyMock.createNiceMock;
 import static org.easymock.EasyMock.expect;
 import static org.easymock.EasyMock.replay;
+import static org.easymock.EasyMock.verify;
 import static org.junit.jupiter.api.Assertions.assertFalse;
 import static org.junit.jupiter.api.Assertions.assertTrue;
 
+import java.util.HashSet;
 import java.util.Set;
 
 import org.apache.accumulo.core.data.TableId;
@@ -39,49 +41,58 @@ import org.junit.jupiter.api.Test;
 public class SplitterTest {
 
   @Test
-  public void testShouldInspect() {
+  public void testIsSplittable() {
     ThreadPools threadPools = createNiceMock(ThreadPools.class);
     replay(threadPools);
     ServerContext context = createNiceMock(ServerContext.class);
     expect(context.threadPools()).andReturn(threadPools).anyTimes();
     replay(context);
 
-    var splitter = new Splitter(context, null, null);
+    var splitter = new Splitter(context);
 
     KeyExtent ke1 = new KeyExtent(TableId.of("1"), new Text("m"), null);
     KeyExtent ke2 = new KeyExtent(TableId.of("1"), null, new Text("m"));
 
-    Set<StoredTabletFile> files1 = Set.of(
-        new StoredTabletFile("hdfs://localhost:8020/accumulo/tables/2a/default_tablet/F0000070.rf"),
-        new StoredTabletFile(
-            "hdfs://localhost:8020/accumulo/tables/2a/default_tablet/F0000072.rf"));
+    Set<StoredTabletFile> files1 = new HashSet<>();
+    files1.add(new StoredTabletFile(
+        "hdfs://localhost:8020/accumulo/tables/2a/default_tablet/F0000070.rf"));
+    files1.add(new StoredTabletFile(
+        "hdfs://localhost:8020/accumulo/tables/2a/default_tablet/F0000072.rf"));
 
     TabletMetadata tabletMeta1 = createMock(TabletMetadata.class);
     expect(tabletMeta1.getExtent()).andReturn(ke1).anyTimes();
-    expect(tabletMeta1.getFiles()).andReturn(files1).anyTimes();
+    expect(tabletMeta1.getFiles()).andReturn(files1).times(3);
     replay(tabletMeta1);
 
     TabletMetadata tabletMeta2 = createMock(TabletMetadata.class);
     expect(tabletMeta2.getExtent()).andReturn(ke2).anyTimes();
     replay(tabletMeta2);
 
-    assertTrue(splitter.shouldInspect(tabletMeta1));
-    assertTrue(splitter.shouldInspect(tabletMeta2));
+    assertTrue(splitter.isSplittable(tabletMeta1));
+    assertTrue(splitter.isSplittable(tabletMeta2));
 
     splitter.addSplitStarting(ke1);
 
-    assertFalse(splitter.shouldInspect(tabletMeta1));
-    assertTrue(splitter.shouldInspect(tabletMeta2));
+    assertFalse(splitter.isSplittable(tabletMeta1));
+    assertTrue(splitter.isSplittable(tabletMeta2));
 
     splitter.removeSplitStarting(ke1);
 
-    assertTrue(splitter.shouldInspect(tabletMeta1));
-    assertTrue(splitter.shouldInspect(tabletMeta2));
+    assertTrue(splitter.isSplittable(tabletMeta1));
+    assertTrue(splitter.isSplittable(tabletMeta2));
 
     splitter.rememberUnsplittable(tabletMeta1);
 
-    assertFalse(splitter.shouldInspect(tabletMeta1));
-    assertTrue(splitter.shouldInspect(tabletMeta2));
+    assertFalse(splitter.isSplittable(tabletMeta1));
+    assertTrue(splitter.isSplittable(tabletMeta2));
+
+    // tabletMeta1 is currently unsplittable. Adding a file
+    // to it's file set should cause it to be removed from
+    // the unsplittable set of tablets, becoming splittable
+    // again.
+    files1.add(new StoredTabletFile(
+        "hdfs://localhost:8020/accumulo/tables/2a/default_tablet/F0000071.rf"));
+    assertTrue(splitter.isSplittable(tabletMeta1));
 
     // when a tablets files change it should become a candidate for inspection
     Set<StoredTabletFile> files2 = Set.of(
@@ -94,8 +105,10 @@ public class SplitterTest {
     expect(tabletMeta3.getFiles()).andReturn(files2).anyTimes();
     replay(tabletMeta3);
 
-    assertTrue(splitter.shouldInspect(tabletMeta3));
-    assertTrue(splitter.shouldInspect(tabletMeta2));
+    assertTrue(splitter.isSplittable(tabletMeta3));
+    assertTrue(splitter.isSplittable(tabletMeta2));
+
+    verify(threadPools, context, tabletMeta1, tabletMeta2, tabletMeta3);
   }
 
 }
diff --git a/test/src/main/java/org/apache/accumulo/test/SplitRecoveryIT.java b/test/src/main/java/org/apache/accumulo/test/SplitRecoveryIT.java
index e169ff62b2..991e146410 100644
--- a/test/src/main/java/org/apache/accumulo/test/SplitRecoveryIT.java
+++ b/test/src/main/java/org/apache/accumulo/test/SplitRecoveryIT.java
@@ -47,6 +47,8 @@ import org.junit.jupiter.api.Test;
 
 public class SplitRecoveryIT extends AccumuloClusterHarness {
 
+  // ELASTICITY_TODO: Confirm still works as intended
+
   @Override
   protected Duration defaultTimeout() {
     return Duration.ofMinutes(1);
diff --git a/test/src/main/java/org/apache/accumulo/test/compaction/SplitCancelsMajCIT.java b/test/src/main/java/org/apache/accumulo/test/compaction/SplitCancelsMajCIT.java
index 63c00cbf7c..640b52499e 100644
--- a/test/src/main/java/org/apache/accumulo/test/compaction/SplitCancelsMajCIT.java
+++ b/test/src/main/java/org/apache/accumulo/test/compaction/SplitCancelsMajCIT.java
@@ -44,6 +44,9 @@ import org.junit.jupiter.api.Test;
 // ACCUMULO-2862
 public class SplitCancelsMajCIT extends SharedMiniClusterBase {
 
+  // ELASTICITY_TODO: Need to check new split code to ensure that it
+  // still cancels running MAJC.
+
   @Override
   protected Duration defaultTimeout() {
     return Duration.ofMinutes(2);
diff --git a/test/src/main/java/org/apache/accumulo/test/functional/SplitIT.java b/test/src/main/java/org/apache/accumulo/test/functional/SplitIT.java
index 33a93f40b6..8678ff5f49 100644
--- a/test/src/main/java/org/apache/accumulo/test/functional/SplitIT.java
+++ b/test/src/main/java/org/apache/accumulo/test/functional/SplitIT.java
@@ -19,7 +19,6 @@
 package org.apache.accumulo.test.functional;
 
 import static java.util.concurrent.TimeUnit.SECONDS;
-import static org.apache.accumulo.test.VerifyIngest.verifyIngest;
 import static org.junit.jupiter.api.Assertions.assertEquals;
 import static org.junit.jupiter.api.Assertions.assertThrows;
 import static org.junit.jupiter.api.Assertions.assertTrue;
diff --git a/test/src/main/java/org/apache/accumulo/test/functional/SplitRecoveryIT.java b/test/src/main/java/org/apache/accumulo/test/functional/SplitRecoveryIT.java
index fb0a99d260..4064759c83 100644
--- a/test/src/main/java/org/apache/accumulo/test/functional/SplitRecoveryIT.java
+++ b/test/src/main/java/org/apache/accumulo/test/functional/SplitRecoveryIT.java
@@ -83,6 +83,8 @@ import edu.umd.cs.findbugs.annotations.SuppressFBWarnings;
 
 public class SplitRecoveryIT extends ConfigurableMacBase {
 
+  // ELASTICITY_TODO: Confirm still works as intended
+
   @Override
   protected Duration defaultTimeout() {
     return Duration.ofMinutes(1);