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

ctubbsii 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 2ec4b49387 Move static location cache methods to ClientContext (#5421)
2ec4b49387 is described below

commit 2ec4b49387ac878834f8d198762f5596fab8f08c
Author: Christopher Tubbs <ctubb...@apache.org>
AuthorDate: Wed Mar 26 16:59:58 2025 -0400

    Move static location cache methods to ClientContext (#5421)
    
    Move static synchronized methods from ClientTabletCache into the
    ClientContext and remove unneeded synchronization.
---
 .../accumulo/core/clientImpl/ClientContext.java    | 52 ++++++++++++++++++++--
 .../core/clientImpl/ClientTabletCache.java         | 38 ++--------------
 .../core/clientImpl/SyncingClientTabletCache.java  |  2 +-
 .../core/clientImpl/TableOperationsImpl.java       |  9 ++--
 .../accumulo/core/clientImpl/ThriftScanner.java    |  7 ++-
 .../mapreduce/lib/InputConfigurator.java           |  2 +-
 .../manager/state/TabletManagementScanner.java     |  2 +-
 .../org/apache/accumulo/tserver/TabletServer.java  |  4 +-
 .../apache/accumulo/test/BatchWriterIterator.java  |  3 +-
 .../test/functional/ManagerAssignmentIT.java       | 29 ++++++------
 .../test/functional/OnDemandTabletUnloadingIT.java |  5 +--
 .../functional/TabletResourceGroupBalanceIT.java   |  4 +-
 12 files changed, 83 insertions(+), 74 deletions(-)

diff --git 
a/core/src/main/java/org/apache/accumulo/core/clientImpl/ClientContext.java 
b/core/src/main/java/org/apache/accumulo/core/clientImpl/ClientContext.java
index 491670ade1..6a5df1550c 100644
--- a/core/src/main/java/org/apache/accumulo/core/clientImpl/ClientContext.java
+++ b/core/src/main/java/org/apache/accumulo/core/clientImpl/ClientContext.java
@@ -31,6 +31,7 @@ import java.net.URL;
 import java.nio.file.Path;
 import java.util.Collection;
 import java.util.Collections;
+import java.util.EnumMap;
 import java.util.HashMap;
 import java.util.HashSet;
 import java.util.List;
@@ -41,6 +42,7 @@ import java.util.Properties;
 import java.util.Set;
 import java.util.UUID;
 import java.util.concurrent.Callable;
+import java.util.concurrent.ConcurrentHashMap;
 import java.util.concurrent.Future;
 import java.util.concurrent.SynchronousQueue;
 import java.util.concurrent.ThreadPoolExecutor;
@@ -88,8 +90,11 @@ import org.apache.accumulo.core.lock.ServiceLockPaths;
 import org.apache.accumulo.core.lock.ServiceLockPaths.AddressSelector;
 import org.apache.accumulo.core.lock.ServiceLockPaths.ServiceLockPath;
 import org.apache.accumulo.core.manager.state.tables.TableState;
+import org.apache.accumulo.core.metadata.AccumuloTable;
+import org.apache.accumulo.core.metadata.MetadataCachedTabletObtainer;
 import org.apache.accumulo.core.metadata.RootTable;
 import org.apache.accumulo.core.metadata.schema.Ample;
+import org.apache.accumulo.core.metadata.schema.Ample.DataLevel;
 import org.apache.accumulo.core.metadata.schema.AmpleImpl;
 import org.apache.accumulo.core.rpc.SaslConnectionParams;
 import org.apache.accumulo.core.rpc.SslConnectionParams;
@@ -135,7 +140,7 @@ public class ClientContext implements AccumuloClient {
   private ConditionalWriterConfig conditionalWriterConfig;
   private final AccumuloConfiguration accumuloConf;
   private final Configuration hadoopConf;
-  private final HashMap<TableId,ClientTabletCache> tabletCaches = new 
HashMap<>();
+  private final Map<DataLevel,ConcurrentHashMap<TableId,ClientTabletCache>> 
tabletLocationCache;
 
   // These fields are very frequently accessed (each time a connection is 
created) and expensive to
   // compute, so cache them.
@@ -229,6 +234,13 @@ public class ClientContext implements AccumuloClient {
     this.info = info;
     this.hadoopConf = info.getHadoopConf();
 
+    var tabletCache =
+        new 
EnumMap<DataLevel,ConcurrentHashMap<TableId,ClientTabletCache>>(DataLevel.class);
+    for (DataLevel level : DataLevel.values()) {
+      tabletCache.put(level, new ConcurrentHashMap<>());
+    }
+    this.tabletLocationCache = Collections.unmodifiableMap(tabletCache);
+
     this.zooSession = memoize(() -> {
       var zk =
           info.getZooKeeperSupplier(getClass().getSimpleName() + "(" + 
info.getPrincipal() + ")",
@@ -1088,9 +1100,43 @@ public class ClientContext implements AccumuloClient {
     return namespaces;
   }
 
-  public HashMap<TableId,ClientTabletCache> tabletCaches() {
+  public ClientTabletCache getTabletLocationCache(TableId tableId) {
     ensureOpen();
-    return tabletCaches;
+    return 
tabletLocationCache.get(DataLevel.of(tableId)).computeIfAbsent(tableId,
+        (TableId key) -> {
+          var lockChecker = getTServerLockChecker();
+          if (AccumuloTable.ROOT.tableId().equals(tableId)) {
+            return new RootClientTabletCache(lockChecker);
+          }
+          var mlo = new MetadataCachedTabletObtainer();
+          if (AccumuloTable.METADATA.tableId().equals(tableId)) {
+            return new ClientTabletCacheImpl(AccumuloTable.METADATA.tableId(),
+                getTabletLocationCache(AccumuloTable.ROOT.tableId()), mlo, 
lockChecker);
+          } else {
+            return new ClientTabletCacheImpl(tableId,
+                getTabletLocationCache(AccumuloTable.METADATA.tableId()), mlo, 
lockChecker);
+          }
+        });
+  }
+
+  /**
+   * Clear the currently cached tablet locations. The use of ConcurrentHashMap 
ensures this is
+   * thread-safe. However, since the ConcurrentHashMap iterator is weakly 
consistent, it does not
+   * block new locations from being cached. If new locations are added while 
this is executing, they
+   * may be immediately invalidated by this code. Multiple calls to this 
method in different threads
+   * may cause some location caches to be invalidated multiple times. That is 
okay, because cache
+   * invalidation is idempotent.
+   */
+  public void clearTabletLocationCache() {
+    tabletLocationCache.forEach((dataLevel, map) -> {
+      // use iter.remove() instead of calling clear() on the map, to prevent 
clearing entries that
+      // may not have been invalidated
+      var iter = map.values().iterator();
+      while (iter.hasNext()) {
+        iter.next().invalidate();
+        iter.remove();
+      }
+    });
   }
 
   private static Set<String> createPersistentWatcherPaths() {
diff --git 
a/core/src/main/java/org/apache/accumulo/core/clientImpl/ClientTabletCache.java 
b/core/src/main/java/org/apache/accumulo/core/clientImpl/ClientTabletCache.java
index adcd5fc618..05c018fae9 100644
--- 
a/core/src/main/java/org/apache/accumulo/core/clientImpl/ClientTabletCache.java
+++ 
b/core/src/main/java/org/apache/accumulo/core/clientImpl/ClientTabletCache.java
@@ -36,10 +36,7 @@ import 
org.apache.accumulo.core.client.TableNotFoundException;
 import org.apache.accumulo.core.client.admin.TabletAvailability;
 import org.apache.accumulo.core.data.Mutation;
 import org.apache.accumulo.core.data.Range;
-import org.apache.accumulo.core.data.TableId;
 import org.apache.accumulo.core.dataImpl.KeyExtent;
-import org.apache.accumulo.core.metadata.AccumuloTable;
-import org.apache.accumulo.core.metadata.MetadataCachedTabletObtainer;
 import org.apache.accumulo.core.util.Interner;
 import org.apache.accumulo.core.util.Timer;
 import org.apache.accumulo.core.util.UtilWaitThread;
@@ -61,6 +58,10 @@ public abstract class ClientTabletCache {
     return isValid;
   }
 
+  void invalidate() {
+    isValid = false;
+  }
+
   /**
    * Used to indicate if a user of this interface needs a tablet with a 
location. This simple enum
    * was created instead of using a boolean for code clarity.
@@ -184,41 +185,10 @@ public abstract class ClientTabletCache {
    */
   public abstract void invalidateCache(ClientContext context, String server);
 
-  public static synchronized void clearInstances(ClientContext context) {
-    final var instances = context.tabletCaches();
-    for (ClientTabletCache locator : instances.values()) {
-      locator.isValid = false;
-    }
-    instances.clear();
-  }
-
   public long getTabletHostingRequestCount() {
     return 0L;
   }
 
-  public static synchronized ClientTabletCache getInstance(ClientContext 
context, TableId tableId) {
-    final var caches = context.tabletCaches();
-    ClientTabletCache tl = caches.get(tableId);
-    if (tl == null) {
-      MetadataCachedTabletObtainer mlo = new MetadataCachedTabletObtainer();
-
-      if (AccumuloTable.ROOT.tableId().equals(tableId)) {
-        tl = new RootClientTabletCache(context.getTServerLockChecker());
-      } else if (AccumuloTable.METADATA.tableId().equals(tableId)) {
-        tl = new ClientTabletCacheImpl(AccumuloTable.METADATA.tableId(),
-            getInstance(context, AccumuloTable.ROOT.tableId()), mlo,
-            context.getTServerLockChecker());
-      } else {
-        tl = new ClientTabletCacheImpl(tableId,
-            getInstance(context, AccumuloTable.METADATA.tableId()), mlo,
-            context.getTServerLockChecker());
-      }
-      caches.put(tableId, tl);
-    }
-
-    return tl;
-  }
-
   public static class CachedTablets {
 
     private final List<CachedTablet> cachedTablets;
diff --git 
a/core/src/main/java/org/apache/accumulo/core/clientImpl/SyncingClientTabletCache.java
 
b/core/src/main/java/org/apache/accumulo/core/clientImpl/SyncingClientTabletCache.java
index cd6e707bf7..571d9704df 100644
--- 
a/core/src/main/java/org/apache/accumulo/core/clientImpl/SyncingClientTabletCache.java
+++ 
b/core/src/main/java/org/apache/accumulo/core/clientImpl/SyncingClientTabletCache.java
@@ -50,7 +50,7 @@ public class SyncingClientTabletCache extends 
ClientTabletCache {
   }
 
   public SyncingClientTabletCache(final ClientContext context, final TableId 
tableId) {
-    this(() -> ClientTabletCache.getInstance(context, tableId));
+    this(() -> context.getTabletLocationCache(tableId));
   }
 
   private ClientTabletCache syncLocator() {
diff --git 
a/core/src/main/java/org/apache/accumulo/core/clientImpl/TableOperationsImpl.java
 
b/core/src/main/java/org/apache/accumulo/core/clientImpl/TableOperationsImpl.java
index 6acf4758d2..0edf06a6a0 100644
--- 
a/core/src/main/java/org/apache/accumulo/core/clientImpl/TableOperationsImpl.java
+++ 
b/core/src/main/java/org/apache/accumulo/core/clientImpl/TableOperationsImpl.java
@@ -496,7 +496,7 @@ public class TableOperationsImpl extends 
TableOperationsHelper {
     // TODO should there be a server side check for this?
     context.requireNotOffline(tableId, tableName);
 
-    ClientTabletCache tabLocator = ClientTabletCache.getInstance(context, 
tableId);
+    ClientTabletCache tabLocator = context.getTabletLocationCache(tableId);
 
     SortedMap<Text,TabletMergeability> splitsTodo =
         Collections.synchronizedSortedMap(new TreeMap<>(splits));
@@ -1288,7 +1288,7 @@ public class TableOperationsImpl extends 
TableOperationsHelper {
     }
 
     TableId tableId = context.getTableId(tableName);
-    ClientTabletCache tl = ClientTabletCache.getInstance(context, tableId);
+    ClientTabletCache tl = context.getTabletLocationCache(tableId);
     // it's possible that the cache could contain complete, but old 
information about a tables
     // tablets... so clear it
     tl.invalidateCache();
@@ -1566,8 +1566,7 @@ public class TableOperationsImpl extends 
TableOperationsHelper {
   public void clearLocatorCache(String tableName) throws 
TableNotFoundException {
     EXISTING_TABLE_NAME.validate(tableName);
 
-    ClientTabletCache tabLocator =
-        ClientTabletCache.getInstance(context, context.getTableId(tableName));
+    ClientTabletCache tabLocator = 
context.getTabletLocationCache(context.getTableId(tableName));
     tabLocator.invalidateCache();
   }
 
@@ -1980,7 +1979,7 @@ public class TableOperationsImpl extends 
TableOperationsHelper {
       rangeList = new ArrayList<>(ranges);
     }
 
-    ClientTabletCache locator = ClientTabletCache.getInstance(context, 
tableId);
+    ClientTabletCache locator = context.getTabletLocationCache(tableId);
     locator.invalidateCache();
 
     Retry retry = 
Retry.builder().infiniteRetries().retryAfter(Duration.ofMillis(100))
diff --git 
a/core/src/main/java/org/apache/accumulo/core/clientImpl/ThriftScanner.java 
b/core/src/main/java/org/apache/accumulo/core/clientImpl/ThriftScanner.java
index b58f743d68..f67d56077e 100644
--- a/core/src/main/java/org/apache/accumulo/core/clientImpl/ThriftScanner.java
+++ b/core/src/main/java/org/apache/accumulo/core/clientImpl/ThriftScanner.java
@@ -553,7 +553,7 @@ public class ThriftScanner {
       Span child1 = TraceUtil.startSpan(ThriftScanner.class, 
"scan::locateTablet");
       try (Scope locateSpan = child1.makeCurrent()) {
 
-        loc = ClientTabletCache.getInstance(context, 
scanState.tableId).findTablet(context,
+        loc = 
context.getTabletLocationCache(scanState.tableId).findTablet(context,
             scanState.startRow, scanState.skipStartRow, hostingNeed, 
minimumHostAhead,
             scanState.range);
 
@@ -695,8 +695,7 @@ public class ThriftScanner {
           }
           lastError = error;
 
-          ClientTabletCache.getInstance(context, scanState.tableId)
-              .invalidateCache(addr.getExtent());
+          
context.getTabletLocationCache(scanState.tableId).invalidateCache(addr.getExtent());
 
           // no need to try the current scan id somewhere else
           scanState.scanID = null;
@@ -775,7 +774,7 @@ public class ThriftScanner {
                 e.getCause() != null && 
e.getCause().getClass().equals(InterruptedIOException.class)
                     && scanState.closeInitiated;
             if (!wasInterruptedAfterClose) {
-              ClientTabletCache.getInstance(context, 
scanState.tableId).invalidateCache(context,
+              
context.getTabletLocationCache(scanState.tableId).invalidateCache(context,
                   addr.serverAddress);
             }
           }
diff --git 
a/hadoop-mapreduce/src/main/java/org/apache/accumulo/hadoopImpl/mapreduce/lib/InputConfigurator.java
 
b/hadoop-mapreduce/src/main/java/org/apache/accumulo/hadoopImpl/mapreduce/lib/InputConfigurator.java
index eea2017a2c..99d1e3a3a5 100644
--- 
a/hadoop-mapreduce/src/main/java/org/apache/accumulo/hadoopImpl/mapreduce/lib/InputConfigurator.java
+++ 
b/hadoop-mapreduce/src/main/java/org/apache/accumulo/hadoopImpl/mapreduce/lib/InputConfigurator.java
@@ -717,7 +717,7 @@ public class InputConfigurator extends ConfiguratorBase {
   public static ClientTabletCache getTabletLocator(Class<?> implementingClass, 
Configuration conf,
       TableId tableId) {
     try (AccumuloClient client = createClient(implementingClass, conf)) {
-      return ClientTabletCache.getInstance((ClientContext) client, tableId);
+      return ((ClientContext) client).getTabletLocationCache(tableId);
     }
   }
 
diff --git 
a/server/base/src/main/java/org/apache/accumulo/server/manager/state/TabletManagementScanner.java
 
b/server/base/src/main/java/org/apache/accumulo/server/manager/state/TabletManagementScanner.java
index 7014211a97..3d61dcc346 100644
--- 
a/server/base/src/main/java/org/apache/accumulo/server/manager/state/TabletManagementScanner.java
+++ 
b/server/base/src/main/java/org/apache/accumulo/server/manager/state/TabletManagementScanner.java
@@ -67,7 +67,7 @@ public class TabletManagementScanner implements 
ClosableIterator<TabletManagemen
       int numLocations = 0;
       try {
         final TableId tid = context.getTableId(tableName);
-        final ClientTabletCache locator = 
ClientTabletCache.getInstance(context, tid);
+        final ClientTabletCache locator = context.getTabletLocationCache(tid);
         final Set<String> locations = new HashSet<>();
         final List<Range> failures = locator.findTablets(context, 
ALL_TABLETS_RANGE,
             (ct, r) -> ct.getTserverLocation().ifPresent(locations::add),
diff --git 
a/server/tserver/src/main/java/org/apache/accumulo/tserver/TabletServer.java 
b/server/tserver/src/main/java/org/apache/accumulo/tserver/TabletServer.java
index 93a53b83d3..d2474152a5 100644
--- a/server/tserver/src/main/java/org/apache/accumulo/tserver/TabletServer.java
+++ b/server/tserver/src/main/java/org/apache/accumulo/tserver/TabletServer.java
@@ -69,7 +69,6 @@ import org.apache.accumulo.core.cli.ConfigOpts;
 import org.apache.accumulo.core.client.Durability;
 import org.apache.accumulo.core.client.admin.servers.ServerId;
 import org.apache.accumulo.core.client.admin.servers.ServerId.Type;
-import org.apache.accumulo.core.clientImpl.ClientTabletCache;
 import org.apache.accumulo.core.clientImpl.DurabilityImpl;
 import org.apache.accumulo.core.conf.AccumuloConfiguration;
 import org.apache.accumulo.core.conf.Property;
@@ -330,8 +329,7 @@ public class TabletServer extends AbstractServer implements 
TabletHostingServer
     this.resourceManager = new TabletServerResourceManager(context, this);
 
     
watchCriticalScheduledTask(context.getScheduledExecutor().scheduleWithFixedDelay(
-        () -> ClientTabletCache.clearInstances(context), jitter(), jitter(),
-        TimeUnit.MILLISECONDS));
+        () -> context.clearTabletLocationCache(), jitter(), jitter(), 
TimeUnit.MILLISECONDS));
     walMarker = new WalStateManager(context);
 
     if (aconf.getBoolean(Property.INSTANCE_RPC_SASL_ENABLED)) {
diff --git 
a/test/src/main/java/org/apache/accumulo/test/BatchWriterIterator.java 
b/test/src/main/java/org/apache/accumulo/test/BatchWriterIterator.java
index 8948a2ee66..901dba56df 100644
--- a/test/src/main/java/org/apache/accumulo/test/BatchWriterIterator.java
+++ b/test/src/main/java/org/apache/accumulo/test/BatchWriterIterator.java
@@ -35,7 +35,6 @@ import org.apache.accumulo.core.client.TableNotFoundException;
 import org.apache.accumulo.core.client.security.tokens.AuthenticationToken;
 import org.apache.accumulo.core.clientImpl.ClientContext;
 import org.apache.accumulo.core.clientImpl.ClientInfo;
-import org.apache.accumulo.core.clientImpl.ClientTabletCache;
 import org.apache.accumulo.core.data.ByteSequence;
 import org.apache.accumulo.core.data.Key;
 import org.apache.accumulo.core.data.Mutation;
@@ -218,7 +217,7 @@ public class BatchWriterIterator extends WrappingIterator {
         if (firstWrite) {
           batchWriter.flush();
           if (clearCacheAfterFirstWrite) {
-            ClientTabletCache.clearInstances((ClientContext) accumuloClient);
+            ((ClientContext) accumuloClient).clearTabletLocationCache();
           }
           if (splitAfterFirstWrite) {
             SortedSet<Text> splits = new TreeSet<>();
diff --git 
a/test/src/main/java/org/apache/accumulo/test/functional/ManagerAssignmentIT.java
 
b/test/src/main/java/org/apache/accumulo/test/functional/ManagerAssignmentIT.java
index 13e9d77465..cd232afc71 100644
--- 
a/test/src/main/java/org/apache/accumulo/test/functional/ManagerAssignmentIT.java
+++ 
b/test/src/main/java/org/apache/accumulo/test/functional/ManagerAssignmentIT.java
@@ -57,7 +57,6 @@ import 
org.apache.accumulo.core.client.admin.NewTableConfiguration;
 import org.apache.accumulo.core.client.admin.TabletAvailability;
 import org.apache.accumulo.core.client.admin.servers.ServerId;
 import org.apache.accumulo.core.clientImpl.ClientContext;
-import org.apache.accumulo.core.clientImpl.ClientTabletCache;
 import org.apache.accumulo.core.conf.Property;
 import org.apache.accumulo.core.data.Mutation;
 import org.apache.accumulo.core.data.Range;
@@ -237,13 +236,13 @@ public class ManagerAssignmentIT extends 
SharedMiniClusterBase {
     // The initial set of tablets should be unassigned
     Wait.waitFor(() -> getTabletStats(c, tableId).isEmpty(), 60000, 50);
 
-    assertEquals(0, ClientTabletCache.getInstance((ClientContext) c, 
TableId.of(tableId))
+    assertEquals(0, ((ClientContext) 
c).getTabletLocationCache(TableId.of(tableId))
         .getTabletHostingRequestCount());
 
     // loading data will force the tablets to be hosted
     loadDataForScan(c, tableName);
 
-    assertTrue(ClientTabletCache.getInstance((ClientContext) c, 
TableId.of(tableId))
+    assertTrue(((ClientContext) c).getTabletLocationCache(TableId.of(tableId))
         .getTabletHostingRequestCount() > 0);
 
     Wait.waitFor(() -> getTabletStats(c, tableId).size() == 4, 60000, 50);
@@ -257,7 +256,7 @@ public class ManagerAssignmentIT extends 
SharedMiniClusterBase {
     c.tableOperations().online(tableName, true);
 
     Wait.waitFor(() -> getTabletStats(c, tableId).isEmpty(), 60000, 50);
-    assertEquals(0, ClientTabletCache.getInstance((ClientContext) c, 
TableId.of(tableId))
+    assertEquals(0, ((ClientContext) 
c).getTabletLocationCache(TableId.of(tableId))
         .getTabletHostingRequestCount());
 
     return tableId;
@@ -279,7 +278,7 @@ public class ManagerAssignmentIT extends 
SharedMiniClusterBase {
     List<TabletStats> stats = getTabletStats(client, tableId);
     // There should be one tablet online
     assertEquals(1, stats.size());
-    assertTrue(ClientTabletCache.getInstance((ClientContext) client, 
TableId.of(tableId))
+    assertTrue(((ClientContext) 
client).getTabletLocationCache(TableId.of(tableId))
         .getTabletHostingRequestCount() > 0);
 
   }
@@ -297,8 +296,8 @@ public class ManagerAssignmentIT extends 
SharedMiniClusterBase {
 
     List<TabletStats> stats = getTabletStats(client, tableId);
     assertEquals(3, stats.size());
-    long hostingRequestCount = ClientTabletCache
-        .getInstance((ClientContext) client, 
TableId.of(tableId)).getTabletHostingRequestCount();
+    long hostingRequestCount = ((ClientContext) 
client).getTabletLocationCache(TableId.of(tableId))
+        .getTabletHostingRequestCount();
     assertTrue(hostingRequestCount > 0);
 
     // Run another scan, the t tablet should get loaded
@@ -311,8 +310,8 @@ public class ManagerAssignmentIT extends 
SharedMiniClusterBase {
     stats = getTabletStats(client, tableId);
     assertEquals(3, stats.size());
     // No more tablets should have been brought online
-    assertEquals(hostingRequestCount, ClientTabletCache
-        .getInstance((ClientContext) client, 
TableId.of(tableId)).getTabletHostingRequestCount());
+    assertEquals(hostingRequestCount, ((ClientContext) client)
+        
.getTabletLocationCache(TableId.of(tableId)).getTabletHostingRequestCount());
 
   }
 
@@ -331,7 +330,7 @@ public class ManagerAssignmentIT extends 
SharedMiniClusterBase {
     List<TabletStats> stats = getTabletStats(client, tableId);
     // There should be one tablet online
     assertEquals(1, stats.size());
-    assertTrue(ClientTabletCache.getInstance((ClientContext) client, 
TableId.of(tableId))
+    assertTrue(((ClientContext) 
client).getTabletLocationCache(TableId.of(tableId))
         .getTabletHostingRequestCount() > 0);
 
   }
@@ -349,8 +348,8 @@ public class ManagerAssignmentIT extends 
SharedMiniClusterBase {
 
     List<TabletStats> stats = getTabletStats(client, tableId);
     assertEquals(3, stats.size());
-    long hostingRequestCount = ClientTabletCache
-        .getInstance((ClientContext) client, 
TableId.of(tableId)).getTabletHostingRequestCount();
+    long hostingRequestCount = ((ClientContext) 
client).getTabletLocationCache(TableId.of(tableId))
+        .getTabletHostingRequestCount();
     assertTrue(hostingRequestCount > 0);
 
     // Run another scan, all tablets should be loaded
@@ -362,8 +361,8 @@ public class ManagerAssignmentIT extends 
SharedMiniClusterBase {
     stats = getTabletStats(client, tableId);
     assertEquals(3, stats.size());
     // No more tablets should have been brought online
-    assertEquals(hostingRequestCount, ClientTabletCache
-        .getInstance((ClientContext) client, 
TableId.of(tableId)).getTabletHostingRequestCount());
+    assertEquals(hostingRequestCount, ((ClientContext) client)
+        
.getTabletLocationCache(TableId.of(tableId)).getTabletHostingRequestCount());
 
   }
 
@@ -520,7 +519,7 @@ public class ManagerAssignmentIT extends 
SharedMiniClusterBase {
     // could potentially send a kill -9 to the process. Shut the tablet
     // servers down in a more graceful way.
     final Map<String,Map<KeyExtent,List<Range>>> binnedRanges = new 
HashMap<>();
-    ClientTabletCache.getInstance((ClientContext) client, 
tid).binRanges((ClientContext) client,
+    ((ClientContext) 
client).getTabletLocationCache(tid).binRanges((ClientContext) client,
         Collections.singletonList(TabletsSection.getRange()), binnedRanges);
     binnedRanges.keySet().forEach((location) -> {
       HostAndPort address = HostAndPort.fromString(location);
diff --git 
a/test/src/main/java/org/apache/accumulo/test/functional/OnDemandTabletUnloadingIT.java
 
b/test/src/main/java/org/apache/accumulo/test/functional/OnDemandTabletUnloadingIT.java
index b06da7b288..71bea5fdb1 100644
--- 
a/test/src/main/java/org/apache/accumulo/test/functional/OnDemandTabletUnloadingIT.java
+++ 
b/test/src/main/java/org/apache/accumulo/test/functional/OnDemandTabletUnloadingIT.java
@@ -42,7 +42,6 @@ import org.apache.accumulo.core.client.ScannerBase;
 import org.apache.accumulo.core.client.TableNotFoundException;
 import org.apache.accumulo.core.client.admin.NewTableConfiguration;
 import org.apache.accumulo.core.clientImpl.ClientContext;
-import org.apache.accumulo.core.clientImpl.ClientTabletCache;
 import org.apache.accumulo.core.conf.Property;
 import org.apache.accumulo.core.data.Mutation;
 import org.apache.accumulo.core.data.Range;
@@ -147,7 +146,7 @@ public class OnDemandTabletUnloadingIT extends 
SharedMiniClusterBase {
       // There should be no tablets online
       List<TabletStats> stats = ManagerAssignmentIT.getTabletStats(c, tableId);
       assertEquals(0, stats.size());
-      assertEquals(0, ClientTabletCache.getInstance((ClientContext) c, 
TableId.of(tableId))
+      assertEquals(0, ((ClientContext) 
c).getTabletLocationCache(TableId.of(tableId))
           .getTabletHostingRequestCount());
       assertEquals(0, ONDEMAND_ONLINE_COUNT);
 
@@ -158,7 +157,7 @@ public class OnDemandTabletUnloadingIT extends 
SharedMiniClusterBase {
       // There should be four tablets online
       stats = ManagerAssignmentIT.getTabletStats(c, tableId);
       assertEquals(4, stats.size());
-      assertTrue(ClientTabletCache.getInstance((ClientContext) c, 
TableId.of(tableId))
+      assertTrue(((ClientContext) 
c).getTabletLocationCache(TableId.of(tableId))
           .getTabletHostingRequestCount() > 0);
       Wait.waitFor(() -> ONDEMAND_ONLINE_COUNT == 4);
 
diff --git 
a/test/src/main/java/org/apache/accumulo/test/functional/TabletResourceGroupBalanceIT.java
 
b/test/src/main/java/org/apache/accumulo/test/functional/TabletResourceGroupBalanceIT.java
index dd4ea0bb5f..d5d6d779ad 100644
--- 
a/test/src/main/java/org/apache/accumulo/test/functional/TabletResourceGroupBalanceIT.java
+++ 
b/test/src/main/java/org/apache/accumulo/test/functional/TabletResourceGroupBalanceIT.java
@@ -327,8 +327,8 @@ public class TabletResourceGroupBalanceIT extends 
SharedMiniClusterBase {
 
   private int getCountOfHostedTablets(AccumuloClient client, String tableName) 
throws Exception {
 
-    ClientTabletCache locator = ClientTabletCache.getInstance((ClientContext) 
client,
-        TableId.of(client.tableOperations().tableIdMap().get(tableName)));
+    ClientTabletCache locator = ((ClientContext) client)
+        
.getTabletLocationCache(TableId.of(client.tableOperations().tableIdMap().get(tableName)));
     locator.invalidateCache();
     AtomicInteger locations = new AtomicInteger(0);
     locator.findTablets((ClientContext) client, Collections.singletonList(new 
Range()), (ct, r) -> {

Reply via email to