You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@accumulo.apache.org by mw...@apache.org on 2018/07/19 16:45:07 UTC

[accumulo] branch master updated: Removed usage of Instance (#565)

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

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


The following commit(s) were added to refs/heads/master by this push:
     new 223e239  Removed usage of Instance (#565)
223e239 is described below

commit 223e239ec8e51a831a753188c290075945132cec
Author: Mike Walch <mw...@apache.org>
AuthorDate: Thu Jul 19 12:45:04 2018 -0400

    Removed usage of Instance (#565)
---
 .../accumulo/core/client/impl/Namespace.java       |  4 +--
 .../core/client/impl/NamespaceOperationsImpl.java  |  6 ++--
 .../accumulo/core/client/impl/Namespaces.java      | 40 +++++++++++++---------
 .../accumulo/core/client/impl/OfflineIterator.java |  2 +-
 .../apache/accumulo/core/client/impl/Table.java    |  4 +--
 .../core/client/impl/TableOperationsImpl.java      | 10 +++---
 .../apache/accumulo/core/client/impl/Tables.java   | 29 ++++++++--------
 .../java/org/apache/accumulo/core/util/Merge.java  |  4 ++-
 .../org/apache/accumulo/server/cli/ClientOpts.java |  5 +++
 .../server/client/ClientServiceHandler.java        | 37 ++++++++++----------
 .../accumulo/server/log/WalStateManager.java       | 10 +++---
 .../server/replication/ReplicationUtil.java        |  2 +-
 .../server/security/AuditedSecurityOperation.java  |  2 +-
 .../accumulo/server/util/ListVolumesUsed.java      | 12 +++----
 .../accumulo/server/util/TableDiskUsage.java       |  7 ++--
 .../server/util/VerifyTabletAssignments.java       |  2 +-
 .../accumulo/gc/GarbageCollectWriteAheadLogs.java  |  2 +-
 .../apache/accumulo/gc/SimpleGarbageCollector.java |  2 +-
 .../replication/CloseWriteAheadLogReferences.java  |  8 ++---
 .../apache/accumulo/master/FateServiceHandler.java | 36 +++++++------------
 .../java/org/apache/accumulo/master/Master.java    | 10 +++---
 .../master/MasterClientServiceHandler.java         | 16 ++++-----
 .../apache/accumulo/master/TabletGroupWatcher.java |  2 +-
 .../accumulo/master/tableOps/ClonePermissions.java |  2 +-
 .../accumulo/master/tableOps/CloneZookeeper.java   | 11 +++---
 .../master/tableOps/ImportPopulateZookeeper.java   |  4 +--
 .../master/tableOps/PopulateZookeeper.java         |  2 +-
 .../tableOps/PopulateZookeeperWithNamespace.java   |  9 ++---
 .../accumulo/master/tableOps/RenameNamespace.java  |  7 ++--
 .../accumulo/master/tableOps/RenameTable.java      |  6 ++--
 .../org/apache/accumulo/master/tableOps/Utils.java |  9 ++---
 .../monitor/rest/problems/ProblemsResource.java    |  6 ++--
 .../rest/replication/ReplicationResource.java      |  2 +-
 .../monitor/rest/tables/TablesResource.java        |  3 +-
 .../rest/tservers/TabletServerResource.java        |  3 +-
 .../org/apache/accumulo/monitor/view/WebViews.java |  3 +-
 .../org/apache/accumulo/monitor/it/WebViewsIT.java |  2 +-
 .../org/apache/accumulo/tserver/TabletServer.java  |  4 +--
 .../org/apache/accumulo/tserver/log/LogSorter.java | 10 +++---
 .../accumulo/shell/commands/ConfigCommand.java     |  4 +--
 .../apache/accumulo/shell/commands/DUCommand.java  |  6 ++--
 .../shell/commands/DeleteNamespaceCommand.java     |  4 +--
 .../shell/commands/RenameNamespaceCommand.java     |  8 ++---
 .../accumulo/shell/commands/TableOperation.java    |  8 ++---
 .../java/org/apache/accumulo/test/ListTables.java  |  2 +-
 .../java/org/apache/accumulo/test/UnusedWALIT.java | 10 +++---
 .../java/org/apache/accumulo/test/VolumeIT.java    |  2 +-
 .../test/functional/ConfigurableMacBase.java       |  5 +++
 .../functional/TabletStateChangeIteratorIT.java    |  2 +-
 .../accumulo/test/functional/WALSunnyDayIT.java    | 26 +++++++-------
 ...GarbageCollectorCommunicatesWithTServersIT.java |  5 +--
 .../accumulo/test/replication/ReplicationIT.java   | 21 +++++++-----
 .../replication/ReplicationOperationsImplIT.java   |  2 +-
 53 files changed, 219 insertions(+), 221 deletions(-)

diff --git a/core/src/main/java/org/apache/accumulo/core/client/impl/Namespace.java b/core/src/main/java/org/apache/accumulo/core/client/impl/Namespace.java
index db5d838..afaeea2 100644
--- a/core/src/main/java/org/apache/accumulo/core/client/impl/Namespace.java
+++ b/core/src/main/java/org/apache/accumulo/core/client/impl/Namespace.java
@@ -18,8 +18,6 @@ package org.apache.accumulo.core.client.impl;
 
 import java.util.concurrent.ExecutionException;
 
-import org.apache.accumulo.core.client.Instance;
-
 import com.google.common.cache.Cache;
 import com.google.common.cache.CacheBuilder;
 
@@ -31,7 +29,7 @@ public class Namespace {
   /**
    * Object representing an internal Namespace ID. This class was created to help with type safety.
    * For help obtaining the value of a namespace ID from Zookeeper, see
-   * {@link Namespaces#getNamespaceId(Instance, String)}
+   * {@link Namespaces#getNamespaceId(ClientContext, String)}
    *
    * Uses an internal cache and private constructor for storing a WeakReference of every
    * Namespace.ID. Therefore, a Namespace.ID can't be instantiated outside this class and is
diff --git a/core/src/main/java/org/apache/accumulo/core/client/impl/NamespaceOperationsImpl.java b/core/src/main/java/org/apache/accumulo/core/client/impl/NamespaceOperationsImpl.java
index ec45d90..c397a0f 100644
--- a/core/src/main/java/org/apache/accumulo/core/client/impl/NamespaceOperationsImpl.java
+++ b/core/src/main/java/org/apache/accumulo/core/client/impl/NamespaceOperationsImpl.java
@@ -100,7 +100,7 @@ public class NamespaceOperationsImpl extends NamespaceOperationsHelper {
       timer = new OpTimer().start();
     }
 
-    boolean exists = Namespaces.namespaceNameExists(context.getInstance(), namespace);
+    boolean exists = Namespaces.namespaceNameExists(context, namespace);
 
     if (timer != null) {
       timer.stop();
@@ -130,7 +130,7 @@ public class NamespaceOperationsImpl extends NamespaceOperationsHelper {
   public void delete(String namespace) throws AccumuloException, AccumuloSecurityException,
       NamespaceNotFoundException, NamespaceNotEmptyException {
     checkArgument(namespace != null, "namespace is null");
-    Namespace.ID namespaceId = Namespaces.getNamespaceId(context.getInstance(), namespace);
+    Namespace.ID namespaceId = Namespaces.getNamespaceId(context, namespace);
 
     if (namespaceId.equals(Namespace.ID.ACCUMULO) || namespaceId.equals(Namespace.ID.DEFAULT)) {
       Credentials credentials = context.getCredentials();
@@ -139,7 +139,7 @@ public class NamespaceOperationsImpl extends NamespaceOperationsHelper {
           SecurityErrorCode.UNSUPPORTED_OPERATION);
     }
 
-    if (Namespaces.getTableIds(context.getInstance(), namespaceId).size() > 0) {
+    if (Namespaces.getTableIds(context, namespaceId).size() > 0) {
       throw new NamespaceNotEmptyException(namespaceId.canonicalID(), namespace, null);
     }
 
diff --git a/core/src/main/java/org/apache/accumulo/core/client/impl/Namespaces.java b/core/src/main/java/org/apache/accumulo/core/client/impl/Namespaces.java
index 40e95cf..d2a6f21 100644
--- a/core/src/main/java/org/apache/accumulo/core/client/impl/Namespaces.java
+++ b/core/src/main/java/org/apache/accumulo/core/client/impl/Namespaces.java
@@ -84,27 +84,28 @@ public class Namespaces {
         instance.getZooKeepersSessionTimeOut());
   }
 
-  public static boolean exists(Instance instance, Namespace.ID namespaceId) {
-    ZooCache zc = getZooCache(instance);
-    List<String> namespaceIds = zc.getChildren(ZooUtil.getRoot(instance) + Constants.ZNAMESPACES);
+  public static boolean exists(ClientContext context, Namespace.ID namespaceId) {
+    ZooCache zc = getZooCache(context.getInstance());
+    List<String> namespaceIds = zc
+        .getChildren(ZooUtil.getRoot(context.getInstance()) + Constants.ZNAMESPACES);
     return namespaceIds.contains(namespaceId.canonicalID());
   }
 
-  public static List<Table.ID> getTableIds(Instance instance, Namespace.ID namespaceId)
+  public static List<Table.ID> getTableIds(ClientContext context, Namespace.ID namespaceId)
       throws NamespaceNotFoundException {
-    String namespace = getNamespaceName(instance, namespaceId);
+    String namespace = getNamespaceName(context, namespaceId);
     List<Table.ID> tableIds = new LinkedList<>();
-    for (Entry<String,Table.ID> nameToId : Tables.getNameToIdMap(instance).entrySet())
+    for (Entry<String,Table.ID> nameToId : Tables.getNameToIdMap(context).entrySet())
       if (namespace.equals(Tables.qualify(nameToId.getKey()).getFirst()))
         tableIds.add(nameToId.getValue());
     return tableIds;
   }
 
-  public static List<String> getTableNames(Instance instance, Namespace.ID namespaceId)
+  public static List<String> getTableNames(ClientContext context, Namespace.ID namespaceId)
       throws NamespaceNotFoundException {
-    String namespace = getNamespaceName(instance, namespaceId);
+    String namespace = getNamespaceName(context.getInstance(), namespaceId);
     List<String> names = new LinkedList<>();
-    for (String name : Tables.getNameToIdMap(instance).keySet())
+    for (String name : Tables.getNameToIdMap(context).keySet())
       if (namespace.equals(Tables.qualify(name).getFirst()))
         names.add(name);
     return names;
@@ -129,9 +130,9 @@ public class Namespaces {
   /**
    * Return sorted map with key = ID, value = namespaceName
    */
-  public static SortedMap<Namespace.ID,String> getIdToNameMap(Instance instance) {
+  public static SortedMap<Namespace.ID,String> getIdToNameMap(ClientContext context) {
     SortedMap<Namespace.ID,String> idMap = new TreeMap<>();
-    getAllNamespaces(instance, (id, name) -> idMap.put(Namespace.ID.of(id), name));
+    getAllNamespaces(context.getInstance(), (id, name) -> idMap.put(Namespace.ID.of(id), name));
     return idMap;
   }
 
@@ -147,10 +148,10 @@ public class Namespaces {
   /**
    * Look for namespace ID in ZK. Throw NamespaceNotFoundException if not found.
    */
-  public static Namespace.ID getNamespaceId(Instance instance, String namespaceName)
+  public static Namespace.ID getNamespaceId(ClientContext context, String namespaceName)
       throws NamespaceNotFoundException {
     final ArrayList<Namespace.ID> singleId = new ArrayList<>(1);
-    getAllNamespaces(instance, (id, name) -> {
+    getAllNamespaces(context.getInstance(), (id, name) -> {
       if (name.equals(namespaceName))
         singleId.add(Namespace.ID.of(id));
     });
@@ -163,10 +164,10 @@ public class Namespaces {
   /**
    * Look for namespace ID in ZK. Fail quietly by logging and returning null.
    */
-  public static Namespace.ID lookupNamespaceId(Instance instance, String namespaceName) {
+  public static Namespace.ID lookupNamespaceId(ClientContext context, String namespaceName) {
     Namespace.ID id = null;
     try {
-      id = getNamespaceId(instance, namespaceName);
+      id = getNamespaceId(context, namespaceName);
     } catch (NamespaceNotFoundException e) {
       if (log.isDebugEnabled())
         log.debug("Failed to find namespace ID from name: " + namespaceName, e);
@@ -177,13 +178,18 @@ public class Namespaces {
   /**
    * Return true if namespace name exists
    */
-  public static boolean namespaceNameExists(Instance instance, String namespaceName) {
-    return lookupNamespaceId(instance, namespaceName) != null;
+  public static boolean namespaceNameExists(ClientContext context, String namespaceName) {
+    return lookupNamespaceId(context, namespaceName) != null;
   }
 
   /**
    * Look for namespace name in ZK. Throw NamespaceNotFoundException if not found.
    */
+  public static String getNamespaceName(ClientContext context, Namespace.ID namespaceId)
+      throws NamespaceNotFoundException {
+    return getNamespaceName(context.getInstance(), namespaceId);
+  }
+
   public static String getNamespaceName(Instance instance, Namespace.ID namespaceId)
       throws NamespaceNotFoundException {
     String name;
diff --git a/core/src/main/java/org/apache/accumulo/core/client/impl/OfflineIterator.java b/core/src/main/java/org/apache/accumulo/core/client/impl/OfflineIterator.java
index 2418554..af5626d 100644
--- a/core/src/main/java/org/apache/accumulo/core/client/impl/OfflineIterator.java
+++ b/core/src/main/java/org/apache/accumulo/core/client/impl/OfflineIterator.java
@@ -334,7 +334,7 @@ class OfflineIterator implements Iterator<Entry<Key,Value>> {
     // TODO share code w/ tablet - ACCUMULO-1303
 
     // possible race condition here, if table is renamed
-    String tableName = Tables.getTableName(conn.getInstance(), tableId);
+    String tableName = Tables.getTableName(context, tableId);
     AccumuloConfiguration acuTableConf = new ConfigurationCopy(
         conn.tableOperations().getProperties(tableName));
 
diff --git a/core/src/main/java/org/apache/accumulo/core/client/impl/Table.java b/core/src/main/java/org/apache/accumulo/core/client/impl/Table.java
index 23b083b..11c6459 100644
--- a/core/src/main/java/org/apache/accumulo/core/client/impl/Table.java
+++ b/core/src/main/java/org/apache/accumulo/core/client/impl/Table.java
@@ -18,8 +18,6 @@ package org.apache.accumulo.core.client.impl;
 
 import java.util.concurrent.ExecutionException;
 
-import org.apache.accumulo.core.client.Instance;
-
 import com.google.common.cache.Cache;
 import com.google.common.cache.CacheBuilder;
 
@@ -28,7 +26,7 @@ public class Table {
   /**
    * Object representing an internal table ID. This class was created to help with type safety. For
    * help obtaining the value of a table ID from Zookeeper, see
-   * {@link Tables#getTableId(Instance, String)}
+   * {@link Tables#getTableId(ClientContext, String)}
    *
    * Uses an internal cache and private constructor for storing a WeakReference of every Table.ID.
    * Therefore, a Table.ID can't be instantiated outside this class and is accessed by calling
diff --git a/core/src/main/java/org/apache/accumulo/core/client/impl/TableOperationsImpl.java b/core/src/main/java/org/apache/accumulo/core/client/impl/TableOperationsImpl.java
index 6ed44a8..1f62817 100644
--- a/core/src/main/java/org/apache/accumulo/core/client/impl/TableOperationsImpl.java
+++ b/core/src/main/java/org/apache/accumulo/core/client/impl/TableOperationsImpl.java
@@ -165,8 +165,7 @@ public class TableOperationsImpl extends TableOperationsHelper {
       timer = new OpTimer().start();
     }
 
-    TreeSet<String> tableNames = new TreeSet<>(
-        Tables.getNameToIdMap(context.getInstance()).keySet());
+    TreeSet<String> tableNames = new TreeSet<>(Tables.getNameToIdMap(context).keySet());
 
     if (timer != null) {
       timer.stop();
@@ -190,7 +189,7 @@ public class TableOperationsImpl extends TableOperationsHelper {
       timer = new OpTimer().start();
     }
 
-    boolean exists = Tables.getNameToIdMap(context.getInstance()).containsKey(tableName);
+    boolean exists = Tables.getNameToIdMap(context).containsKey(tableName);
 
     if (timer != null) {
       timer.stop();
@@ -363,8 +362,7 @@ public class TableOperationsImpl extends TableOperationsHelper {
           throw new NamespaceNotFoundException(null, tableOrNamespaceName,
               "Target namespace does not exist");
         default:
-          String tableInfo = Tables.getPrintableTableInfoFromName(context.getInstance(),
-              tableOrNamespaceName);
+          String tableInfo = Tables.getPrintableTableInfoFromName(context, tableOrNamespaceName);
           throw new AccumuloSecurityException(e.user, e.code, tableInfo, e);
       }
     } catch (ThriftTableOperationException e) {
@@ -1404,7 +1402,7 @@ public class TableOperationsImpl extends TableOperationsHelper {
 
   @Override
   public Map<String,String> tableIdMap() {
-    return Tables.getNameToIdMap(context.getInstance()).entrySet().stream()
+    return Tables.getNameToIdMap(context).entrySet().stream()
         .collect(Collectors.toMap(Entry::getKey, e -> e.getValue().canonicalID(), (v1, v2) -> {
           throw new RuntimeException(String.format("Duplicate key for values %s and %s", v1, v2));
         }, TreeMap::new));
diff --git a/core/src/main/java/org/apache/accumulo/core/client/impl/Tables.java b/core/src/main/java/org/apache/accumulo/core/client/impl/Tables.java
index 63e9316..94d6067 100644
--- a/core/src/main/java/org/apache/accumulo/core/client/impl/Tables.java
+++ b/core/src/main/java/org/apache/accumulo/core/client/impl/Tables.java
@@ -59,13 +59,8 @@ public class Tables {
 
   public static Table.ID getTableId(ClientContext context, String tableName)
       throws TableNotFoundException {
-    return getTableId(context.getInstance(), tableName);
-  }
-
-  public static Table.ID getTableId(Instance instance, String tableName)
-      throws TableNotFoundException {
     try {
-      return _getTableId(instance, tableName);
+      return _getTableId(context, tableName);
     } catch (NamespaceNotFoundException e) {
       throw new TableNotFoundException(tableName, e);
     }
@@ -98,17 +93,17 @@ public class Tables {
   /**
    * Lookup table ID in ZK. If not found, clears cache and tries again.
    */
-  public static Table.ID _getTableId(Instance instance, String tableName)
+  public static Table.ID _getTableId(ClientContext context, String tableName)
       throws NamespaceNotFoundException, TableNotFoundException {
-    Table.ID tableId = getNameToIdMap(instance).get(tableName);
+    Table.ID tableId = getNameToIdMap(context).get(tableName);
     if (tableId == null) {
       // maybe the table exist, but the cache was not updated yet... so try to clear the cache and
       // check again
-      clearCache(instance);
-      tableId = getNameToIdMap(instance).get(tableName);
+      clearCache(context.getInstance());
+      tableId = getNameToIdMap(context).get(tableName);
       if (tableId == null) {
         String namespace = qualify(tableName).getFirst();
-        if (Namespaces.getNameToIdMap(instance).containsKey(namespace))
+        if (Namespaces.getNameToIdMap(context.getInstance()).containsKey(namespace))
           throw new TableNotFoundException(null, tableName, null);
         else
           throw new NamespaceNotFoundException(null, namespace, null);
@@ -145,8 +140,12 @@ public class Tables {
     }
   }
 
-  public static Map<String,Table.ID> getNameToIdMap(Instance instance) {
-    return getTableMap(instance).getNameToIdMap();
+  public static Map<String,Table.ID> getNameToIdMap(ClientContext context) {
+    return getTableMap(context.getInstance()).getNameToIdMap();
+  }
+
+  public static Map<Table.ID,String> getIdToNameMap(ClientContext context) {
+    return getIdToNameMap(context.getInstance());
   }
 
   public static Map<Table.ID,String> getIdToNameMap(Instance instance) {
@@ -218,10 +217,10 @@ public class Tables {
         : String.format("%s(ID:%s)", tableName, tableId.canonicalID());
   }
 
-  public static String getPrintableTableInfoFromName(Instance instance, String tableName) {
+  public static String getPrintableTableInfoFromName(ClientContext context, String tableName) {
     Table.ID tableId = null;
     try {
-      tableId = getTableId(instance, tableName);
+      tableId = getTableId(context, tableName);
     } catch (TableNotFoundException e) {
       // handled in the string formatting
     }
diff --git a/core/src/main/java/org/apache/accumulo/core/util/Merge.java b/core/src/main/java/org/apache/accumulo/core/util/Merge.java
index 2431c8f..81bd29b 100644
--- a/core/src/main/java/org/apache/accumulo/core/util/Merge.java
+++ b/core/src/main/java/org/apache/accumulo/core/util/Merge.java
@@ -24,6 +24,7 @@ import java.util.Map.Entry;
 import org.apache.accumulo.core.cli.ClientOnRequiredTable;
 import org.apache.accumulo.core.client.Connector;
 import org.apache.accumulo.core.client.Scanner;
+import org.apache.accumulo.core.client.impl.ClientContext;
 import org.apache.accumulo.core.client.impl.Table;
 import org.apache.accumulo.core.client.impl.Tables;
 import org.apache.accumulo.core.conf.AccumuloConfiguration;
@@ -220,7 +221,8 @@ public class Merge {
     Table.ID tableId;
     Scanner scanner;
     try {
-      tableId = Tables.getTableId(conn.getInstance(), tablename);
+      ClientContext context = new ClientContext(conn.info());
+      tableId = Tables.getTableId(context, tablename);
       scanner = conn.createScanner(MetadataTable.NAME, Authorizations.EMPTY);
     } catch (Exception e) {
       throw new MergeException(e);
diff --git a/server/base/src/main/java/org/apache/accumulo/server/cli/ClientOpts.java b/server/base/src/main/java/org/apache/accumulo/server/cli/ClientOpts.java
index 9d67c4d..d420e9d 100644
--- a/server/base/src/main/java/org/apache/accumulo/server/cli/ClientOpts.java
+++ b/server/base/src/main/java/org/apache/accumulo/server/cli/ClientOpts.java
@@ -19,6 +19,7 @@ package org.apache.accumulo.server.cli;
 import org.apache.accumulo.core.client.AccumuloException;
 import org.apache.accumulo.core.client.AccumuloSecurityException;
 import org.apache.accumulo.core.client.Instance;
+import org.apache.accumulo.core.client.impl.ClientContext;
 import org.apache.accumulo.server.client.HdfsZooInstance;
 
 public class ClientOpts extends org.apache.accumulo.core.cli.ClientOpts {
@@ -26,6 +27,10 @@ public class ClientOpts extends org.apache.accumulo.core.cli.ClientOpts {
     setPrincipal("root");
   }
 
+  public ClientContext getClientContext() {
+    return new ClientContext(getClientInfo());
+  }
+
   @Override
   public Instance getInstance() {
     if (instance == null) {
diff --git a/server/base/src/main/java/org/apache/accumulo/server/client/ClientServiceHandler.java b/server/base/src/main/java/org/apache/accumulo/server/client/ClientServiceHandler.java
index 3ca9f6d..a1b9356 100644
--- a/server/base/src/main/java/org/apache/accumulo/server/client/ClientServiceHandler.java
+++ b/server/base/src/main/java/org/apache/accumulo/server/client/ClientServiceHandler.java
@@ -33,6 +33,7 @@ import org.apache.accumulo.core.client.AccumuloSecurityException;
 import org.apache.accumulo.core.client.Instance;
 import org.apache.accumulo.core.client.NamespaceNotFoundException;
 import org.apache.accumulo.core.client.TableNotFoundException;
+import org.apache.accumulo.core.client.impl.ClientContext;
 import org.apache.accumulo.core.client.impl.Credentials;
 import org.apache.accumulo.core.client.impl.Namespace;
 import org.apache.accumulo.core.client.impl.Namespaces;
@@ -90,11 +91,11 @@ public class ClientServiceHandler implements ClientService.Iface {
     this.security = AuditedSecurityOperation.getInstance(context);
   }
 
-  public static Table.ID checkTableId(Instance instance, String tableName, TableOperation operation)
-      throws ThriftTableOperationException {
+  public static Table.ID checkTableId(ClientContext context, String tableName,
+      TableOperation operation) throws ThriftTableOperationException {
     TableOperationExceptionType reason = null;
     try {
-      return Tables._getTableId(instance, tableName);
+      return Tables._getTableId(context, tableName);
     } catch (NamespaceNotFoundException e) {
       reason = TableOperationExceptionType.NAMESPACE_NOTFOUND;
     } catch (TableNotFoundException e) {
@@ -103,14 +104,14 @@ public class ClientServiceHandler implements ClientService.Iface {
     throw new ThriftTableOperationException(null, tableName, operation, reason, null);
   }
 
-  public static Namespace.ID checkNamespaceId(Instance instance, String namespaceName,
+  public static Namespace.ID checkNamespaceId(ClientContext context, String namespaceName,
       TableOperation operation) throws ThriftTableOperationException {
-    Namespace.ID namespaceId = Namespaces.lookupNamespaceId(instance, namespaceName);
+    Namespace.ID namespaceId = Namespaces.lookupNamespaceId(context, namespaceName);
     if (namespaceId == null) {
       // maybe the namespace exists, but the cache was not updated yet... so try to clear the cache
       // and check again
-      Tables.clearCache(instance);
-      namespaceId = Namespaces.lookupNamespaceId(instance, namespaceName);
+      Tables.clearCache(context);
+      namespaceId = Namespaces.lookupNamespaceId(context, namespaceName);
       if (namespaceId == null)
         throw new ThriftTableOperationException(null, namespaceName, operation,
             TableOperationExceptionType.NAMESPACE_NOTFOUND, null);
@@ -215,7 +216,7 @@ public class ClientServiceHandler implements ClientService.Iface {
   @Override
   public void grantTablePermission(TInfo tinfo, TCredentials credentials, String user,
       String tableName, byte permission) throws TException {
-    Table.ID tableId = checkTableId(instance, tableName, TableOperation.PERMISSION);
+    Table.ID tableId = checkTableId(context, tableName, TableOperation.PERMISSION);
     Namespace.ID namespaceId;
     try {
       namespaceId = Tables.getNamespaceId(instance, tableId);
@@ -230,7 +231,7 @@ public class ClientServiceHandler implements ClientService.Iface {
   @Override
   public void grantNamespacePermission(TInfo tinfo, TCredentials credentials, String user,
       String ns, byte permission) throws ThriftSecurityException, ThriftTableOperationException {
-    Namespace.ID namespaceId = checkNamespaceId(instance, ns, TableOperation.PERMISSION);
+    Namespace.ID namespaceId = checkNamespaceId(context, ns, TableOperation.PERMISSION);
     security.grantNamespacePermission(credentials, user, namespaceId,
         NamespacePermission.getPermissionById(permission));
   }
@@ -245,7 +246,7 @@ public class ClientServiceHandler implements ClientService.Iface {
   @Override
   public void revokeTablePermission(TInfo tinfo, TCredentials credentials, String user,
       String tableName, byte permission) throws TException {
-    Table.ID tableId = checkTableId(instance, tableName, TableOperation.PERMISSION);
+    Table.ID tableId = checkTableId(context, tableName, TableOperation.PERMISSION);
     Namespace.ID namespaceId;
     try {
       namespaceId = Tables.getNamespaceId(instance, tableId);
@@ -268,7 +269,7 @@ public class ClientServiceHandler implements ClientService.Iface {
   public boolean hasTablePermission(TInfo tinfo, TCredentials credentials, String user,
       String tableName, byte tblPerm)
       throws ThriftSecurityException, ThriftTableOperationException {
-    Table.ID tableId = checkTableId(instance, tableName, TableOperation.PERMISSION);
+    Table.ID tableId = checkTableId(context, tableName, TableOperation.PERMISSION);
     return security.hasTablePermission(credentials, user, tableId,
         TablePermission.getPermissionById(tblPerm));
   }
@@ -276,7 +277,7 @@ public class ClientServiceHandler implements ClientService.Iface {
   @Override
   public boolean hasNamespacePermission(TInfo tinfo, TCredentials credentials, String user,
       String ns, byte perm) throws ThriftSecurityException, ThriftTableOperationException {
-    Namespace.ID namespaceId = checkNamespaceId(instance, ns, TableOperation.PERMISSION);
+    Namespace.ID namespaceId = checkNamespaceId(context, ns, TableOperation.PERMISSION);
     return security.hasNamespacePermission(credentials, user, namespaceId,
         NamespacePermission.getPermissionById(perm));
   }
@@ -284,7 +285,7 @@ public class ClientServiceHandler implements ClientService.Iface {
   @Override
   public void revokeNamespacePermission(TInfo tinfo, TCredentials credentials, String user,
       String ns, byte permission) throws ThriftSecurityException, ThriftTableOperationException {
-    Namespace.ID namespaceId = checkNamespaceId(instance, ns, TableOperation.PERMISSION);
+    Namespace.ID namespaceId = checkNamespaceId(context, ns, TableOperation.PERMISSION);
     security.revokeNamespacePermission(credentials, user, namespaceId,
         NamespacePermission.getPermissionById(permission));
   }
@@ -327,7 +328,7 @@ public class ClientServiceHandler implements ClientService.Iface {
   @Override
   public Map<String,String> getTableConfiguration(TInfo tinfo, TCredentials credentials,
       String tableName) throws TException, ThriftTableOperationException {
-    Table.ID tableId = checkTableId(instance, tableName, null);
+    Table.ID tableId = checkTableId(context, tableName, null);
     AccumuloConfiguration config = context.getServerConfigurationFactory()
         .getTableConfiguration(tableId);
     return conf(credentials, config);
@@ -390,7 +391,7 @@ public class ClientServiceHandler implements ClientService.Iface {
 
     security.authenticateUser(credentials, credentials);
 
-    Table.ID tableId = checkTableId(instance, tableName, null);
+    Table.ID tableId = checkTableId(context, tableName, null);
 
     ClassLoader loader = getClass().getClassLoader();
     Class<?> shouldMatch;
@@ -426,7 +427,7 @@ public class ClientServiceHandler implements ClientService.Iface {
 
     security.authenticateUser(credentials, credentials);
 
-    Namespace.ID namespaceId = checkNamespaceId(instance, ns, null);
+    Namespace.ID namespaceId = checkNamespaceId(context, ns, null);
 
     ClassLoader loader = getClass().getClassLoader();
     Class<?> shouldMatch;
@@ -463,7 +464,7 @@ public class ClientServiceHandler implements ClientService.Iface {
 
       for (String table : tables) {
         // ensure that table table exists
-        Table.ID tableId = checkTableId(instance, table, null);
+        Table.ID tableId = checkTableId(context, table, null);
         tableIds.add(tableId);
         Namespace.ID namespaceId = Tables.getNamespaceId(instance, tableId);
         if (!security.canScan(credentials, tableId, namespaceId))
@@ -492,7 +493,7 @@ public class ClientServiceHandler implements ClientService.Iface {
       String ns) throws ThriftTableOperationException, TException {
     Namespace.ID namespaceId;
     try {
-      namespaceId = Namespaces.getNamespaceId(instance, ns);
+      namespaceId = Namespaces.getNamespaceId(context, ns);
     } catch (NamespaceNotFoundException e) {
       String why = "Could not find namespace while getting configuration.";
       throw new ThriftTableOperationException(null, ns, null,
diff --git a/server/base/src/main/java/org/apache/accumulo/server/log/WalStateManager.java b/server/base/src/main/java/org/apache/accumulo/server/log/WalStateManager.java
index da74826..22703eb 100644
--- a/server/base/src/main/java/org/apache/accumulo/server/log/WalStateManager.java
+++ b/server/base/src/main/java/org/apache/accumulo/server/log/WalStateManager.java
@@ -25,7 +25,7 @@ import java.util.Map;
 import java.util.Map.Entry;
 import java.util.UUID;
 
-import org.apache.accumulo.core.client.Instance;
+import org.apache.accumulo.core.client.impl.ClientContext;
 import org.apache.accumulo.core.util.Pair;
 import org.apache.accumulo.core.zookeeper.ZooUtil;
 import org.apache.accumulo.fate.zookeeper.ZooUtil.NodeExistsPolicy;
@@ -88,18 +88,18 @@ public class WalStateManager {
     UNREFERENCED
   }
 
-  private final Instance instance;
+  private final ClientContext context;
   private final ZooReaderWriter zoo;
 
   private volatile boolean checkedExistance = false;
 
-  public WalStateManager(Instance instance, ZooReaderWriter zoo) {
-    this.instance = instance;
+  public WalStateManager(ClientContext context, ZooReaderWriter zoo) {
+    this.context = context;
     this.zoo = zoo;
   }
 
   private String root() throws WalMarkerException {
-    String root = ZooUtil.getRoot(instance) + ZWALS;
+    String root = ZooUtil.getRoot(context.getInstanceID()) + ZWALS;
 
     try {
       if (!checkedExistance && !zoo.exists(root)) {
diff --git a/server/base/src/main/java/org/apache/accumulo/server/replication/ReplicationUtil.java b/server/base/src/main/java/org/apache/accumulo/server/replication/ReplicationUtil.java
index c019631..82a6ab0 100644
--- a/server/base/src/main/java/org/apache/accumulo/server/replication/ReplicationUtil.java
+++ b/server/base/src/main/java/org/apache/accumulo/server/replication/ReplicationUtil.java
@@ -125,7 +125,7 @@ public class ReplicationUtil {
   public Set<ReplicationTarget> getReplicationTargets() {
     // The total set of configured targets
     final Set<ReplicationTarget> allConfiguredTargets = new HashSet<>();
-    final Map<String,Table.ID> tableNameToId = Tables.getNameToIdMap(context.getInstance());
+    final Map<String,Table.ID> tableNameToId = Tables.getNameToIdMap(context);
 
     for (String table : tableNameToId.keySet()) {
       if (MetadataTable.NAME.equals(table) || RootTable.NAME.equals(table)) {
diff --git a/server/base/src/main/java/org/apache/accumulo/server/security/AuditedSecurityOperation.java b/server/base/src/main/java/org/apache/accumulo/server/security/AuditedSecurityOperation.java
index f585f58..a98212c 100644
--- a/server/base/src/main/java/org/apache/accumulo/server/security/AuditedSecurityOperation.java
+++ b/server/base/src/main/java/org/apache/accumulo/server/security/AuditedSecurityOperation.java
@@ -80,7 +80,7 @@ public class AuditedSecurityOperation extends SecurityOperation {
 
   private String getTableName(Table.ID tableId) {
     try {
-      return Tables.getTableName(context.getInstance(), tableId);
+      return Tables.getTableName(context, tableId);
     } catch (TableNotFoundException e) {
       return "Unknown Table with ID " + tableId;
     }
diff --git a/server/base/src/main/java/org/apache/accumulo/server/util/ListVolumesUsed.java b/server/base/src/main/java/org/apache/accumulo/server/util/ListVolumesUsed.java
index 841f805..0f5bf5f 100644
--- a/server/base/src/main/java/org/apache/accumulo/server/util/ListVolumesUsed.java
+++ b/server/base/src/main/java/org/apache/accumulo/server/util/ListVolumesUsed.java
@@ -20,7 +20,6 @@ import java.util.ArrayList;
 import java.util.Map.Entry;
 import java.util.TreeSet;
 
-import org.apache.accumulo.core.client.Connector;
 import org.apache.accumulo.core.client.Instance;
 import org.apache.accumulo.core.client.Scanner;
 import org.apache.accumulo.core.client.impl.ClientContext;
@@ -80,11 +79,11 @@ public class ListVolumesUsed {
 
   }
 
-  private static void listTable(String name, Connector conn) throws Exception {
+  private static void listTable(String name, ClientContext context) throws Exception {
 
     System.out.println("Listing volumes referenced in " + name + " tablets section");
 
-    Scanner scanner = conn.createScanner(name, Authorizations.EMPTY);
+    Scanner scanner = context.getConnector().createScanner(name, Authorizations.EMPTY);
 
     scanner.setRange(MetadataSchema.TabletsSection.getRange());
     scanner.fetchColumnFamily(MetadataSchema.TabletsSection.DataFileColumnFamily.NAME);
@@ -129,7 +128,7 @@ public class ListVolumesUsed {
 
     volumes.clear();
 
-    WalStateManager wals = new WalStateManager(conn.getInstance(), ZooReaderWriter.getInstance());
+    WalStateManager wals = new WalStateManager(context, ZooReaderWriter.getInstance());
     for (Path path : wals.getAllState().keySet()) {
       volumes.add(getLogURI(path.toString()));
     }
@@ -141,12 +140,11 @@ public class ListVolumesUsed {
   }
 
   public static void listVolumes(ClientContext context) throws Exception {
-    Connector conn = context.getConnector();
     listZookeeper();
     System.out.println();
-    listTable(RootTable.NAME, conn);
+    listTable(RootTable.NAME, context);
     System.out.println();
-    listTable(MetadataTable.NAME, conn);
+    listTable(MetadataTable.NAME, context);
   }
 
 }
diff --git a/server/base/src/main/java/org/apache/accumulo/server/util/TableDiskUsage.java b/server/base/src/main/java/org/apache/accumulo/server/util/TableDiskUsage.java
index 5edcc7b..7ed7055 100644
--- a/server/base/src/main/java/org/apache/accumulo/server/util/TableDiskUsage.java
+++ b/server/base/src/main/java/org/apache/accumulo/server/util/TableDiskUsage.java
@@ -33,6 +33,7 @@ import java.util.TreeSet;
 import org.apache.accumulo.core.client.Connector;
 import org.apache.accumulo.core.client.Scanner;
 import org.apache.accumulo.core.client.TableNotFoundException;
+import org.apache.accumulo.core.client.impl.ClientContext;
 import org.apache.accumulo.core.client.impl.Table;
 import org.apache.accumulo.core.client.impl.Tables;
 import org.apache.accumulo.core.data.Key;
@@ -216,7 +217,8 @@ public class TableDiskUsage {
       }
     }
 
-    Map<Table.ID,String> reverseTableIdMap = Tables.getIdToNameMap(conn.getInstance());
+    ClientContext context = new ClientContext(conn.info());
+    Map<Table.ID,String> reverseTableIdMap = Tables.getIdToNameMap(context);
 
     TreeMap<TreeSet<String>,Long> usage = new TreeMap<>((o1, o2) -> {
       int len1 = o1.size();
@@ -269,10 +271,11 @@ public class TableDiskUsage {
       Printer printer, boolean humanReadable) throws TableNotFoundException, IOException {
 
     HashSet<Table.ID> tableIds = new HashSet<>();
+    ClientContext context = new ClientContext(conn.info());
 
     // Get table IDs for all tables requested to be 'du'
     for (String tableName : tableNames) {
-      Table.ID tableId = Tables.getTableId(conn.getInstance(), tableName);
+      Table.ID tableId = Tables.getTableId(context, tableName);
       if (tableId == null)
         throw new TableNotFoundException(null, tableName, "Table " + tableName + " not found");
 
diff --git a/server/base/src/main/java/org/apache/accumulo/server/util/VerifyTabletAssignments.java b/server/base/src/main/java/org/apache/accumulo/server/util/VerifyTabletAssignments.java
index e039ca8..a133a1e 100644
--- a/server/base/src/main/java/org/apache/accumulo/server/util/VerifyTabletAssignments.java
+++ b/server/base/src/main/java/org/apache/accumulo/server/util/VerifyTabletAssignments.java
@@ -91,7 +91,7 @@ public class VerifyTabletAssignments {
 
     TreeMap<KeyExtent,String> tabletLocations = new TreeMap<>();
 
-    Table.ID tableId = Tables.getNameToIdMap(context.getInstance()).get(tableName);
+    Table.ID tableId = Tables.getNameToIdMap(context).get(tableName);
     MetadataServicer.forTableId(context, tableId).getTabletLocations(tabletLocations);
 
     final HashSet<KeyExtent> failures = new HashSet<>();
diff --git a/server/gc/src/main/java/org/apache/accumulo/gc/GarbageCollectWriteAheadLogs.java b/server/gc/src/main/java/org/apache/accumulo/gc/GarbageCollectWriteAheadLogs.java
index c663d9a..4bde774 100644
--- a/server/gc/src/main/java/org/apache/accumulo/gc/GarbageCollectWriteAheadLogs.java
+++ b/server/gc/src/main/java/org/apache/accumulo/gc/GarbageCollectWriteAheadLogs.java
@@ -104,7 +104,7 @@ public class GarbageCollectWriteAheadLogs {
       }
     });
     liveServers.startListeningForTabletServerChanges();
-    this.walMarker = new WalStateManager(context.getInstance(), ZooReaderWriter.getInstance());
+    this.walMarker = new WalStateManager(context, ZooReaderWriter.getInstance());
     this.store = new Iterable<TabletLocationState>() {
       @Override
       public Iterator<TabletLocationState> iterator() {
diff --git a/server/gc/src/main/java/org/apache/accumulo/gc/SimpleGarbageCollector.java b/server/gc/src/main/java/org/apache/accumulo/gc/SimpleGarbageCollector.java
index 6049b42..35b0893 100644
--- a/server/gc/src/main/java/org/apache/accumulo/gc/SimpleGarbageCollector.java
+++ b/server/gc/src/main/java/org/apache/accumulo/gc/SimpleGarbageCollector.java
@@ -317,7 +317,7 @@ public class SimpleGarbageCollector extends AccumuloServerContext implements Ifa
 
     @Override
     public Set<Table.ID> getTableIDs() {
-      return Tables.getIdToNameMap(getInstance()).keySet();
+      return Tables.getIdToNameMap(SimpleGarbageCollector.this).keySet();
     }
 
     @Override
diff --git a/server/gc/src/main/java/org/apache/accumulo/gc/replication/CloseWriteAheadLogReferences.java b/server/gc/src/main/java/org/apache/accumulo/gc/replication/CloseWriteAheadLogReferences.java
index 714324d..3f0eecf 100644
--- a/server/gc/src/main/java/org/apache/accumulo/gc/replication/CloseWriteAheadLogReferences.java
+++ b/server/gc/src/main/java/org/apache/accumulo/gc/replication/CloseWriteAheadLogReferences.java
@@ -104,7 +104,7 @@ public class CloseWriteAheadLogReferences implements Runnable {
     HashSet<String> closed = null;
     try {
       sw.start();
-      closed = getClosedLogs(conn);
+      closed = getClosedLogs();
     } finally {
       sw.stop();
       findWalsSpan.stop();
@@ -129,12 +129,10 @@ public class CloseWriteAheadLogReferences implements Runnable {
   /**
    * Construct the set of referenced WALs from zookeeper
    *
-   * @param conn
-   *          Connector
    * @return The Set of WALs that are referenced in the metadata table
    */
-  protected HashSet<String> getClosedLogs(Connector conn) {
-    WalStateManager wals = new WalStateManager(conn.getInstance(), ZooReaderWriter.getInstance());
+  protected HashSet<String> getClosedLogs() {
+    WalStateManager wals = new WalStateManager(context, ZooReaderWriter.getInstance());
 
     HashSet<String> result = new HashSet<>();
     try {
diff --git a/server/master/src/main/java/org/apache/accumulo/master/FateServiceHandler.java b/server/master/src/main/java/org/apache/accumulo/master/FateServiceHandler.java
index 0baec1f..4b6c68c 100644
--- a/server/master/src/main/java/org/apache/accumulo/master/FateServiceHandler.java
+++ b/server/master/src/main/java/org/apache/accumulo/master/FateServiceHandler.java
@@ -118,8 +118,7 @@ class FateServiceHandler implements FateService.Iface {
             Namespaces.NOT_DEFAULT.and(Namespaces.NOT_ACCUMULO));
         String newName = validateNamespaceArgument(arguments.get(1), tableOp, null);
 
-        Namespace.ID namespaceId = ClientServiceHandler.checkNamespaceId(master.getInstance(),
-            oldName, tableOp);
+        Namespace.ID namespaceId = ClientServiceHandler.checkNamespaceId(master, oldName, tableOp);
         if (!master.security.canRenameNamespace(c, namespaceId, oldName, newName))
           throw new ThriftSecurityException(c.getPrincipal(), SecurityErrorCode.PERMISSION_DENIED);
 
@@ -132,8 +131,8 @@ class FateServiceHandler implements FateService.Iface {
         String namespace = validateNamespaceArgument(arguments.get(0), tableOp,
             Namespaces.NOT_DEFAULT.and(Namespaces.NOT_ACCUMULO));
 
-        Namespace.ID namespaceId = ClientServiceHandler.checkNamespaceId(master.getInstance(),
-            namespace, tableOp);
+        Namespace.ID namespaceId = ClientServiceHandler.checkNamespaceId(master, namespace,
+            tableOp);
         if (!master.security.canDeleteNamespace(c, namespaceId))
           throw new ThriftSecurityException(c.getPrincipal(), SecurityErrorCode.PERMISSION_DENIED);
 
@@ -149,8 +148,7 @@ class FateServiceHandler implements FateService.Iface {
         Namespace.ID namespaceId;
 
         try {
-          namespaceId = Namespaces.getNamespaceId(master.getInstance(),
-              Tables.qualify(tableName).getFirst());
+          namespaceId = Namespaces.getNamespaceId(master, Tables.qualify(tableName).getFirst());
         } catch (NamespaceNotFoundException e) {
           throw new ThriftTableOperationException(null, tableName, tableOp,
               TableOperationExceptionType.NAMESPACE_NOTFOUND, "");
@@ -188,8 +186,7 @@ class FateServiceHandler implements FateService.Iface {
 
             });
 
-        Table.ID tableId = ClientServiceHandler.checkTableId(master.getInstance(), oldTableName,
-            tableOp);
+        Table.ID tableId = ClientServiceHandler.checkTableId(master, oldTableName, tableOp);
         Namespace.ID namespaceId = getNamespaceIdFromTableId(tableOp, tableId);
 
         final boolean canRename;
@@ -221,8 +218,7 @@ class FateServiceHandler implements FateService.Iface {
         String tableName = validateTableNameArgument(arguments.get(1), tableOp, NOT_SYSTEM);
         Namespace.ID namespaceId;
         try {
-          namespaceId = Namespaces.getNamespaceId(master.getInstance(),
-              Tables.qualify(tableName).getFirst());
+          namespaceId = Namespaces.getNamespaceId(master, Tables.qualify(tableName).getFirst());
         } catch (NamespaceNotFoundException e) {
           // shouldn't happen, but possible once cloning between namespaces is supported
           throw new ThriftTableOperationException(null, tableName, tableOp,
@@ -270,8 +266,7 @@ class FateServiceHandler implements FateService.Iface {
         TableOperation tableOp = TableOperation.DELETE;
         String tableName = validateTableNameArgument(arguments.get(0), tableOp, NOT_SYSTEM);
 
-        final Table.ID tableId = ClientServiceHandler.checkTableId(master.getInstance(), tableName,
-            tableOp);
+        final Table.ID tableId = ClientServiceHandler.checkTableId(master, tableName, tableOp);
         Namespace.ID namespaceId = getNamespaceIdFromTableId(tableOp, tableId);
 
         final boolean canDeleteTable;
@@ -336,8 +331,7 @@ class FateServiceHandler implements FateService.Iface {
         Text startRow = ByteBufferUtil.toText(arguments.get(1));
         Text endRow = ByteBufferUtil.toText(arguments.get(2));
 
-        final Table.ID tableId = ClientServiceHandler.checkTableId(master.getInstance(), tableName,
-            tableOp);
+        final Table.ID tableId = ClientServiceHandler.checkTableId(master, tableName, tableOp);
         Namespace.ID namespaceId = getNamespaceIdFromTableId(tableOp, tableId);
 
         final boolean canMerge;
@@ -363,8 +357,7 @@ class FateServiceHandler implements FateService.Iface {
         Text startRow = ByteBufferUtil.toText(arguments.get(1));
         Text endRow = ByteBufferUtil.toText(arguments.get(2));
 
-        final Table.ID tableId = ClientServiceHandler.checkTableId(master.getInstance(), tableName,
-            tableOp);
+        final Table.ID tableId = ClientServiceHandler.checkTableId(master, tableName, tableOp);
         Namespace.ID namespaceId = getNamespaceIdFromTableId(tableOp, tableId);
 
         final boolean canDeleteRange;
@@ -391,8 +384,7 @@ class FateServiceHandler implements FateService.Iface {
         String failDir = ByteBufferUtil.toString(arguments.get(2));
         boolean setTime = Boolean.parseBoolean(ByteBufferUtil.toString(arguments.get(3)));
 
-        final Table.ID tableId = ClientServiceHandler.checkTableId(master.getInstance(), tableName,
-            tableOp);
+        final Table.ID tableId = ClientServiceHandler.checkTableId(master, tableName, tableOp);
         Namespace.ID namespaceId = getNamespaceIdFromTableId(tableOp, tableId);
 
         final boolean canBulkImport;
@@ -466,8 +458,7 @@ class FateServiceHandler implements FateService.Iface {
         String exportDir = ByteBufferUtil.toString(arguments.get(1));
         Namespace.ID namespaceId;
         try {
-          namespaceId = Namespaces.getNamespaceId(master.getInstance(),
-              Tables.qualify(tableName).getFirst());
+          namespaceId = Namespaces.getNamespaceId(master, Tables.qualify(tableName).getFirst());
         } catch (NamespaceNotFoundException e) {
           throw new ThriftTableOperationException(null, tableName, tableOp,
               TableOperationExceptionType.NAMESPACE_NOTFOUND, "");
@@ -494,8 +485,7 @@ class FateServiceHandler implements FateService.Iface {
         String tableName = validateTableNameArgument(arguments.get(0), tableOp, NOT_SYSTEM);
         String exportDir = ByteBufferUtil.toString(arguments.get(1));
 
-        Table.ID tableId = ClientServiceHandler.checkTableId(master.getInstance(), tableName,
-            tableOp);
+        Table.ID tableId = ClientServiceHandler.checkTableId(master, tableName, tableOp);
         Namespace.ID namespaceId = getNamespaceIdFromTableId(tableOp, tableId);
 
         final boolean canExport;
@@ -525,7 +515,7 @@ class FateServiceHandler implements FateService.Iface {
 
         final boolean canBulkImport;
         try {
-          String tableName = Tables.getTableName(master.getInstance(), tableId);
+          String tableName = Tables.getTableName(master, tableId);
           canBulkImport = master.security.canBulkImport(c, tableId, tableName, dir, null,
               namespaceId);
         } catch (ThriftSecurityException e) {
diff --git a/server/master/src/main/java/org/apache/accumulo/master/Master.java b/server/master/src/main/java/org/apache/accumulo/master/Master.java
index 22e1b82..1a4563e 100644
--- a/server/master/src/main/java/org/apache/accumulo/master/Master.java
+++ b/server/master/src/main/java/org/apache/accumulo/master/Master.java
@@ -410,7 +410,7 @@ public class Master extends AccumuloServerContext
           String ns = namespace.getFirst();
           Namespace.ID id = namespace.getSecond();
           log.debug("Upgrade creating namespace \"{}\" (ID: {})", ns, id);
-          if (!Namespaces.exists(getInstance(), id))
+          if (!Namespaces.exists(this, id))
             TableManager.prepareNewNamespaceState(getInstanceID(), id, ns, NodeExistsPolicy.SKIP);
         }
 
@@ -943,7 +943,7 @@ public class Master extends AccumuloServerContext
      */
     private void cleanupOfflineMigrations() {
       TableManager manager = TableManager.getInstance();
-      for (Table.ID tableId : Tables.getIdToNameMap(getInstance()).keySet()) {
+      for (Table.ID tableId : Tables.getIdToNameMap(Master.this).keySet()) {
         TableState state = manager.getTableState(tableId);
         if (TableState.OFFLINE == state) {
           clearMigrations(tableId);
@@ -1652,7 +1652,7 @@ public class Master extends AccumuloServerContext
     }
     TableManager manager = TableManager.getInstance();
 
-    for (Table.ID tableId : Tables.getIdToNameMap(getInstance()).keySet()) {
+    for (Table.ID tableId : Tables.getIdToNameMap(this).keySet()) {
       TableState state = manager.getTableState(tableId);
       if (state != null) {
         if (state == TableState.ONLINE)
@@ -1670,7 +1670,7 @@ public class Master extends AccumuloServerContext
   @Override
   public Collection<MergeInfo> merges() {
     List<MergeInfo> result = new ArrayList<>();
-    for (Table.ID tableId : Tables.getIdToNameMap(getInstance()).keySet()) {
+    for (Table.ID tableId : Tables.getIdToNameMap(this).keySet()) {
       result.add(getMergeInfo(tableId));
     }
     return result;
@@ -1781,7 +1781,7 @@ public class Master extends AccumuloServerContext
 
   public void markDeadServerLogsAsClosed(Map<TServerInstance,List<Path>> logsForDeadServers)
       throws WalMarkerException {
-    WalStateManager mgr = new WalStateManager(getInstance(), ZooReaderWriter.getInstance());
+    WalStateManager mgr = new WalStateManager(this, ZooReaderWriter.getInstance());
     for (Entry<TServerInstance,List<Path>> server : logsForDeadServers.entrySet()) {
       for (Path path : server.getValue()) {
         mgr.closeWal(server.getKey(), path);
diff --git a/server/master/src/main/java/org/apache/accumulo/master/MasterClientServiceHandler.java b/server/master/src/main/java/org/apache/accumulo/master/MasterClientServiceHandler.java
index 7863319..600d61d 100644
--- a/server/master/src/main/java/org/apache/accumulo/master/MasterClientServiceHandler.java
+++ b/server/master/src/main/java/org/apache/accumulo/master/MasterClientServiceHandler.java
@@ -33,13 +33,13 @@ import org.apache.accumulo.core.client.AccumuloException;
 import org.apache.accumulo.core.client.AccumuloSecurityException;
 import org.apache.accumulo.core.client.BatchScanner;
 import org.apache.accumulo.core.client.Connector;
-import org.apache.accumulo.core.client.Instance;
 import org.apache.accumulo.core.client.IsolatedScanner;
 import org.apache.accumulo.core.client.RowIterator;
 import org.apache.accumulo.core.client.Scanner;
 import org.apache.accumulo.core.client.TableNotFoundException;
 import org.apache.accumulo.core.client.admin.DelegationTokenConfig;
 import org.apache.accumulo.core.client.impl.AuthenticationTokenIdentifier;
+import org.apache.accumulo.core.client.impl.ClientContext;
 import org.apache.accumulo.core.client.impl.DelegationTokenConfigSerializer;
 import org.apache.accumulo.core.client.impl.Namespace;
 import org.apache.accumulo.core.client.impl.Table;
@@ -444,7 +444,7 @@ public class MasterClientServiceHandler extends FateServiceHandler
       throws ThriftSecurityException, ThriftTableOperationException {
 
     Namespace.ID namespaceId = null;
-    namespaceId = ClientServiceHandler.checkNamespaceId(master.getInstance(), namespace, op);
+    namespaceId = ClientServiceHandler.checkNamespaceId(master, namespace, op);
 
     if (!master.security.canAlterNamespace(c, namespaceId))
       throw new ThriftSecurityException(c.getPrincipal(), SecurityErrorCode.PERMISSION_DENIED);
@@ -458,7 +458,7 @@ public class MasterClientServiceHandler extends FateServiceHandler
     } catch (KeeperException.NoNodeException e) {
       // race condition... namespace no longer exists? This call will throw an exception if the
       // namespace was deleted:
-      ClientServiceHandler.checkNamespaceId(master.getInstance(), namespace, op);
+      ClientServiceHandler.checkNamespaceId(master, namespace, op);
       log.info("Error altering namespace property", e);
       throw new ThriftTableOperationException(namespaceId.canonicalID(), namespace, op,
           TableOperationExceptionType.OTHER, "Problem altering namespaceproperty");
@@ -471,7 +471,7 @@ public class MasterClientServiceHandler extends FateServiceHandler
 
   private void alterTableProperty(TCredentials c, String tableName, String property, String value,
       TableOperation op) throws ThriftSecurityException, ThriftTableOperationException {
-    final Table.ID tableId = ClientServiceHandler.checkTableId(master.getInstance(), tableName, op);
+    final Table.ID tableId = ClientServiceHandler.checkTableId(master, tableName, op);
     Namespace.ID namespaceId = getNamespaceIdFromTableId(op, tableId);
     if (!master.security.canAlterTable(c, tableId, namespaceId))
       throw new ThriftSecurityException(c.getPrincipal(), SecurityErrorCode.PERMISSION_DENIED);
@@ -485,7 +485,7 @@ public class MasterClientServiceHandler extends FateServiceHandler
     } catch (KeeperException.NoNodeException e) {
       // race condition... table no longer exists? This call will throw an exception if the table
       // was deleted:
-      ClientServiceHandler.checkTableId(master.getInstance(), tableName, op);
+      ClientServiceHandler.checkTableId(master, tableName, op);
       log.info("Error altering table property", e);
       throw new ThriftTableOperationException(tableId.canonicalID(), tableName, op,
           TableOperationExceptionType.OTHER, "Problem altering table property");
@@ -560,7 +560,7 @@ public class MasterClientServiceHandler extends FateServiceHandler
       throw new RuntimeException("Failed to obtain connector", e);
     }
 
-    final Text tableId = new Text(getTableId(master.getInstance(), tableName).getUtf8());
+    final Text tableId = new Text(getTableId(master, tableName).getUtf8());
 
     drainLog.trace("Waiting for {} to be replicated for {}", logsToWatch, tableId);
 
@@ -598,9 +598,9 @@ public class MasterClientServiceHandler extends FateServiceHandler
     }
   }
 
-  protected Table.ID getTableId(Instance instance, String tableName)
+  protected Table.ID getTableId(ClientContext context, String tableName)
       throws ThriftTableOperationException {
-    return ClientServiceHandler.checkTableId(instance, tableName, null);
+    return ClientServiceHandler.checkTableId(context, tableName, null);
   }
 
   /**
diff --git a/server/master/src/main/java/org/apache/accumulo/master/TabletGroupWatcher.java b/server/master/src/main/java/org/apache/accumulo/master/TabletGroupWatcher.java
index 03dec37..3f1bc82 100644
--- a/server/master/src/main/java/org/apache/accumulo/master/TabletGroupWatcher.java
+++ b/server/master/src/main/java/org/apache/accumulo/master/TabletGroupWatcher.java
@@ -148,7 +148,7 @@ abstract class TabletGroupWatcher extends Daemon {
     int[] oldCounts = new int[TabletState.values().length];
     EventCoordinator.Listener eventListener = this.master.nextEvent.getListener();
 
-    WalStateManager wals = new WalStateManager(master.getInstance(), ZooReaderWriter.getInstance());
+    WalStateManager wals = new WalStateManager(master, ZooReaderWriter.getInstance());
 
     while (this.master.stillMaster()) {
       // slow things down a little, otherwise we spam the logs when there are many wake-up events
diff --git a/server/master/src/main/java/org/apache/accumulo/master/tableOps/ClonePermissions.java b/server/master/src/main/java/org/apache/accumulo/master/tableOps/ClonePermissions.java
index 95eb44d..62e0985 100644
--- a/server/master/src/main/java/org/apache/accumulo/master/tableOps/ClonePermissions.java
+++ b/server/master/src/main/java/org/apache/accumulo/master/tableOps/ClonePermissions.java
@@ -60,7 +60,7 @@ class ClonePermissions extends MasterRepo {
     // this way concurrent users will not get a spurious pemission denied
     // error
     try {
-      return new CloneZookeeper(cloneInfo);
+      return new CloneZookeeper(cloneInfo, environment);
     } catch (NamespaceNotFoundException e) {
       throw new AcceptableThriftTableOperationException(null, cloneInfo.tableName,
           TableOperation.CLONE, TableOperationExceptionType.NAMESPACE_NOTFOUND,
diff --git a/server/master/src/main/java/org/apache/accumulo/master/tableOps/CloneZookeeper.java b/server/master/src/main/java/org/apache/accumulo/master/tableOps/CloneZookeeper.java
index f991f5b..dcf73ab 100644
--- a/server/master/src/main/java/org/apache/accumulo/master/tableOps/CloneZookeeper.java
+++ b/server/master/src/main/java/org/apache/accumulo/master/tableOps/CloneZookeeper.java
@@ -17,13 +17,13 @@
 package org.apache.accumulo.master.tableOps;
 
 import org.apache.accumulo.core.client.NamespaceNotFoundException;
+import org.apache.accumulo.core.client.impl.ClientContext;
 import org.apache.accumulo.core.client.impl.Namespaces;
 import org.apache.accumulo.core.client.impl.Tables;
 import org.apache.accumulo.core.client.impl.thrift.TableOperation;
 import org.apache.accumulo.fate.Repo;
 import org.apache.accumulo.fate.zookeeper.ZooUtil.NodeExistsPolicy;
 import org.apache.accumulo.master.Master;
-import org.apache.accumulo.server.client.HdfsZooInstance;
 import org.apache.accumulo.server.tables.TableManager;
 
 class CloneZookeeper extends MasterRepo {
@@ -32,9 +32,10 @@ class CloneZookeeper extends MasterRepo {
 
   private CloneInfo cloneInfo;
 
-  public CloneZookeeper(CloneInfo cloneInfo) throws NamespaceNotFoundException {
+  public CloneZookeeper(CloneInfo cloneInfo, ClientContext context)
+      throws NamespaceNotFoundException {
     this.cloneInfo = cloneInfo;
-    this.cloneInfo.namespaceId = Namespaces.getNamespaceId(HdfsZooInstance.getInstance(),
+    this.cloneInfo.namespaceId = Namespaces.getNamespaceId(context,
         Tables.qualify(this.cloneInfo.tableName).getFirst());
   }
 
@@ -53,8 +54,8 @@ class CloneZookeeper extends MasterRepo {
     try {
       // write tableName & tableId to zookeeper
 
-      Utils.checkTableDoesNotExist(environment.getInstance(), cloneInfo.tableName,
-          cloneInfo.tableId, TableOperation.CLONE);
+      Utils.checkTableDoesNotExist(environment, cloneInfo.tableName, cloneInfo.tableId,
+          TableOperation.CLONE);
 
       TableManager.getInstance().cloneTable(cloneInfo.srcTableId, cloneInfo.tableId,
           cloneInfo.tableName, cloneInfo.namespaceId, cloneInfo.propertiesToSet,
diff --git a/server/master/src/main/java/org/apache/accumulo/master/tableOps/ImportPopulateZookeeper.java b/server/master/src/main/java/org/apache/accumulo/master/tableOps/ImportPopulateZookeeper.java
index ee5e1fb..dfd5f0c 100644
--- a/server/master/src/main/java/org/apache/accumulo/master/tableOps/ImportPopulateZookeeper.java
+++ b/server/master/src/main/java/org/apache/accumulo/master/tableOps/ImportPopulateZookeeper.java
@@ -76,11 +76,11 @@ class ImportPopulateZookeeper extends MasterRepo {
       // write tableName & tableId to zookeeper
       Instance instance = env.getInstance();
 
-      Utils.checkTableDoesNotExist(instance, tableInfo.tableName, tableInfo.tableId,
+      Utils.checkTableDoesNotExist(env, tableInfo.tableName, tableInfo.tableId,
           TableOperation.CREATE);
 
       String namespace = Tables.qualify(tableInfo.tableName).getFirst();
-      Namespace.ID namespaceId = Namespaces.getNamespaceId(instance, namespace);
+      Namespace.ID namespaceId = Namespaces.getNamespaceId(env, namespace);
       TableManager.getInstance().addTable(tableInfo.tableId, namespaceId, tableInfo.tableName,
           NodeExistsPolicy.OVERWRITE);
 
diff --git a/server/master/src/main/java/org/apache/accumulo/master/tableOps/PopulateZookeeper.java b/server/master/src/main/java/org/apache/accumulo/master/tableOps/PopulateZookeeper.java
index 2301d33..1e106b2 100644
--- a/server/master/src/main/java/org/apache/accumulo/master/tableOps/PopulateZookeeper.java
+++ b/server/master/src/main/java/org/apache/accumulo/master/tableOps/PopulateZookeeper.java
@@ -51,7 +51,7 @@ class PopulateZookeeper extends MasterRepo {
       // write tableName & tableId to zookeeper
       Instance instance = master.getInstance();
 
-      Utils.checkTableDoesNotExist(instance, tableInfo.tableName, tableInfo.tableId,
+      Utils.checkTableDoesNotExist(master, tableInfo.tableName, tableInfo.tableId,
           TableOperation.CREATE);
 
       TableManager.getInstance().addTable(tableInfo.tableId, tableInfo.namespaceId,
diff --git a/server/master/src/main/java/org/apache/accumulo/master/tableOps/PopulateZookeeperWithNamespace.java b/server/master/src/main/java/org/apache/accumulo/master/tableOps/PopulateZookeeperWithNamespace.java
index 3d1dcc8..94986e3 100644
--- a/server/master/src/main/java/org/apache/accumulo/master/tableOps/PopulateZookeeperWithNamespace.java
+++ b/server/master/src/main/java/org/apache/accumulo/master/tableOps/PopulateZookeeperWithNamespace.java
@@ -18,7 +18,6 @@ package org.apache.accumulo.master.tableOps;
 
 import java.util.Map.Entry;
 
-import org.apache.accumulo.core.client.Instance;
 import org.apache.accumulo.core.client.impl.Tables;
 import org.apache.accumulo.core.client.impl.thrift.TableOperation;
 import org.apache.accumulo.fate.Repo;
@@ -48,19 +47,17 @@ class PopulateZookeeperWithNamespace extends MasterRepo {
 
     Utils.tableNameLock.lock();
     try {
-      Instance instance = master.getInstance();
-
-      Utils.checkNamespaceDoesNotExist(instance, namespaceInfo.namespaceName,
+      Utils.checkNamespaceDoesNotExist(master, namespaceInfo.namespaceName,
           namespaceInfo.namespaceId, TableOperation.CREATE);
 
-      TableManager.prepareNewNamespaceState(instance.getInstanceID(), namespaceInfo.namespaceId,
+      TableManager.prepareNewNamespaceState(master.getInstanceID(), namespaceInfo.namespaceId,
           namespaceInfo.namespaceName, NodeExistsPolicy.OVERWRITE);
 
       for (Entry<String,String> entry : namespaceInfo.props.entrySet())
         NamespacePropUtil.setNamespaceProperty(namespaceInfo.namespaceId, entry.getKey(),
             entry.getValue());
 
-      Tables.clearCache(instance);
+      Tables.clearCache(master);
 
       return new FinishCreateNamespace(namespaceInfo);
     } finally {
diff --git a/server/master/src/main/java/org/apache/accumulo/master/tableOps/RenameNamespace.java b/server/master/src/main/java/org/apache/accumulo/master/tableOps/RenameNamespace.java
index f795e9f..eb2b780 100644
--- a/server/master/src/main/java/org/apache/accumulo/master/tableOps/RenameNamespace.java
+++ b/server/master/src/main/java/org/apache/accumulo/master/tableOps/RenameNamespace.java
@@ -17,7 +17,6 @@
 package org.apache.accumulo.master.tableOps;
 
 import org.apache.accumulo.core.Constants;
-import org.apache.accumulo.core.client.Instance;
 import org.apache.accumulo.core.client.impl.AcceptableThriftTableOperationException;
 import org.apache.accumulo.core.client.impl.Namespace;
 import org.apache.accumulo.core.client.impl.Tables;
@@ -52,13 +51,11 @@ public class RenameNamespace extends MasterRepo {
   @Override
   public Repo<Master> call(long id, Master master) throws Exception {
 
-    Instance instance = master.getInstance();
-
     IZooReaderWriter zoo = ZooReaderWriter.getInstance();
 
     Utils.tableNameLock.lock();
     try {
-      Utils.checkNamespaceDoesNotExist(instance, newName, namespaceId, TableOperation.RENAME);
+      Utils.checkNamespaceDoesNotExist(master, newName, namespaceId, TableOperation.RENAME);
 
       final String tap = ZooUtil.getRoot(master.getInstanceID()) + Constants.ZNAMESPACES + "/"
           + namespaceId + Constants.ZNAMESPACE_NAME;
@@ -76,7 +73,7 @@ public class RenameNamespace extends MasterRepo {
           return newName.getBytes();
         }
       });
-      Tables.clearCache(instance);
+      Tables.clearCache(master);
     } finally {
       Utils.tableNameLock.unlock();
       Utils.unreserveNamespace(namespaceId, id, true);
diff --git a/server/master/src/main/java/org/apache/accumulo/master/tableOps/RenameTable.java b/server/master/src/main/java/org/apache/accumulo/master/tableOps/RenameTable.java
index 6e2a3bd..03e14cf 100644
--- a/server/master/src/main/java/org/apache/accumulo/master/tableOps/RenameTable.java
+++ b/server/master/src/main/java/org/apache/accumulo/master/tableOps/RenameTable.java
@@ -66,8 +66,8 @@ public class RenameTable extends MasterRepo {
     Pair<String,String> qualifiedNewTableName = Tables.qualify(newTableName);
 
     // ensure no attempt is made to rename across namespaces
-    if (newTableName.contains(".") && !namespaceId
-        .equals(Namespaces.getNamespaceId(instance, qualifiedNewTableName.getFirst())))
+    if (newTableName.contains(".")
+        && !namespaceId.equals(Namespaces.getNamespaceId(master, qualifiedNewTableName.getFirst())))
       throw new AcceptableThriftTableOperationException(tableId.canonicalID(), oldTableName,
           TableOperation.RENAME, TableOperationExceptionType.INVALID_NAME,
           "Namespace in new table name does not match the old table name");
@@ -76,7 +76,7 @@ public class RenameTable extends MasterRepo {
 
     Utils.tableNameLock.lock();
     try {
-      Utils.checkTableDoesNotExist(instance, newTableName, tableId, TableOperation.RENAME);
+      Utils.checkTableDoesNotExist(master, newTableName, tableId, TableOperation.RENAME);
 
       final String newName = qualifiedNewTableName.getSecond();
       final String oldName = qualifiedOldTableName.getSecond();
diff --git a/server/master/src/main/java/org/apache/accumulo/master/tableOps/Utils.java b/server/master/src/main/java/org/apache/accumulo/master/tableOps/Utils.java
index 5626978..b8fa377 100644
--- a/server/master/src/main/java/org/apache/accumulo/master/tableOps/Utils.java
+++ b/server/master/src/main/java/org/apache/accumulo/master/tableOps/Utils.java
@@ -28,6 +28,7 @@ import org.apache.accumulo.core.Constants;
 import org.apache.accumulo.core.client.Instance;
 import org.apache.accumulo.core.client.impl.AbstractId;
 import org.apache.accumulo.core.client.impl.AcceptableThriftTableOperationException;
+import org.apache.accumulo.core.client.impl.ClientContext;
 import org.apache.accumulo.core.client.impl.Namespace;
 import org.apache.accumulo.core.client.impl.Namespaces;
 import org.apache.accumulo.core.client.impl.Table;
@@ -49,10 +50,10 @@ public class Utils {
   private static final byte[] ZERO_BYTE = {'0'};
   private static final Logger log = LoggerFactory.getLogger(Utils.class);
 
-  static void checkTableDoesNotExist(Instance instance, String tableName, Table.ID tableId,
+  static void checkTableDoesNotExist(ClientContext context, String tableName, Table.ID tableId,
       TableOperation operation) throws AcceptableThriftTableOperationException {
 
-    Table.ID id = Tables.getNameToIdMap(instance).get(tableName);
+    Table.ID id = Tables.getNameToIdMap(context).get(tableName);
 
     if (id != null && !id.equals(tableId))
       throw new AcceptableThriftTableOperationException(null, tableName, operation,
@@ -170,11 +171,11 @@ public class Utils {
     return Utils.getLock(tableId, tid, false);
   }
 
-  static void checkNamespaceDoesNotExist(Instance instance, String namespace,
+  static void checkNamespaceDoesNotExist(ClientContext context, String namespace,
       Namespace.ID namespaceId, TableOperation operation)
       throws AcceptableThriftTableOperationException {
 
-    Namespace.ID n = Namespaces.lookupNamespaceId(instance, namespace);
+    Namespace.ID n = Namespaces.lookupNamespaceId(context, namespace);
 
     if (n != null && !n.equals(namespaceId))
       throw new AcceptableThriftTableOperationException(null, namespace, operation,
diff --git a/server/monitor/src/main/java/org/apache/accumulo/monitor/rest/problems/ProblemsResource.java b/server/monitor/src/main/java/org/apache/accumulo/monitor/rest/problems/ProblemsResource.java
index 75b10f8..8bc0495 100644
--- a/server/monitor/src/main/java/org/apache/accumulo/monitor/rest/problems/ProblemsResource.java
+++ b/server/monitor/src/main/java/org/apache/accumulo/monitor/rest/problems/ProblemsResource.java
@@ -37,7 +37,6 @@ import javax.ws.rs.core.MediaType;
 import org.apache.accumulo.core.client.impl.Table;
 import org.apache.accumulo.core.client.impl.Tables;
 import org.apache.accumulo.monitor.Monitor;
-import org.apache.accumulo.server.client.HdfsZooInstance;
 import org.apache.accumulo.server.problems.ProblemReport;
 import org.apache.accumulo.server.problems.ProblemReports;
 import org.apache.accumulo.server.problems.ProblemType;
@@ -81,8 +80,7 @@ public class ProblemsResource {
           }
         }
 
-        String tableName = Tables.getPrintableTableInfoFromId(HdfsZooInstance.getInstance(),
-            entry.getKey());
+        String tableName = Tables.getPrintableTableInfoFromId(Monitor.getContext(), entry.getKey());
 
         problems.addProblemSummary(new ProblemSummaryInformation(tableName, entry.getKey(),
             readCount, writeCount, loadCount));
@@ -132,7 +130,7 @@ public class ProblemsResource {
         while (iter.hasNext())
           problemReports.add(iter.next());
         for (ProblemReport pr : problemReports) {
-          String tableName = Tables.getPrintableTableInfoFromId(HdfsZooInstance.getInstance(),
+          String tableName = Tables.getPrintableTableInfoFromId(Monitor.getContext(),
               pr.getTableId());
 
           problems.addProblemDetail(
diff --git a/server/monitor/src/main/java/org/apache/accumulo/monitor/rest/replication/ReplicationResource.java b/server/monitor/src/main/java/org/apache/accumulo/monitor/rest/replication/ReplicationResource.java
index 82d2692..852209e 100644
--- a/server/monitor/src/main/java/org/apache/accumulo/monitor/rest/replication/ReplicationResource.java
+++ b/server/monitor/src/main/java/org/apache/accumulo/monitor/rest/replication/ReplicationResource.java
@@ -112,7 +112,7 @@ public class ReplicationResource {
     // Number of files per target we have to replicate
     Map<ReplicationTarget,Long> targetCounts = new HashMap<>();
 
-    Map<String,Table.ID> tableNameToId = Tables.getNameToIdMap(conn.getInstance());
+    Map<String,Table.ID> tableNameToId = Tables.getNameToIdMap(Monitor.getContext());
     Map<Table.ID,String> tableIdToName = invert(tableNameToId);
 
     for (String table : tops.list()) {
diff --git a/server/monitor/src/main/java/org/apache/accumulo/monitor/rest/tables/TablesResource.java b/server/monitor/src/main/java/org/apache/accumulo/monitor/rest/tables/TablesResource.java
index 321c62f..b19beae 100644
--- a/server/monitor/src/main/java/org/apache/accumulo/monitor/rest/tables/TablesResource.java
+++ b/server/monitor/src/main/java/org/apache/accumulo/monitor/rest/tables/TablesResource.java
@@ -45,7 +45,6 @@ import org.apache.accumulo.core.metadata.RootTable;
 import org.apache.accumulo.monitor.Monitor;
 import org.apache.accumulo.monitor.rest.tservers.TabletServer;
 import org.apache.accumulo.monitor.rest.tservers.TabletServers;
-import org.apache.accumulo.server.client.HdfsZooInstance;
 import org.apache.accumulo.server.master.state.MetaDataTableScanner;
 import org.apache.accumulo.server.master.state.TabletLocationState;
 import org.apache.accumulo.server.tables.TableManager;
@@ -83,7 +82,7 @@ public class TablesResource {
     TableManager tableManager = TableManager.getInstance();
 
     // Add tables to the list
-    for (Map.Entry<String,Table.ID> entry : Tables.getNameToIdMap(HdfsZooInstance.getInstance())
+    for (Map.Entry<String,Table.ID> entry : Tables.getNameToIdMap(Monitor.getContext())
         .entrySet()) {
       String tableName = entry.getKey();
       Table.ID tableId = entry.getValue();
diff --git a/server/monitor/src/main/java/org/apache/accumulo/monitor/rest/tservers/TabletServerResource.java b/server/monitor/src/main/java/org/apache/accumulo/monitor/rest/tservers/TabletServerResource.java
index bb5eef3..da4fcc6 100644
--- a/server/monitor/src/main/java/org/apache/accumulo/monitor/rest/tservers/TabletServerResource.java
+++ b/server/monitor/src/main/java/org/apache/accumulo/monitor/rest/tservers/TabletServerResource.java
@@ -56,7 +56,6 @@ import org.apache.accumulo.core.util.HostAndPort;
 import org.apache.accumulo.core.zookeeper.ZooUtil;
 import org.apache.accumulo.monitor.Monitor;
 import org.apache.accumulo.monitor.rest.master.MasterResource;
-import org.apache.accumulo.server.client.HdfsZooInstance;
 import org.apache.accumulo.server.master.state.DeadServerList;
 import org.apache.accumulo.server.util.ActionStatsUpdator;
 
@@ -326,7 +325,7 @@ public class TabletServerResource {
       String obscuredExtent = Base64.getEncoder().encodeToString(digester.digest());
       String displayExtent = String.format("[%s]", obscuredExtent);
 
-      String tableName = Tables.getPrintableTableInfoFromId(HdfsZooInstance.getInstance(), tableId);
+      String tableName = Tables.getPrintableTableInfoFromId(Monitor.getContext(), tableId);
 
       currentOperations.add(
           new CurrentOperations(tableName, tableId, displayExtent, info.numEntries, info.ingestRate,
diff --git a/server/monitor/src/main/java/org/apache/accumulo/monitor/view/WebViews.java b/server/monitor/src/main/java/org/apache/accumulo/monitor/view/WebViews.java
index 0e7c08d..2bfac79 100644
--- a/server/monitor/src/main/java/org/apache/accumulo/monitor/view/WebViews.java
+++ b/server/monitor/src/main/java/org/apache/accumulo/monitor/view/WebViews.java
@@ -292,8 +292,7 @@ public class WebViews {
       @PathParam("tableID") @NotNull @Pattern(regexp = ALPHA_NUM_REGEX_TABLE_ID) String tableID)
       throws TableNotFoundException {
 
-    String tableName = Tables.getTableName(Monitor.getContext().getInstance(),
-        Table.ID.of(tableID));
+    String tableName = Tables.getTableName(Monitor.getContext(), Table.ID.of(tableID));
 
     Map<String,Object> model = getModel();
     model.put("title", "Table Status");
diff --git a/server/monitor/src/test/java/org/apache/accumulo/monitor/it/WebViewsIT.java b/server/monitor/src/test/java/org/apache/accumulo/monitor/it/WebViewsIT.java
index 7882d4b..9814a3c 100644
--- a/server/monitor/src/test/java/org/apache/accumulo/monitor/it/WebViewsIT.java
+++ b/server/monitor/src/test/java/org/apache/accumulo/monitor/it/WebViewsIT.java
@@ -109,7 +109,7 @@ public class WebViewsIT extends JerseyTest {
     expect(Monitor.getContext()).andReturn(contextMock).anyTimes();
 
     PowerMock.mockStatic(Tables.class);
-    expect(Tables.getTableName(instanceMock, Table.ID.of("foo"))).andReturn("bar");
+    expect(Tables.getTableName(contextMock, Table.ID.of("foo"))).andReturn("bar");
     PowerMock.replayAll();
     org.easymock.EasyMock.replay(instanceMock, contextMock);
 
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 1d416b4..1e56ed8 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
@@ -369,7 +369,7 @@ public class TabletServer extends AccumuloServerContext implements Runnable {
     log.info("Version " + Constants.VERSION);
     log.info("Instance " + getInstanceID());
     this.sessionManager = new SessionManager(aconf);
-    this.logSorter = new LogSorter(instance, fs, aconf);
+    this.logSorter = new LogSorter(this, fs, aconf);
     this.replWorker = new ReplicationWorker(this, fs);
     this.statsKeeper = new TabletStatsKeeper();
     SimpleTimer.getInstance(aconf).schedule(new Runnable() {
@@ -432,7 +432,7 @@ public class TabletServer extends AccumuloServerContext implements Runnable {
         TabletLocator.clearLocators();
       }
     }, jitter(TIME_BETWEEN_LOCATOR_CACHE_CLEARS), jitter(TIME_BETWEEN_LOCATOR_CACHE_CLEARS));
-    walMarker = new WalStateManager(instance, ZooReaderWriter.getInstance());
+    walMarker = new WalStateManager(this, ZooReaderWriter.getInstance());
 
     // Create the secret manager
     setSecretManager(new AuthenticationTokenSecretManager(instance,
diff --git a/server/tserver/src/main/java/org/apache/accumulo/tserver/log/LogSorter.java b/server/tserver/src/main/java/org/apache/accumulo/tserver/log/LogSorter.java
index f8f3d49..33d9138 100644
--- a/server/tserver/src/main/java/org/apache/accumulo/tserver/log/LogSorter.java
+++ b/server/tserver/src/main/java/org/apache/accumulo/tserver/log/LogSorter.java
@@ -29,7 +29,7 @@ import java.util.Map.Entry;
 import java.util.concurrent.ThreadPoolExecutor;
 
 import org.apache.accumulo.core.Constants;
-import org.apache.accumulo.core.client.Instance;
+import org.apache.accumulo.core.client.impl.ClientContext;
 import org.apache.accumulo.core.conf.AccumuloConfiguration;
 import org.apache.accumulo.core.conf.Property;
 import org.apache.accumulo.core.master.thrift.RecoveryStatus;
@@ -217,11 +217,11 @@ public class LogSorter {
   }
 
   ThreadPoolExecutor threadPool;
-  private final Instance instance;
+  private final ClientContext context;
   private double walBlockSize;
 
-  public LogSorter(Instance instance, VolumeManager fs, AccumuloConfiguration conf) {
-    this.instance = instance;
+  public LogSorter(ClientContext context, VolumeManager fs, AccumuloConfiguration conf) {
+    this.context = context;
     this.fs = fs;
     this.conf = conf;
     int threadPoolSize = conf.getCount(Property.TSERV_RECOVERY_MAX_CONCURRENT);
@@ -232,7 +232,7 @@ public class LogSorter {
   public void startWatchingForRecoveryLogs(ThreadPoolExecutor distWorkQThreadPool)
       throws KeeperException, InterruptedException {
     this.threadPool = distWorkQThreadPool;
-    new DistributedWorkQueue(ZooUtil.getRoot(instance) + Constants.ZRECOVERY, conf)
+    new DistributedWorkQueue(ZooUtil.getRoot(context.getInstanceID()) + Constants.ZRECOVERY, conf)
         .startProcessing(new LogProcessor(), this.threadPool);
   }
 
diff --git a/shell/src/main/java/org/apache/accumulo/shell/commands/ConfigCommand.java b/shell/src/main/java/org/apache/accumulo/shell/commands/ConfigCommand.java
index 0251112..d6aa017 100644
--- a/shell/src/main/java/org/apache/accumulo/shell/commands/ConfigCommand.java
+++ b/shell/src/main/java/org/apache/accumulo/shell/commands/ConfigCommand.java
@@ -167,8 +167,8 @@ public class ConfigCommand extends Command {
 
       final TreeMap<String,String> namespaceConfig = new TreeMap<>();
       if (tableName != null) {
-        String n = Namespaces.getNamespaceName(shellState.getInstance(), Tables.getNamespaceId(
-            shellState.getInstance(), Tables.getTableId(shellState.getInstance(), tableName)));
+        String n = Namespaces.getNamespaceName(shellState.getContext(), Tables.getNamespaceId(
+            shellState.getInstance(), Tables.getTableId(shellState.getContext(), tableName)));
         for (Entry<String,String> e : shellState.getConnector().namespaceOperations()
             .getProperties(n)) {
           namespaceConfig.put(e.getKey(), e.getValue());
diff --git a/shell/src/main/java/org/apache/accumulo/shell/commands/DUCommand.java b/shell/src/main/java/org/apache/accumulo/shell/commands/DUCommand.java
index 31d7ae3..3f83eca 100644
--- a/shell/src/main/java/org/apache/accumulo/shell/commands/DUCommand.java
+++ b/shell/src/main/java/org/apache/accumulo/shell/commands/DUCommand.java
@@ -21,7 +21,6 @@ import java.util.Arrays;
 import java.util.SortedSet;
 import java.util.TreeSet;
 
-import org.apache.accumulo.core.client.Instance;
 import org.apache.accumulo.core.client.NamespaceNotFoundException;
 import org.apache.accumulo.core.client.TableNotFoundException;
 import org.apache.accumulo.core.client.admin.DiskUsage;
@@ -50,10 +49,9 @@ public class DUCommand extends Command {
     }
 
     if (cl.hasOption(optNamespace.getOpt())) {
-      Instance instance = shellState.getInstance();
-      Namespace.ID namespaceId = Namespaces.getNamespaceId(instance,
+      Namespace.ID namespaceId = Namespaces.getNamespaceId(shellState.getContext(),
           cl.getOptionValue(optNamespace.getOpt()));
-      tables.addAll(Namespaces.getTableNames(instance, namespaceId));
+      tables.addAll(Namespaces.getTableNames(shellState.getContext(), namespaceId));
     }
 
     boolean prettyPrint = cl.hasOption(optHumanReadble.getOpt());
diff --git a/shell/src/main/java/org/apache/accumulo/shell/commands/DeleteNamespaceCommand.java b/shell/src/main/java/org/apache/accumulo/shell/commands/DeleteNamespaceCommand.java
index feedb2a..ac5a6a6 100644
--- a/shell/src/main/java/org/apache/accumulo/shell/commands/DeleteNamespaceCommand.java
+++ b/shell/src/main/java/org/apache/accumulo/shell/commands/DeleteNamespaceCommand.java
@@ -64,8 +64,8 @@ public class DeleteNamespaceCommand extends Command {
     boolean resetContext = false;
     String currentTable = shellState.getTableName();
 
-    Namespace.ID namespaceId = Namespaces.getNamespaceId(shellState.getInstance(), namespace);
-    List<String> tables = Namespaces.getTableNames(shellState.getInstance(), namespaceId);
+    Namespace.ID namespaceId = Namespaces.getNamespaceId(shellState.getContext(), namespace);
+    List<String> tables = Namespaces.getTableNames(shellState.getContext(), namespaceId);
     resetContext = tables.contains(currentTable);
 
     if (force)
diff --git a/shell/src/main/java/org/apache/accumulo/shell/commands/RenameNamespaceCommand.java b/shell/src/main/java/org/apache/accumulo/shell/commands/RenameNamespaceCommand.java
index 94e9409..c8df11c 100644
--- a/shell/src/main/java/org/apache/accumulo/shell/commands/RenameNamespaceCommand.java
+++ b/shell/src/main/java/org/apache/accumulo/shell/commands/RenameNamespaceCommand.java
@@ -45,16 +45,16 @@ public class RenameNamespaceCommand extends Command {
     boolean resetContext = false;
     Table.ID currentTableId = null;
     if (!(shellState.getTableName() == null) && !shellState.getTableName().isEmpty()) {
-      Namespace.ID namespaceId = Namespaces.getNamespaceId(shellState.getInstance(), old);
-      List<Table.ID> tableIds = Namespaces.getTableIds(shellState.getInstance(), namespaceId);
-      currentTableId = Tables.getTableId(shellState.getInstance(), shellState.getTableName());
+      Namespace.ID namespaceId = Namespaces.getNamespaceId(shellState.getContext(), old);
+      List<Table.ID> tableIds = Namespaces.getTableIds(shellState.getContext(), namespaceId);
+      currentTableId = Tables.getTableId(shellState.getContext(), shellState.getTableName());
       resetContext = tableIds.contains(currentTableId);
     }
 
     shellState.getConnector().namespaceOperations().rename(old, newer);
 
     if (resetContext) {
-      shellState.setTableName(Tables.getTableName(shellState.getInstance(), currentTableId));
+      shellState.setTableName(Tables.getTableName(shellState.getContext(), currentTableId));
     }
 
     return 0;
diff --git a/shell/src/main/java/org/apache/accumulo/shell/commands/TableOperation.java b/shell/src/main/java/org/apache/accumulo/shell/commands/TableOperation.java
index 54c0e0f..0249ba0 100644
--- a/shell/src/main/java/org/apache/accumulo/shell/commands/TableOperation.java
+++ b/shell/src/main/java/org/apache/accumulo/shell/commands/TableOperation.java
@@ -21,7 +21,6 @@ import java.util.Set;
 import java.util.SortedSet;
 import java.util.TreeSet;
 
-import org.apache.accumulo.core.client.Instance;
 import org.apache.accumulo.core.client.TableNotFoundException;
 import org.apache.accumulo.core.client.impl.Namespace;
 import org.apache.accumulo.core.client.impl.Namespaces;
@@ -57,11 +56,10 @@ public abstract class TableOperation extends Command {
     } else if (cl.hasOption(optTableName.getOpt())) {
       tableSet.add(cl.getOptionValue(optTableName.getOpt()));
     } else if (cl.hasOption(optNamespace.getOpt())) {
-      Instance instance = shellState.getInstance();
-      Namespace.ID namespaceId = Namespaces.getNamespaceId(instance,
+      Namespace.ID namespaceId = Namespaces.getNamespaceId(shellState.getContext(),
           cl.getOptionValue(optNamespace.getOpt()));
-      for (Table.ID tableId : Namespaces.getTableIds(instance, namespaceId)) {
-        tableSet.add(Tables.getTableName(instance, tableId));
+      for (Table.ID tableId : Namespaces.getTableIds(shellState.getContext(), namespaceId)) {
+        tableSet.add(Tables.getTableName(shellState.getContext(), tableId));
       }
     } else if (useCommandLine && cl.getArgs().length > 0) {
       for (String tableName : cl.getArgs()) {
diff --git a/test/src/main/java/org/apache/accumulo/test/ListTables.java b/test/src/main/java/org/apache/accumulo/test/ListTables.java
index 4aa1de0..edce280 100644
--- a/test/src/main/java/org/apache/accumulo/test/ListTables.java
+++ b/test/src/main/java/org/apache/accumulo/test/ListTables.java
@@ -29,7 +29,7 @@ public class ListTables {
   public static void main(String[] args) throws Exception {
     ClientOpts opts = new ClientOpts();
     opts.parseArgs(ListTables.class.getName(), args);
-    for (Entry<String,Table.ID> table : Tables.getNameToIdMap(opts.getInstance()).entrySet())
+    for (Entry<String,Table.ID> table : Tables.getNameToIdMap(opts.getClientContext()).entrySet())
       System.out.println(table.getKey() + " => " + table.getValue());
   }
 }
diff --git a/test/src/main/java/org/apache/accumulo/test/UnusedWALIT.java b/test/src/main/java/org/apache/accumulo/test/UnusedWALIT.java
index c03b6dd..609a571 100644
--- a/test/src/main/java/org/apache/accumulo/test/UnusedWALIT.java
+++ b/test/src/main/java/org/apache/accumulo/test/UnusedWALIT.java
@@ -27,6 +27,7 @@ import org.apache.accumulo.core.client.BatchWriterConfig;
 import org.apache.accumulo.core.client.Connector;
 import org.apache.accumulo.core.client.Instance;
 import org.apache.accumulo.core.client.Scanner;
+import org.apache.accumulo.core.client.impl.ClientContext;
 import org.apache.accumulo.core.conf.Property;
 import org.apache.accumulo.core.data.Key;
 import org.apache.accumulo.core.data.Mutation;
@@ -78,6 +79,7 @@ public class UnusedWALIT extends ConfigurableMacBase {
     c.tableOperations().create(bigTable);
     c.tableOperations().create(lilTable);
 
+    ClientContext context = getClientContext();
     Instance i = c.getInstance();
     zk = new ZooReaderWriter(c.info().getZooKeepers(), c.info().getZooKeepersSessionTimeOut(), "");
 
@@ -86,11 +88,11 @@ public class UnusedWALIT extends ConfigurableMacBase {
     scanSomeData(c, bigTable, 0, 10, 0, 10);
     writeSomeData(c, lilTable, 0, 1, 0, 1);
     scanSomeData(c, lilTable, 0, 1, 0, 1);
-    assertEquals(2, getWALCount(i, zk));
+    assertEquals(2, getWALCount(context, zk));
 
     // roll the logs by pushing data into bigTable
     writeSomeData(c, bigTable, 0, 3000, 0, 1000);
-    assertEquals(3, getWALCount(i, zk));
+    assertEquals(3, getWALCount(context, zk));
 
     // put some data in the latest log
     writeSomeData(c, lilTable, 1, 10, 0, 10);
@@ -130,8 +132,8 @@ public class UnusedWALIT extends ConfigurableMacBase {
     }
   }
 
-  private int getWALCount(Instance i, ZooReaderWriter zk) throws Exception {
-    WalStateManager wals = new WalStateManager(i, zk);
+  private int getWALCount(ClientContext context, ZooReaderWriter zk) throws Exception {
+    WalStateManager wals = new WalStateManager(context, zk);
     int result = 0;
     for (Entry<TServerInstance,List<UUID>> entry : wals.getAllMarkers().entrySet()) {
       result += entry.getValue().size();
diff --git a/test/src/main/java/org/apache/accumulo/test/VolumeIT.java b/test/src/main/java/org/apache/accumulo/test/VolumeIT.java
index cc36a30..4591445 100644
--- a/test/src/main/java/org/apache/accumulo/test/VolumeIT.java
+++ b/test/src/main/java/org/apache/accumulo/test/VolumeIT.java
@@ -453,7 +453,7 @@ public class VolumeIT extends ConfigurableMacBase {
         Instance i = conn.getInstance();
         ZooReaderWriter zk = new ZooReaderWriter(conn.info().getZooKeepers(),
             conn.info().getZooKeepersSessionTimeOut(), "");
-        WalStateManager wals = new WalStateManager(i, zk);
+        WalStateManager wals = new WalStateManager(getClientContext(), zk);
         try {
           outer: for (Entry<Path,WalState> entry : wals.getAllState().entrySet()) {
             for (Path path : paths) {
diff --git a/test/src/main/java/org/apache/accumulo/test/functional/ConfigurableMacBase.java b/test/src/main/java/org/apache/accumulo/test/functional/ConfigurableMacBase.java
index 089ecb0..90ee9c0 100644
--- a/test/src/main/java/org/apache/accumulo/test/functional/ConfigurableMacBase.java
+++ b/test/src/main/java/org/apache/accumulo/test/functional/ConfigurableMacBase.java
@@ -29,6 +29,7 @@ import org.apache.accumulo.core.client.AccumuloException;
 import org.apache.accumulo.core.client.AccumuloSecurityException;
 import org.apache.accumulo.core.client.ClientInfo;
 import org.apache.accumulo.core.client.Connector;
+import org.apache.accumulo.core.client.impl.ClientContext;
 import org.apache.accumulo.core.client.security.tokens.PasswordToken;
 import org.apache.accumulo.core.conf.ClientProperty;
 import org.apache.accumulo.core.conf.Property;
@@ -190,6 +191,10 @@ public class ConfigurableMacBase extends AccumuloITBase {
     return getCluster().getConnector("root", new PasswordToken(ROOT_PASSWORD));
   }
 
+  protected ClientContext getClientContext() {
+    return new ClientContext(getClientInfo());
+  }
+
   protected ClientInfo getClientInfo() {
     return Connector.builder()
         .forInstance(getCluster().getInstanceName(), getCluster().getZooKeepers())
diff --git a/test/src/main/java/org/apache/accumulo/test/functional/TabletStateChangeIteratorIT.java b/test/src/main/java/org/apache/accumulo/test/functional/TabletStateChangeIteratorIT.java
index 861b38b..8cceed1 100644
--- a/test/src/main/java/org/apache/accumulo/test/functional/TabletStateChangeIteratorIT.java
+++ b/test/src/main/java/org/apache/accumulo/test/functional/TabletStateChangeIteratorIT.java
@@ -244,7 +244,7 @@ public class TabletStateChangeIteratorIT extends AccumuloClusterHarness {
     @Override
     public Set<Table.ID> onlineTables() {
       ClientContext context = new ClientContext(getClientInfo());
-      Set<Table.ID> onlineTables = Tables.getIdToNameMap(context.getInstance()).keySet();
+      Set<Table.ID> onlineTables = Tables.getIdToNameMap(context).keySet();
       return Sets.filter(onlineTables,
           tableId -> Tables.getTableState(context, tableId) == TableState.ONLINE);
     }
diff --git a/test/src/main/java/org/apache/accumulo/test/functional/WALSunnyDayIT.java b/test/src/main/java/org/apache/accumulo/test/functional/WALSunnyDayIT.java
index c5c78a6..c6bd841 100644
--- a/test/src/main/java/org/apache/accumulo/test/functional/WALSunnyDayIT.java
+++ b/test/src/main/java/org/apache/accumulo/test/functional/WALSunnyDayIT.java
@@ -42,6 +42,7 @@ import java.util.concurrent.TimeUnit;
 import org.apache.accumulo.core.client.BatchWriter;
 import org.apache.accumulo.core.client.Connector;
 import org.apache.accumulo.core.client.Scanner;
+import org.apache.accumulo.core.client.impl.ClientContext;
 import org.apache.accumulo.core.data.Key;
 import org.apache.accumulo.core.data.Mutation;
 import org.apache.accumulo.core.data.Value;
@@ -95,20 +96,21 @@ public class WALSunnyDayIT extends ConfigurableMacBase {
     MiniAccumuloClusterImpl mac = getCluster();
     MiniAccumuloClusterControl control = mac.getClusterControl();
     control.stop(GARBAGE_COLLECTOR);
-    Connector c = getConnector();
+    ClientContext context = getClientContext();
+    Connector c = context.getConnector();
     String tableName = getUniqueNames(1)[0];
     c.tableOperations().create(tableName);
     writeSomeData(c, tableName, 1, 1);
 
     // wal markers are added lazily
-    Map<String,Boolean> wals = getWALsAndAssertCount(c, 2);
+    Map<String,Boolean> wals = getWALsAndAssertCount(context, 2);
     for (Boolean b : wals.values()) {
       assertTrue("logs should be in use", b);
     }
 
     // roll log, get a new next
     writeSomeData(c, tableName, 1001, 50);
-    Map<String,Boolean> walsAfterRoll = getWALsAndAssertCount(c, 3);
+    Map<String,Boolean> walsAfterRoll = getWALsAndAssertCount(context, 3);
     assertTrue("new WALs should be a superset of the old WALs",
         walsAfterRoll.keySet().containsAll(wals.keySet()));
     assertEquals("all WALs should be in use", 3, countTrue(walsAfterRoll.values()));
@@ -119,14 +121,14 @@ public class WALSunnyDayIT extends ConfigurableMacBase {
     }
     sleepUninterruptibly(1, TimeUnit.SECONDS);
     // rolled WAL is no longer in use, but needs to be GC'd
-    Map<String,Boolean> walsAfterflush = getWALsAndAssertCount(c, 3);
+    Map<String,Boolean> walsAfterflush = getWALsAndAssertCount(context, 3);
     assertEquals("inUse should be 2", 2, countTrue(walsAfterflush.values()));
 
     // let the GC run for a little bit
     control.start(GARBAGE_COLLECTOR);
     sleepUninterruptibly(5, TimeUnit.SECONDS);
     // make sure the unused WAL goes away
-    getWALsAndAssertCount(c, 2);
+    getWALsAndAssertCount(context, 2);
     control.stop(GARBAGE_COLLECTOR);
     // restart the tserver, but don't run recovery on all tablets
     control.stop(TABLET_SERVER);
@@ -149,12 +151,12 @@ public class WALSunnyDayIT extends ConfigurableMacBase {
     verifySomeData(c, tableName, 1001 * 50 + 1);
     writeSomeData(c, tableName, 100, 100);
 
-    Map<String,Boolean> walsAfterRestart = getWALsAndAssertCount(c, 4);
+    Map<String,Boolean> walsAfterRestart = getWALsAndAssertCount(context, 4);
     // log.debug("wals after " + walsAfterRestart);
     assertEquals("used WALs after restart should be 4", 4, countTrue(walsAfterRestart.values()));
     control.start(GARBAGE_COLLECTOR);
     sleepUninterruptibly(5, TimeUnit.SECONDS);
-    Map<String,Boolean> walsAfterRestartAndGC = getWALsAndAssertCount(c, 2);
+    Map<String,Boolean> walsAfterRestartAndGC = getWALsAndAssertCount(context, 2);
     assertEquals("logs in use should be 2", 2, countTrue(walsAfterRestartAndGC.values()));
   }
 
@@ -221,7 +223,7 @@ public class WALSunnyDayIT extends ConfigurableMacBase {
   private final int TIMES_TO_COUNT = 20;
   private final int PAUSE_BETWEEN_COUNTS = 100;
 
-  private Map<String,Boolean> getWALsAndAssertCount(Connector c, int expectedCount)
+  private Map<String,Boolean> getWALsAndAssertCount(ClientContext c, int expectedCount)
       throws Exception {
     // see https://issues.apache.org/jira/browse/ACCUMULO-4110. Sometimes this test counts the logs
     // before
@@ -259,11 +261,11 @@ public class WALSunnyDayIT extends ConfigurableMacBase {
     return waitLonger;
   }
 
-  private Map<String,Boolean> _getWals(Connector c) throws Exception {
+  private Map<String,Boolean> _getWals(ClientContext c) throws Exception {
     Map<String,Boolean> result = new HashMap<>();
-    ZooReaderWriter zk = new ZooReaderWriter(c.info().getZooKeepers(),
-        c.info().getZooKeepersSessionTimeOut(), "");
-    WalStateManager wals = new WalStateManager(c.getInstance(), zk);
+    ZooReaderWriter zk = new ZooReaderWriter(c.getClientInfo().getZooKeepers(),
+        c.getClientInfo().getZooKeepersSessionTimeOut(), "");
+    WalStateManager wals = new WalStateManager(c, zk);
     for (Entry<Path,WalState> entry : wals.getAllState().entrySet()) {
       // WALs are in use if they are not unreferenced
       result.put(entry.getKey().toString(), entry.getValue() != WalState.UNREFERENCED);
diff --git a/test/src/main/java/org/apache/accumulo/test/replication/GarbageCollectorCommunicatesWithTServersIT.java b/test/src/main/java/org/apache/accumulo/test/replication/GarbageCollectorCommunicatesWithTServersIT.java
index a1192c2..6efa312 100644
--- a/test/src/main/java/org/apache/accumulo/test/replication/GarbageCollectorCommunicatesWithTServersIT.java
+++ b/test/src/main/java/org/apache/accumulo/test/replication/GarbageCollectorCommunicatesWithTServersIT.java
@@ -100,14 +100,15 @@ public class GarbageCollectorCommunicatesWithTServersIT extends ConfigurableMacB
    * Fetch all of the WALs referenced by tablets in the metadata table for this table
    */
   private Set<String> getWalsForTable(String tableName) throws Exception {
-    final Connector conn = getConnector();
+    final ClientContext context = new ClientContext(getClientInfo());
+    final Connector conn = context.getConnector();
     final String tableId = conn.tableOperations().tableIdMap().get(tableName);
 
     Assert.assertNotNull("Could not determine table ID for " + tableName, tableId);
 
     ZooReaderWriter zk = new ZooReaderWriter(conn.info().getZooKeepers(),
         conn.info().getZooKeepersSessionTimeOut(), "");
-    WalStateManager wals = new WalStateManager(conn.getInstance(), zk);
+    WalStateManager wals = new WalStateManager(context, zk);
 
     Set<String> result = new HashSet<>();
     for (Entry<Path,WalState> entry : wals.getAllState().entrySet()) {
diff --git a/test/src/main/java/org/apache/accumulo/test/replication/ReplicationIT.java b/test/src/main/java/org/apache/accumulo/test/replication/ReplicationIT.java
index 6f01a5f..4b75487 100644
--- a/test/src/main/java/org/apache/accumulo/test/replication/ReplicationIT.java
+++ b/test/src/main/java/org/apache/accumulo/test/replication/ReplicationIT.java
@@ -48,6 +48,7 @@ import org.apache.accumulo.core.client.Scanner;
 import org.apache.accumulo.core.client.TableNotFoundException;
 import org.apache.accumulo.core.client.TableOfflineException;
 import org.apache.accumulo.core.client.admin.TableOperations;
+import org.apache.accumulo.core.client.impl.ClientContext;
 import org.apache.accumulo.core.client.impl.Table;
 import org.apache.accumulo.core.conf.ClientProperty;
 import org.apache.accumulo.core.conf.Property;
@@ -141,8 +142,9 @@ public class ReplicationIT extends ConfigurableMacBase {
     hadoopCoreSite.set("fs.file.impl", RawLocalFileSystem.class.getName());
   }
 
-  private Multimap<String,Table.ID> getLogs(Connector conn) throws Exception {
+  private Multimap<String,Table.ID> getLogs(ClientContext context) throws Exception {
     // Map of server to tableId
+    Connector conn = context.getConnector();
     Multimap<TServerInstance,String> serverToTableID = HashMultimap.create();
     try (Scanner scanner = conn.createScanner(MetadataTable.NAME, Authorizations.EMPTY)) {
       scanner.setRange(MetadataSchema.TabletsSection.getRange());
@@ -157,7 +159,7 @@ public class ReplicationIT extends ConfigurableMacBase {
       Multimap<String,Table.ID> logs = HashMultimap.create();
       ZooReaderWriter zk = new ZooReaderWriter(conn.info().getZooKeepers(),
           conn.info().getZooKeepersSessionTimeOut(), "");
-      WalStateManager wals = new WalStateManager(conn.getInstance(), zk);
+      WalStateManager wals = new WalStateManager(context, zk);
       for (Entry<TServerInstance,List<UUID>> entry : wals.getAllMarkers().entrySet()) {
         for (UUID id : entry.getValue()) {
           Pair<WalState,Path> state = wals.state(entry.getKey(), id);
@@ -170,9 +172,10 @@ public class ReplicationIT extends ConfigurableMacBase {
     }
   }
 
-  private Multimap<String,Table.ID> getAllLogs(Connector conn) throws Exception {
-    Multimap<String,Table.ID> logs = getLogs(conn);
-    try (Scanner scanner = conn.createScanner(ReplicationTable.NAME, Authorizations.EMPTY)) {
+  private Multimap<String,Table.ID> getAllLogs(ClientContext context) throws Exception {
+    Multimap<String,Table.ID> logs = getLogs(context);
+    try (Scanner scanner = context.getConnector().createScanner(ReplicationTable.NAME,
+        Authorizations.EMPTY)) {
       StatusSection.limit(scanner);
       Text buff = new Text();
       for (Entry<Key,Value> entry : scanner) {
@@ -344,7 +347,7 @@ public class ReplicationIT extends ConfigurableMacBase {
     ZooReaderWriter zk = new ZooReaderWriter(conn.info().getZooKeepers(),
         conn.info().getZooKeepersSessionTimeOut(), "");
     while (wals.isEmpty() && attempts > 0) {
-      WalStateManager markers = new WalStateManager(i, zk);
+      WalStateManager markers = new WalStateManager(getClientContext(), zk);
       for (Entry<Path,WalState> entry : markers.getAllState().entrySet()) {
         wals.add(entry.getKey().toString());
       }
@@ -529,6 +532,7 @@ public class ReplicationIT extends ConfigurableMacBase {
 
   @Test
   public void replicationEntriesPrecludeWalDeletion() throws Exception {
+    final ClientContext context = getClientContext();
     final Connector conn = getConnector();
     String table1 = "table1", table2 = "table2", table3 = "table3";
     final Multimap<String,Table.ID> logs = HashMultimap.create();
@@ -541,7 +545,7 @@ public class ReplicationIT extends ConfigurableMacBase {
         // when that happens
         while (keepRunning.get()) {
           try {
-            logs.putAll(getAllLogs(conn));
+            logs.putAll(getAllLogs(context));
           } catch (Exception e) {
             log.error("Error getting logs", e);
           }
@@ -1100,6 +1104,7 @@ public class ReplicationIT extends ConfigurableMacBase {
   public void replicationRecordsAreClosedAfterGarbageCollection() throws Exception {
     getCluster().getClusterControl().stop(ServerType.GARBAGE_COLLECTOR);
 
+    final ClientContext context = getClientContext();
     final Connector conn = getConnector();
 
     ReplicationTable.setOnline(conn);
@@ -1117,7 +1122,7 @@ public class ReplicationIT extends ConfigurableMacBase {
         // when that happens
         while (keepRunning.get()) {
           try {
-            metadataWals.addAll(getLogs(conn).keySet());
+            metadataWals.addAll(getLogs(context).keySet());
           } catch (Exception e) {
             log.error("Metadata table doesn't exist");
           }
diff --git a/test/src/main/java/org/apache/accumulo/test/replication/ReplicationOperationsImplIT.java b/test/src/main/java/org/apache/accumulo/test/replication/ReplicationOperationsImplIT.java
index ed1fcdd..e646268 100644
--- a/test/src/main/java/org/apache/accumulo/test/replication/ReplicationOperationsImplIT.java
+++ b/test/src/main/java/org/apache/accumulo/test/replication/ReplicationOperationsImplIT.java
@@ -89,7 +89,7 @@ public class ReplicationOperationsImplIT extends ConfigurableMacBase {
 
     final MasterClientServiceHandler mcsh = new MasterClientServiceHandler(master) {
       @Override
-      protected Table.ID getTableId(Instance inst, String tableName)
+      protected Table.ID getTableId(ClientContext context, String tableName)
           throws ThriftTableOperationException {
         try {
           return Table.ID.of(conn.tableOperations().tableIdMap().get(tableName));