hbase-commits mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From st...@apache.org
Subject hbase git commit: HBASE-12471 Task 4. replace internal ConnectionManager#{delete, get}Connection use with #close, #createConnection (0.98, 0.99)
Date Tue, 18 Nov 2014 18:20:07 GMT
Repository: hbase
Updated Branches:
  refs/heads/branch-1 463198dcd -> 4f5cde8a6


HBASE-12471 Task 4. replace internal ConnectionManager#{delete,get}Connection use with #close, #createConnection (0.98, 0.99)

Conflicts:
	hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/wal/HLogSplitter.java
	hbase-server/src/test/java/org/apache/hadoop/hbase/client/TestMultiParallel.java
	hbase-server/src/test/java/org/apache/hadoop/hbase/mapreduce/TestLoadIncrementalHFilesSplitRecovery.java
	hbase-server/src/test/java/org/apache/hadoop/hbase/master/TestDistributedLogSplitting.java


Project: http://git-wip-us.apache.org/repos/asf/hbase/repo
Commit: http://git-wip-us.apache.org/repos/asf/hbase/commit/4f5cde8a
Tree: http://git-wip-us.apache.org/repos/asf/hbase/tree/4f5cde8a
Diff: http://git-wip-us.apache.org/repos/asf/hbase/diff/4f5cde8a

Branch: refs/heads/branch-1
Commit: 4f5cde8a698b4d416694842c2e82114a44fc0471
Parents: 463198d
Author: stack <stack@apache.org>
Authored: Mon Nov 17 22:32:56 2014 -0800
Committer: stack <stack@apache.org>
Committed: Tue Nov 18 10:19:55 2014 -0800

----------------------------------------------------------------------
 .../org/apache/hadoop/hbase/client/Admin.java   |   4 +-
 .../hadoop/hbase/client/AsyncProcess.java       |  22 +--
 .../hadoop/hbase/client/ConnectionManager.java  |   2 +-
 .../hadoop/hbase/client/ConnectionUtils.java    |   4 +-
 .../apache/hadoop/hbase/client/HBaseAdmin.java  |  71 +++-----
 .../apache/hadoop/hbase/client/MetaCache.java   |   1 +
 .../hadoop/hbase/client/RegionLocator.java      |   2 +-
 .../apache/hadoop/hbase/zookeeper/ZKConfig.java |  21 ++-
 .../hadoop/hbase/DistributedHBaseCluster.java   |  42 +++--
 .../hadoop/hbase/mapreduce/TableMapper.java     |   2 +-
 .../hbase/mapreduce/TableOutputFormat.java      |   1 -
 .../hbase/master/RegionPlacementMaintainer.java |  45 +++--
 .../hadoop/hbase/master/ServerManager.java      |  10 +-
 .../hbase/regionserver/HRegionServer.java       |   3 +-
 .../hbase/regionserver/SplitLogWorker.java      |   4 -
 .../hbase/regionserver/wal/HLogSplitter.java    |   7 +-
 .../org/apache/hadoop/hbase/HBaseCluster.java   |   7 +-
 .../apache/hadoop/hbase/MiniHBaseCluster.java   |   5 +-
 .../apache/hadoop/hbase/client/TestAdmin1.java  |   1 -
 .../hbase/client/TestHBaseAdminNoCluster.java   |  14 +-
 .../org/apache/hadoop/hbase/client/TestHCM.java | 179 ++++++++++---------
 .../hadoop/hbase/client/TestMultiParallel.java  |  26 ++-
 .../TestLoadIncrementalHFilesSplitRecovery.java |  83 ++++++---
 .../master/TestDistributedLogSplitting.java     |   8 +-
 .../regionserver/TestScannerWithBulkload.java   |   3 +-
 .../TestSplitTransactionOnCluster.java          |   6 +-
 .../security/access/TestAccessController2.java  |   2 +-
 27 files changed, 299 insertions(+), 276 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/hbase/blob/4f5cde8a/hbase-client/src/main/java/org/apache/hadoop/hbase/client/Admin.java
----------------------------------------------------------------------
diff --git a/hbase-client/src/main/java/org/apache/hadoop/hbase/client/Admin.java b/hbase-client/src/main/java/org/apache/hadoop/hbase/client/Admin.java
index ef2735c..e5435f5 100644
--- a/hbase-client/src/main/java/org/apache/hadoop/hbase/client/Admin.java
+++ b/hbase-client/src/main/java/org/apache/hadoop/hbase/client/Admin.java
@@ -591,7 +591,7 @@ public interface Admin extends Abortable, Closeable {
 
   /**
    * Compact all regions on the region server
-   * @param regionserver the region server name
+   * @param sn the region server name
    * @param major if it's major compaction
    * @throws IOException
    * @throws InterruptedException
@@ -1268,7 +1268,7 @@ public interface Admin extends Abortable, Closeable {
    * @return A RegionServerCoprocessorRpcChannel instance
    */
   CoprocessorRpcChannel coprocessorService(ServerName sn);
-  
+
 
   /**
    * Update the configuration and trigger an online config change

http://git-wip-us.apache.org/repos/asf/hbase/blob/4f5cde8a/hbase-client/src/main/java/org/apache/hadoop/hbase/client/AsyncProcess.java
----------------------------------------------------------------------
diff --git a/hbase-client/src/main/java/org/apache/hadoop/hbase/client/AsyncProcess.java b/hbase-client/src/main/java/org/apache/hadoop/hbase/client/AsyncProcess.java
index c182255..e29082d 100644
--- a/hbase-client/src/main/java/org/apache/hadoop/hbase/client/AsyncProcess.java
+++ b/hbase-client/src/main/java/org/apache/hadoop/hbase/client/AsyncProcess.java
@@ -161,7 +161,7 @@ class AsyncProcess {
   // TODO: many of the fields should be made private
   protected final long id;
 
-  protected final ClusterConnection hConnection;
+  protected final ClusterConnection connection;
   protected final RpcRetryingCallerFactory rpcCallerFactory;
   protected final RpcControllerFactory rpcFactory;
   protected final BatchErrors globalErrors;
@@ -244,7 +244,7 @@ class AsyncProcess {
       throw new IllegalArgumentException("HConnection cannot be null.");
     }
 
-    this.hConnection = hc;
+    this.connection = hc;
     this.pool = pool;
     this.globalErrors = useGlobalErrors ? new BatchErrors() : null;
 
@@ -338,7 +338,7 @@ class AsyncProcess {
         new HashMap<ServerName, MultiAction<Row>>();
     List<Action<Row>> retainedActions = new ArrayList<Action<Row>>(rows.size());
 
-    NonceGenerator ng = this.hConnection.getNonceGenerator();
+    NonceGenerator ng = this.connection.getNonceGenerator();
     long nonceGroup = ng.getNonceGroup(); // Currently, nonce group is per entire client.
 
     // Location errors that happen before we decide what requests to take.
@@ -361,7 +361,7 @@ class AsyncProcess {
         try {
           if (r == null) throw new IllegalArgumentException("#" + id + ", row cannot be null");
           // Make sure we get 0-s replica.
-          RegionLocations locs = hConnection.locateRegion(
+          RegionLocations locs = connection.locateRegion(
               tableName, r.getRow(), true, true, RegionReplicaUtil.DEFAULT_REPLICA_ID);
           if (locs == null || locs.isEmpty() || locs.getDefaultRegionLocation() == null) {
             throw new IOException("#" + id + ", no location found, aborting submit for"
@@ -533,7 +533,7 @@ class AsyncProcess {
 
     // The position will be used by the processBatch to match the object array returned.
     int posInList = -1;
-    NonceGenerator ng = this.hConnection.getNonceGenerator();
+    NonceGenerator ng = this.connection.getNonceGenerator();
     for (Row r : rows) {
       posInList++;
       if (r instanceof Put) {
@@ -908,7 +908,7 @@ class AsyncProcess {
           ", row cannot be null");
       RegionLocations loc = null;
       try {
-        loc = hConnection.locateRegion(
+        loc = connection.locateRegion(
             tableName, action.getAction().getRow(), useCache, true, action.getReplicaId());
       } catch (IOException ex) {
         manageLocationError(action, ex);
@@ -1023,7 +1023,7 @@ class AsyncProcess {
 
       if (tableName == null) {
         // tableName is null when we made a cross-table RPC call.
-        hConnection.clearCaches(server);
+        connection.clearCaches(server);
       }
       int failed = 0, stopped = 0;
       List<Action<Row>> toReplay = new ArrayList<Action<Row>>();
@@ -1034,7 +1034,7 @@ class AsyncProcess {
         // any of the regions in the MultiAction.
         // TODO: depending on type of exception we might not want to update cache at all?
         if (tableName != null) {
-          hConnection.updateCachedLocations(tableName, regionName, row, null, server);
+          connection.updateCachedLocations(tableName, regionName, row, null, server);
         }
         for (Action<Row> action : e.getValue()) {
           Retry retry = manageError(
@@ -1148,7 +1148,7 @@ class AsyncProcess {
             // Register corresponding failures once per server/once per region.
             if (!regionFailureRegistered) {
               regionFailureRegistered = true;
-              hConnection.updateCachedLocations(
+              connection.updateCachedLocations(
                   tableName, regionName, row.getRow(), result, server);
             }
             if (failureCount == 0) {
@@ -1197,7 +1197,7 @@ class AsyncProcess {
           errorsByServer.reportServerError(server);
           canRetry = errorsByServer.canRetryMore(numAttempt);
         }
-        hConnection.updateCachedLocations(
+        connection.updateCachedLocations(
             tableName, region, actions.get(0).getAction().getRow(), throwable, server);
         failureCount += actions.size();
 
@@ -1511,7 +1511,7 @@ class AsyncProcess {
   @VisibleForTesting
   protected MultiServerCallable<Row> createCallable(final ServerName server,
       TableName tableName, final MultiAction<Row> multi) {
-    return new MultiServerCallable<Row>(hConnection, tableName, server, this.rpcFactory, multi);
+    return new MultiServerCallable<Row>(connection, tableName, server, this.rpcFactory, multi);
   }
 
   /**

http://git-wip-us.apache.org/repos/asf/hbase/blob/4f5cde8a/hbase-client/src/main/java/org/apache/hadoop/hbase/client/ConnectionManager.java
----------------------------------------------------------------------
diff --git a/hbase-client/src/main/java/org/apache/hadoop/hbase/client/ConnectionManager.java b/hbase-client/src/main/java/org/apache/hadoop/hbase/client/ConnectionManager.java
index fd6a7e8..860516f 100644
--- a/hbase-client/src/main/java/org/apache/hadoop/hbase/client/ConnectionManager.java
+++ b/hbase-client/src/main/java/org/apache/hadoop/hbase/client/ConnectionManager.java
@@ -245,7 +245,7 @@ class ConnectionManager {
    */
   @VisibleForTesting
   static NonceGenerator injectNonceGeneratorForTesting(
-      HConnection conn, NonceGenerator cnm) {
+      ClusterConnection conn, NonceGenerator cnm) {
     HConnectionImplementation connImpl = (HConnectionImplementation)conn;
     NonceGenerator ng = connImpl.getNonceGenerator();
     LOG.warn("Nonce generator is being replaced by test code for " + cnm.getClass().getName());

http://git-wip-us.apache.org/repos/asf/hbase/blob/4f5cde8a/hbase-client/src/main/java/org/apache/hadoop/hbase/client/ConnectionUtils.java
----------------------------------------------------------------------
diff --git a/hbase-client/src/main/java/org/apache/hadoop/hbase/client/ConnectionUtils.java b/hbase-client/src/main/java/org/apache/hadoop/hbase/client/ConnectionUtils.java
index f38c4e0..c488909 100644
--- a/hbase-client/src/main/java/org/apache/hadoop/hbase/client/ConnectionUtils.java
+++ b/hbase-client/src/main/java/org/apache/hadoop/hbase/client/ConnectionUtils.java
@@ -79,7 +79,7 @@ public class ConnectionUtils {
    * @return old nonce generator.
    */
   public static NonceGenerator injectNonceGeneratorForTesting(
-      HConnection conn, NonceGenerator cnm) {
+      ClusterConnection conn, NonceGenerator cnm) {
     return ConnectionManager.injectNonceGeneratorForTesting(conn, cnm);
   }
 
@@ -111,7 +111,7 @@ public class ConnectionUtils {
    * @param client the client interface of the local server
    * @return an adapted/decorated HConnection
    */
-  public static HConnection createShortCircuitHConnection(final HConnection conn,
+  public static HConnection createShortCircuitHConnection(final Connection conn,
       final ServerName serverName, final AdminService.BlockingInterface admin,
       final ClientService.BlockingInterface client) {
     return new ConnectionAdapter(conn) {

http://git-wip-us.apache.org/repos/asf/hbase/blob/4f5cde8a/hbase-client/src/main/java/org/apache/hadoop/hbase/client/HBaseAdmin.java
----------------------------------------------------------------------
diff --git a/hbase-client/src/main/java/org/apache/hadoop/hbase/client/HBaseAdmin.java b/hbase-client/src/main/java/org/apache/hadoop/hbase/client/HBaseAdmin.java
index 5089138..9bf8a0c 100644
--- a/hbase-client/src/main/java/org/apache/hadoop/hbase/client/HBaseAdmin.java
+++ b/hbase-client/src/main/java/org/apache/hadoop/hbase/client/HBaseAdmin.java
@@ -83,7 +83,6 @@ import org.apache.hadoop.hbase.protobuf.generated.AdminProtos.RollWALWriterReque
 import org.apache.hadoop.hbase.protobuf.generated.AdminProtos.RollWALWriterResponse;
 import org.apache.hadoop.hbase.protobuf.generated.AdminProtos.StopServerRequest;
 import org.apache.hadoop.hbase.protobuf.generated.AdminProtos.UpdateConfigurationRequest;
-import org.apache.hadoop.hbase.protobuf.generated.ClientProtos.ClientService;
 import org.apache.hadoop.hbase.protobuf.generated.HBaseProtos;
 import org.apache.hadoop.hbase.protobuf.generated.HBaseProtos.NameStringPair;
 import org.apache.hadoop.hbase.protobuf.generated.HBaseProtos.ProcedureDescription;
@@ -172,8 +171,6 @@ public class HBaseAdmin implements Admin {
 
   private static final String ZK_IDENTIFIER_PREFIX =  "hbase-admin-on-";
 
-  // We use the implementation class rather then the interface because we
-  //  need the package protected functions to get the connection to master
   private ClusterConnection connection;
 
   private volatile Configuration conf;
@@ -1447,8 +1444,7 @@ public class HBaseAdmin implements Admin {
    * Get all the online regions on a region server.
    */
   @Override
-  public List<HRegionInfo> getOnlineRegions(
-      final ServerName sn) throws IOException {
+  public List<HRegionInfo> getOnlineRegions(final ServerName sn) throws IOException {
     AdminService.BlockingInterface admin = this.connection.getAdmin(sn);
     return ProtobufUtil.getOnlineRegions(admin);
   }
@@ -2329,12 +2325,6 @@ public class HBaseAdmin implements Admin {
     });
   }
 
-  private HRegionLocation getFirstMetaServerForTable(final TableName tableName)
-  throws IOException {
-    return connection.locateRegion(TableName.META_TABLE_NAME,
-      HRegionInfo.createRegionName(tableName, null, HConstants.NINES, false));
-  }
-
   /**
    * @return Configuration used by the instance.
    */
@@ -2491,52 +2481,40 @@ public class HBaseAdmin implements Admin {
 
   /**
    * Check to see if HBase is running. Throw an exception if not.
-   * We consider that HBase is running if ZooKeeper and Master are running.
-   *
    * @param conf system configuration
    * @throws MasterNotRunningException if the master is not running
    * @throws ZooKeeperConnectionException if unable to connect to zookeeper
    */
+  // Used by tests and by the Merge tool. Merge tool uses it to figure if HBase is up or not.
   public static void checkHBaseAvailable(Configuration conf)
-    throws MasterNotRunningException, ZooKeeperConnectionException, ServiceException, IOException {
+  throws MasterNotRunningException, ZooKeeperConnectionException, ServiceException, IOException {
     Configuration copyOfConf = HBaseConfiguration.create(conf);
-
     // We set it to make it fail as soon as possible if HBase is not available
     copyOfConf.setInt(HConstants.HBASE_CLIENT_RETRIES_NUMBER, 1);
     copyOfConf.setInt("zookeeper.recovery.retry", 0);
-
-    ConnectionManager.HConnectionImplementation connection
-      = (ConnectionManager.HConnectionImplementation)
-      HConnectionManager.getConnection(copyOfConf);
-
-    try {
-      // Check ZK first.
-      // If the connection exists, we may have a connection to ZK that does
-      //  not work anymore
-      ZooKeeperKeepAliveConnection zkw = null;
-      try {
-        zkw = connection.getKeepAliveZooKeeperWatcher();
-        zkw.getRecoverableZooKeeper().getZooKeeper().exists(
-          zkw.baseZNode, false);
-
-      } catch (IOException e) {
-        throw new ZooKeeperConnectionException("Can't connect to ZooKeeper", e);
-      } catch (InterruptedException e) {
-        throw (InterruptedIOException)
+    try (ClusterConnection connection =
+        (ClusterConnection)ConnectionFactory.createConnection(copyOfConf)) {
+        // Check ZK first.
+        // If the connection exists, we may have a connection to ZK that does not work anymore
+        ZooKeeperKeepAliveConnection zkw = null;
+        try {
+          // This is NASTY. FIX!!!! Dependent on internal implementation! TODO
+          zkw = ((ConnectionManager.HConnectionImplementation)connection).
+            getKeepAliveZooKeeperWatcher();
+          zkw.getRecoverableZooKeeper().getZooKeeper().exists(zkw.baseZNode, false);
+        } catch (IOException e) {
+          throw new ZooKeeperConnectionException("Can't connect to ZooKeeper", e);
+        } catch (InterruptedException e) {
+          throw (InterruptedIOException)
             new InterruptedIOException("Can't connect to ZooKeeper").initCause(e);
-      } catch (KeeperException e) {
-        throw new ZooKeeperConnectionException("Can't connect to ZooKeeper", e);
-      } finally {
-        if (zkw != null) {
-          zkw.close();
+        } catch (KeeperException e) {
+          throw new ZooKeeperConnectionException("Can't connect to ZooKeeper", e);
+        } finally {
+          if (zkw != null) {
+            zkw.close();
+          }
         }
-      }
-
-      // Check Master
       connection.isMasterRunning();
-
-    } finally {
-      connection.close();
     }
   }
 
@@ -3706,8 +3684,9 @@ public class HBaseAdmin implements Admin {
 
   @Override
   public int getMasterInfoPort() throws IOException {
+    // TODO: Fix!  Reaching into internal implementation!!!!
     ConnectionManager.HConnectionImplementation connection =
-        (ConnectionManager.HConnectionImplementation) HConnectionManager.getConnection(conf);
+        (ConnectionManager.HConnectionImplementation)this.connection;
     ZooKeeperKeepAliveConnection zkw = connection.getKeepAliveZooKeeperWatcher();
     try {
       return MasterAddressTracker.getMasterInfoPort(zkw);

http://git-wip-us.apache.org/repos/asf/hbase/blob/4f5cde8a/hbase-client/src/main/java/org/apache/hadoop/hbase/client/MetaCache.java
----------------------------------------------------------------------
diff --git a/hbase-client/src/main/java/org/apache/hadoop/hbase/client/MetaCache.java b/hbase-client/src/main/java/org/apache/hadoop/hbase/client/MetaCache.java
index aaaf545..0f59b8a 100644
--- a/hbase-client/src/main/java/org/apache/hadoop/hbase/client/MetaCache.java
+++ b/hbase-client/src/main/java/org/apache/hadoop/hbase/client/MetaCache.java
@@ -62,6 +62,7 @@ public class MetaCache {
    * Search the cache for a location that fits our table and row key.
    * Return null if no suitable region is located.
    *
+   *
    * @param tableName
    * @param row
    * @return Null or region location found in cache.

http://git-wip-us.apache.org/repos/asf/hbase/blob/4f5cde8a/hbase-client/src/main/java/org/apache/hadoop/hbase/client/RegionLocator.java
----------------------------------------------------------------------
diff --git a/hbase-client/src/main/java/org/apache/hadoop/hbase/client/RegionLocator.java b/hbase-client/src/main/java/org/apache/hadoop/hbase/client/RegionLocator.java
index 677b3c5..fd5348f 100644
--- a/hbase-client/src/main/java/org/apache/hadoop/hbase/client/RegionLocator.java
+++ b/hbase-client/src/main/java/org/apache/hadoop/hbase/client/RegionLocator.java
@@ -30,7 +30,7 @@ import java.util.List;
 
 /**
  * Used to view region location information for a single HBase table.
- * Obtain an instance from an {@link HConnection}.
+ * Obtain an instance from an {@link Connection}.
  *
  * @see ConnectionFactory
  * @see Connection

http://git-wip-us.apache.org/repos/asf/hbase/blob/4f5cde8a/hbase-client/src/main/java/org/apache/hadoop/hbase/zookeeper/ZKConfig.java
----------------------------------------------------------------------
diff --git a/hbase-client/src/main/java/org/apache/hadoop/hbase/zookeeper/ZKConfig.java b/hbase-client/src/main/java/org/apache/hadoop/hbase/zookeeper/ZKConfig.java
index 37b68b9..9238ebb 100644
--- a/hbase-client/src/main/java/org/apache/hadoop/hbase/zookeeper/ZKConfig.java
+++ b/hbase-client/src/main/java/org/apache/hadoop/hbase/zookeeper/ZKConfig.java
@@ -87,16 +87,19 @@ public class ZKConfig {
     Properties zkProperties = new Properties();
 
     // Directly map all of the hbase.zookeeper.property.KEY properties.
-    for (Entry<String, String> entry : new Configuration(conf)) { // copy for mt safety
-      String key = entry.getKey();
-      if (key.startsWith(HConstants.ZK_CFG_PROPERTY_PREFIX)) {
-        String zkKey = key.substring(HConstants.ZK_CFG_PROPERTY_PREFIX_LEN);
-        String value = entry.getValue();
-        // If the value has variables substitutions, need to do a get.
-        if (value.contains(VARIABLE_START)) {
-          value = conf.get(key);
+    // Synchronize on conf so no loading of configs while we iterate
+    synchronized (conf) {
+      for (Entry<String, String> entry : conf) {
+        String key = entry.getKey();
+        if (key.startsWith(HConstants.ZK_CFG_PROPERTY_PREFIX)) {
+          String zkKey = key.substring(HConstants.ZK_CFG_PROPERTY_PREFIX_LEN);
+          String value = entry.getValue();
+          // If the value has variables substitutions, need to do a get.
+          if (value.contains(VARIABLE_START)) {
+            value = conf.get(key);
+          }
+          zkProperties.put(zkKey, value);
         }
-        zkProperties.put(zkKey, value);
       }
     }
 

http://git-wip-us.apache.org/repos/asf/hbase/blob/4f5cde8a/hbase-it/src/test/java/org/apache/hadoop/hbase/DistributedHBaseCluster.java
----------------------------------------------------------------------
diff --git a/hbase-it/src/test/java/org/apache/hadoop/hbase/DistributedHBaseCluster.java b/hbase-it/src/test/java/org/apache/hadoop/hbase/DistributedHBaseCluster.java
index d97862d..6bc4143 100644
--- a/hbase-it/src/test/java/org/apache/hadoop/hbase/DistributedHBaseCluster.java
+++ b/hbase-it/src/test/java/org/apache/hadoop/hbase/DistributedHBaseCluster.java
@@ -25,9 +25,11 @@ import java.util.List;
 import org.apache.hadoop.hbase.classification.InterfaceAudience;
 import org.apache.hadoop.conf.Configuration;
 import org.apache.hadoop.hbase.ClusterManager.ServiceType;
-import org.apache.hadoop.hbase.client.HBaseAdmin;
-import org.apache.hadoop.hbase.client.HConnection;
-import org.apache.hadoop.hbase.client.HConnectionManager;
+import org.apache.hadoop.hbase.client.Admin;
+import org.apache.hadoop.hbase.client.ClusterConnection;
+import org.apache.hadoop.hbase.client.Connection;
+import org.apache.hadoop.hbase.client.ConnectionFactory;
+import org.apache.hadoop.hbase.client.RegionLocator;
 import org.apache.hadoop.hbase.protobuf.ProtobufUtil;
 import org.apache.hadoop.hbase.protobuf.generated.AdminProtos;
 import org.apache.hadoop.hbase.protobuf.generated.AdminProtos.ServerInfo;
@@ -44,8 +46,8 @@ import com.google.common.collect.Sets;
  */
 @InterfaceAudience.Private
 public class DistributedHBaseCluster extends HBaseCluster {
-
-  private HBaseAdmin admin;
+  private Admin admin;
+  private final Connection connection;
 
   private ClusterManager clusterManager;
 
@@ -53,7 +55,8 @@ public class DistributedHBaseCluster extends HBaseCluster {
       throws IOException {
     super(conf);
     this.clusterManager = clusterManager;
-    this.admin = new HBaseAdmin(conf);
+    this.connection = ConnectionFactory.createConnection(conf);
+    this.admin = this.connection.getAdmin();
     this.initialClusterStatus = getClusterStatus();
   }
 
@@ -84,18 +87,21 @@ public class DistributedHBaseCluster extends HBaseCluster {
     if (this.admin != null) {
       admin.close();
     }
+    if (this.connection != null && !this.connection.isClosed()) {
+      this.connection.close();
+    }
   }
 
   @Override
   public AdminProtos.AdminService.BlockingInterface getAdminProtocol(ServerName serverName)
   throws IOException {
-    return admin.getConnection().getAdmin(serverName);
+    return ((ClusterConnection)this.connection).getAdmin(serverName);
   }
 
   @Override
   public ClientProtos.ClientService.BlockingInterface getClientProtocol(ServerName serverName)
   throws IOException {
-    return admin.getConnection().getClient(serverName);
+    return ((ClusterConnection)this.connection).getClient(serverName);
   }
 
   @Override
@@ -138,8 +144,7 @@ public class DistributedHBaseCluster extends HBaseCluster {
   @Override
   public MasterService.BlockingInterface getMasterAdminService()
   throws IOException {
-    HConnection conn = HConnectionManager.getConnection(conf);
-    return conn.getMaster();
+    return ((ClusterConnection)this.connection).getMaster();
   }
 
   @Override
@@ -183,18 +188,19 @@ public class DistributedHBaseCluster extends HBaseCluster {
   }
 
   @Override
-  public ServerName getServerHoldingRegion(byte[] regionName) throws IOException {
-    HConnection connection = admin.getConnection();
-    HRegionLocation regionLoc = connection.locateRegion(regionName);
+  public ServerName getServerHoldingRegion(TableName tn, byte[] regionName) throws IOException {
+    HRegionLocation regionLoc = null;
+    try (RegionLocator locator = connection.getRegionLocator(tn)) {
+      regionLoc = locator.getRegionLocation(regionName);
+    }
     if (regionLoc == null) {
-      LOG.warn("Cannot find region server holding region " + Bytes.toString(regionName)
-          + " for table " + HRegionInfo.getTableName(regionName) + ", start key [" +
-          Bytes.toString(HRegionInfo.getStartKey(regionName)) + "]");
+      LOG.warn("Cannot find region server holding region " + Bytes.toString(regionName) +
+        ", start key [" + Bytes.toString(HRegionInfo.getStartKey(regionName)) + "]");
       return null;
     }
 
     AdminProtos.AdminService.BlockingInterface client =
-      connection.getAdmin(regionLoc.getServerName());
+        ((ClusterConnection)this.connection).getAdmin(regionLoc.getServerName());
     ServerInfo info = ProtobufUtil.getServerInfo(client);
     return ProtobufUtil.toServerName(info.getServerName());
   }
@@ -374,7 +380,7 @@ public class DistributedHBaseCluster extends HBaseCluster {
     } catch (IOException ioe) {
       LOG.warn("While closing the old connection", ioe);
     }
-    this.admin = new HBaseAdmin(conf);
+    this.admin = this.connection.getAdmin();
     LOG.info("Added new HBaseAdmin");
     return true;
   }

http://git-wip-us.apache.org/repos/asf/hbase/blob/4f5cde8a/hbase-server/src/main/java/org/apache/hadoop/hbase/mapreduce/TableMapper.java
----------------------------------------------------------------------
diff --git a/hbase-server/src/main/java/org/apache/hadoop/hbase/mapreduce/TableMapper.java b/hbase-server/src/main/java/org/apache/hadoop/hbase/mapreduce/TableMapper.java
index 0d9b65a..cde94fe 100644
--- a/hbase-server/src/main/java/org/apache/hadoop/hbase/mapreduce/TableMapper.java
+++ b/hbase-server/src/main/java/org/apache/hadoop/hbase/mapreduce/TableMapper.java
@@ -37,4 +37,4 @@ import org.apache.hadoop.mapreduce.Mapper;
 public abstract class TableMapper<KEYOUT, VALUEOUT>
 extends Mapper<ImmutableBytesWritable, Result, KEYOUT, VALUEOUT> {
 
-}
+}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/hbase/blob/4f5cde8a/hbase-server/src/main/java/org/apache/hadoop/hbase/mapreduce/TableOutputFormat.java
----------------------------------------------------------------------
diff --git a/hbase-server/src/main/java/org/apache/hadoop/hbase/mapreduce/TableOutputFormat.java b/hbase-server/src/main/java/org/apache/hadoop/hbase/mapreduce/TableOutputFormat.java
index da40b2e..91bfaa2 100644
--- a/hbase-server/src/main/java/org/apache/hadoop/hbase/mapreduce/TableOutputFormat.java
+++ b/hbase-server/src/main/java/org/apache/hadoop/hbase/mapreduce/TableOutputFormat.java
@@ -48,7 +48,6 @@ import org.apache.hadoop.mapreduce.TaskAttemptContext;
  * while the output value <u>must</u> be either a {@link Put} or a
  * {@link Delete} instance.
  *
- * <p><KEY> is the type of the key. Ignored in this class.
  */
 @InterfaceAudience.Public
 @InterfaceStability.Stable

http://git-wip-us.apache.org/repos/asf/hbase/blob/4f5cde8a/hbase-server/src/main/java/org/apache/hadoop/hbase/master/RegionPlacementMaintainer.java
----------------------------------------------------------------------
diff --git a/hbase-server/src/main/java/org/apache/hadoop/hbase/master/RegionPlacementMaintainer.java b/hbase-server/src/main/java/org/apache/hadoop/hbase/master/RegionPlacementMaintainer.java
index 1d16bdf..e7d52a2 100644
--- a/hbase-server/src/main/java/org/apache/hadoop/hbase/master/RegionPlacementMaintainer.java
+++ b/hbase-server/src/main/java/org/apache/hadoop/hbase/master/RegionPlacementMaintainer.java
@@ -48,9 +48,9 @@ import org.apache.hadoop.hbase.HRegionInfo;
 import org.apache.hadoop.hbase.ServerName;
 import org.apache.hadoop.hbase.TableName;
 import org.apache.hadoop.hbase.client.Admin;
-import org.apache.hadoop.hbase.client.HBaseAdmin;
-import org.apache.hadoop.hbase.client.HConnection;
-import org.apache.hadoop.hbase.client.HConnectionManager;
+import org.apache.hadoop.hbase.client.ClusterConnection;
+import org.apache.hadoop.hbase.client.Connection;
+import org.apache.hadoop.hbase.client.ConnectionFactory;
 import org.apache.hadoop.hbase.master.balancer.FavoredNodeAssignmentHelper;
 import org.apache.hadoop.hbase.master.balancer.FavoredNodesPlan;
 import org.apache.hadoop.hbase.protobuf.ProtobufUtil;
@@ -67,9 +67,9 @@ import org.apache.log4j.Logger;
 /**
  * A tool that is used for manipulating and viewing favored nodes information
  * for regions. Run with -h to get a list of the options
- *
  */
 @InterfaceAudience.Private
+// TODO: Remove? Unused. Partially implemented only.
 public class RegionPlacementMaintainer {
   private static final Log LOG = LogFactory.getLog(RegionPlacementMaintainer.class
       .getName());
@@ -93,9 +93,9 @@ public class RegionPlacementMaintainer {
   private Configuration conf;
   private final boolean enforceLocality;
   private final boolean enforceMinAssignmentMove;
-  private HBaseAdmin admin;
   private RackManager rackManager;
   private Set<TableName> targetTableSet;
+  private final Connection connection;
 
   public RegionPlacementMaintainer(Configuration conf) {
     this(conf, true, true);
@@ -108,7 +108,13 @@ public class RegionPlacementMaintainer {
     this.enforceMinAssignmentMove = enforceMinAssignmentMove;
     this.targetTableSet = new HashSet<TableName>();
     this.rackManager = new RackManager(conf);
+    try {
+      this.connection = ConnectionFactory.createConnection(this.conf);
+    } catch (IOException e) {
+      throw new RuntimeException(e);
+    }
   }
+
   private static void printHelp(Options opt) {
     new HelpFormatter().printHelp(
         "RegionPlacement < -w | -u | -n | -v | -t | -h | -overwrite -r regionName -f favoredNodes " +
@@ -125,24 +131,13 @@ public class RegionPlacementMaintainer {
   }
 
   /**
-   * @return the cached HBaseAdmin
-   * @throws IOException
-   */
-  private HBaseAdmin getHBaseAdmin() throws IOException {
-    if (this.admin == null) {
-      this.admin = new HBaseAdmin(this.conf);
-    }
-    return this.admin;
-  }
-
-  /**
    * @return the new RegionAssignmentSnapshot
    * @throws IOException
    */
   public SnapshotOfRegionAssignmentFromMeta getRegionAssignmentSnapshot()
   throws IOException {
     SnapshotOfRegionAssignmentFromMeta currentAssignmentShapshot =
-      new SnapshotOfRegionAssignmentFromMeta(HConnectionManager.getConnection(conf));
+      new SnapshotOfRegionAssignmentFromMeta(ConnectionFactory.createConnection(conf));
     currentAssignmentShapshot.initialize();
     return currentAssignmentShapshot;
   }
@@ -210,8 +205,10 @@ public class RegionPlacementMaintainer {
 
       // Get the all the region servers
       List<ServerName> servers = new ArrayList<ServerName>();
-      servers.addAll(getHBaseAdmin().getClusterStatus().getServers());
-      
+      try (Admin admin = this.connection.getAdmin()) {
+        servers.addAll(admin.getClusterStatus().getServers());
+      }
+
       LOG.info("Start to generate assignment plan for " + numRegions +
           " regions from table " + tableName + " with " +
           servers.size() + " region servers");
@@ -619,9 +616,9 @@ public class RegionPlacementMaintainer {
     // sort the map based on region info
     Map<HRegionInfo, List<ServerName>> assignmentMap =
       new TreeMap<HRegionInfo, List<ServerName>>(plan.getAssignmentMap());
-    
+
     for (Map.Entry<HRegionInfo, List<ServerName>> entry : assignmentMap.entrySet()) {
-      
+
       String serverList = FavoredNodeAssignmentHelper.getFavoredNodesAsString(entry.getValue());
       String regionName = entry.getKey().getRegionNameAsString();
       LOG.info("Region: " + regionName );
@@ -660,7 +657,6 @@ public class RegionPlacementMaintainer {
     // Get the region to region server map
     Map<ServerName, List<HRegionInfo>> currentAssignment =
       this.getRegionAssignmentSnapshot().getRegionServerToRegionMap();
-    HConnection connection = this.getHBaseAdmin().getConnection();
 
     // track of the failed and succeeded updates
     int succeededNum = 0;
@@ -691,10 +687,11 @@ public class RegionPlacementMaintainer {
         }
         if (singleServerPlan != null) {
           // Update the current region server with its updated favored nodes
-          BlockingInterface currentRegionServer = connection.getAdmin(entry.getKey());
+          BlockingInterface currentRegionServer =
+            ((ClusterConnection)this.connection).getAdmin(entry.getKey());
           UpdateFavoredNodesRequest request =
               RequestConverter.buildUpdateFavoredNodesRequest(regionUpdateInfos);
-          
+
           UpdateFavoredNodesResponse updateFavoredNodesResponse =
               currentRegionServer.updateFavoredNodes(null, request);
           LOG.info("Region server " +

http://git-wip-us.apache.org/repos/asf/hbase/blob/4f5cde8a/hbase-server/src/main/java/org/apache/hadoop/hbase/master/ServerManager.java
----------------------------------------------------------------------
diff --git a/hbase-server/src/main/java/org/apache/hadoop/hbase/master/ServerManager.java b/hbase-server/src/main/java/org/apache/hadoop/hbase/master/ServerManager.java
index 6550b73..412023b 100644
--- a/hbase-server/src/main/java/org/apache/hadoop/hbase/master/ServerManager.java
+++ b/hbase-server/src/main/java/org/apache/hadoop/hbase/master/ServerManager.java
@@ -36,7 +36,6 @@ import java.util.concurrent.CopyOnWriteArrayList;
 
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
-import org.apache.hadoop.hbase.classification.InterfaceAudience;
 import org.apache.hadoop.conf.Configuration;
 import org.apache.hadoop.hbase.ClockOutOfSyncException;
 import org.apache.hadoop.hbase.HRegionInfo;
@@ -46,8 +45,9 @@ import org.apache.hadoop.hbase.ServerLoad;
 import org.apache.hadoop.hbase.ServerName;
 import org.apache.hadoop.hbase.YouAreDeadException;
 import org.apache.hadoop.hbase.ZooKeeperConnectionException;
-import org.apache.hadoop.hbase.client.HConnection;
-import org.apache.hadoop.hbase.client.HConnectionManager;
+import org.apache.hadoop.hbase.classification.InterfaceAudience;
+import org.apache.hadoop.hbase.client.ClusterConnection;
+import org.apache.hadoop.hbase.client.ConnectionFactory;
 import org.apache.hadoop.hbase.client.RetriesExhaustedException;
 import org.apache.hadoop.hbase.master.balancer.BaseLoadBalancer;
 import org.apache.hadoop.hbase.master.handler.MetaServerShutdownHandler;
@@ -137,7 +137,7 @@ public class ServerManager {
 
   private final Server master;
   private final MasterServices services;
-  private final HConnection connection;
+  private final ClusterConnection connection;
 
   private final DeadServer deadservers = new DeadServer();
 
@@ -201,7 +201,7 @@ public class ServerManager {
     Configuration c = master.getConfiguration();
     maxSkew = c.getLong("hbase.master.maxclockskew", 30000);
     warningSkew = c.getLong("hbase.master.warningclockskew", 10000);
-    this.connection = connect ? HConnectionManager.getConnection(c) : null;
+    this.connection = connect ? (ClusterConnection)ConnectionFactory.createConnection(c) : null;
   }
 
   /**

http://git-wip-us.apache.org/repos/asf/hbase/blob/4f5cde8a/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/HRegionServer.java
----------------------------------------------------------------------
diff --git a/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/HRegionServer.java b/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/HRegionServer.java
index 69fdb74..e4abfff 100644
--- a/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/HRegionServer.java
+++ b/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/HRegionServer.java
@@ -74,6 +74,7 @@ import org.apache.hadoop.hbase.TableName;
 import org.apache.hadoop.hbase.YouAreDeadException;
 import org.apache.hadoop.hbase.ZNodeClearer;
 import org.apache.hadoop.hbase.classification.InterfaceAudience;
+import org.apache.hadoop.hbase.client.ConnectionFactory;
 import org.apache.hadoop.hbase.client.ConnectionUtils;
 import org.apache.hadoop.hbase.client.HConnection;
 import org.apache.hadoop.hbase.client.HConnectionManager;
@@ -606,7 +607,7 @@ public class HRegionServer extends HasThread implements
    */
   protected HConnection createShortCircuitConnection() throws IOException {
     return ConnectionUtils.createShortCircuitHConnection(
-      HConnectionManager.getConnection(conf), serverName, rpcServices, rpcServices);
+      ConnectionFactory.createConnection(conf), serverName, rpcServices, rpcServices);
   }
 
   /**

http://git-wip-us.apache.org/repos/asf/hbase/blob/4f5cde8a/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/SplitLogWorker.java
----------------------------------------------------------------------
diff --git a/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/SplitLogWorker.java b/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/SplitLogWorker.java
index 94864ba..0052b00 100644
--- a/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/SplitLogWorker.java
+++ b/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/SplitLogWorker.java
@@ -31,7 +31,6 @@ import org.apache.hadoop.fs.FileSystem;
 import org.apache.hadoop.fs.Path;
 import org.apache.hadoop.hbase.NotServingRegionException;
 import org.apache.hadoop.hbase.Server;
-import org.apache.hadoop.hbase.client.HConnectionManager;
 import org.apache.hadoop.hbase.client.RetriesExhaustedException;
 import org.apache.hadoop.hbase.coordination.BaseCoordinatedStateManager;
 import org.apache.hadoop.hbase.coordination.SplitLogWorkerCoordination;
@@ -132,9 +131,6 @@ public class SplitLogWorker implements Runnable {
     try {
       LOG.info("SplitLogWorker " + server.getServerName() + " starting");
       coordination.registerListener();
-      // pre-initialize a new connection for splitlogworker configuration
-      HConnectionManager.getConnection(conf);
-
       // wait for Coordination Engine is ready
       boolean res = false;
       while (!res && !coordination.isStop()) {

http://git-wip-us.apache.org/repos/asf/hbase/blob/4f5cde8a/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/wal/HLogSplitter.java
----------------------------------------------------------------------
diff --git a/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/wal/HLogSplitter.java b/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/wal/HLogSplitter.java
index b057f5f..6448ead 100644
--- a/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/wal/HLogSplitter.java
+++ b/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/wal/HLogSplitter.java
@@ -48,7 +48,6 @@ import java.util.concurrent.atomic.AtomicReference;
 
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
-import org.apache.hadoop.hbase.classification.InterfaceAudience;
 import org.apache.hadoop.conf.Configuration;
 import org.apache.hadoop.fs.FileStatus;
 import org.apache.hadoop.fs.FileSystem;
@@ -70,11 +69,12 @@ import org.apache.hadoop.hbase.TableStateManager;
 import org.apache.hadoop.hbase.Tag;
 import org.apache.hadoop.hbase.TagRewriteCell;
 import org.apache.hadoop.hbase.TagType;
+import org.apache.hadoop.hbase.classification.InterfaceAudience;
+import org.apache.hadoop.hbase.client.ConnectionFactory;
 import org.apache.hadoop.hbase.client.ConnectionUtils;
 import org.apache.hadoop.hbase.client.Delete;
 import org.apache.hadoop.hbase.client.Durability;
 import org.apache.hadoop.hbase.client.HConnection;
-import org.apache.hadoop.hbase.client.HConnectionManager;
 import org.apache.hadoop.hbase.client.Mutation;
 import org.apache.hadoop.hbase.client.Put;
 import org.apache.hadoop.hbase.coordination.BaseCoordinatedStateManager;
@@ -1844,7 +1844,8 @@ public class HLogSplitter {
         synchronized (this.tableNameToHConnectionMap) {
           hconn = this.tableNameToHConnectionMap.get(tableName);
           if (hconn == null) {
-            hconn = HConnectionManager.getConnection(conf);
+            // Gets closed over in closeRegionServerWriters
+            hconn = (HConnection)ConnectionFactory.createConnection(conf);
             this.tableNameToHConnectionMap.put(tableName, hconn);
           }
         }

http://git-wip-us.apache.org/repos/asf/hbase/blob/4f5cde8a/hbase-server/src/test/java/org/apache/hadoop/hbase/HBaseCluster.java
----------------------------------------------------------------------
diff --git a/hbase-server/src/test/java/org/apache/hadoop/hbase/HBaseCluster.java b/hbase-server/src/test/java/org/apache/hadoop/hbase/HBaseCluster.java
index 76a9566..9e7a0c4 100644
--- a/hbase-server/src/test/java/org/apache/hadoop/hbase/HBaseCluster.java
+++ b/hbase-server/src/test/java/org/apache/hadoop/hbase/HBaseCluster.java
@@ -250,15 +250,18 @@ public abstract class HBaseCluster implements Closeable, Configurable {
    * Get the ServerName of region server serving the first hbase:meta region
    */
   public ServerName getServerHoldingMeta() throws IOException {
-    return getServerHoldingRegion(HRegionInfo.FIRST_META_REGIONINFO.getRegionName());
+    return getServerHoldingRegion(TableName.META_TABLE_NAME,
+      HRegionInfo.FIRST_META_REGIONINFO.getRegionName());
   }
 
   /**
    * Get the ServerName of region server serving the specified region
    * @param regionName Name of the region in bytes
+   * @param tn Table name that has the region.
    * @return ServerName that hosts the region or null
    */
-  public abstract ServerName getServerHoldingRegion(byte[] regionName) throws IOException;
+  public abstract ServerName getServerHoldingRegion(final TableName tn, byte[] regionName)
+  throws IOException;
 
   /**
    * @return whether we are interacting with a distributed cluster as opposed to an

http://git-wip-us.apache.org/repos/asf/hbase/blob/4f5cde8a/hbase-server/src/test/java/org/apache/hadoop/hbase/MiniHBaseCluster.java
----------------------------------------------------------------------
diff --git a/hbase-server/src/test/java/org/apache/hadoop/hbase/MiniHBaseCluster.java b/hbase-server/src/test/java/org/apache/hadoop/hbase/MiniHBaseCluster.java
index a3ec004..7672ac1 100644
--- a/hbase-server/src/test/java/org/apache/hadoop/hbase/MiniHBaseCluster.java
+++ b/hbase-server/src/test/java/org/apache/hadoop/hbase/MiniHBaseCluster.java
@@ -29,7 +29,6 @@ import org.apache.hadoop.hbase.classification.InterfaceAudience;
 import org.apache.hadoop.hbase.classification.InterfaceStability;
 import org.apache.hadoop.conf.Configuration;
 import org.apache.hadoop.fs.FileSystem;
-import org.apache.hadoop.hbase.client.HConnectionManager;
 import org.apache.hadoop.hbase.master.HMaster;
 import org.apache.hadoop.hbase.protobuf.generated.AdminProtos.AdminService;
 import org.apache.hadoop.hbase.protobuf.generated.ClientProtos.ClientService;
@@ -517,7 +516,6 @@ public class MiniHBaseCluster extends HBaseCluster {
     if (this.hbaseCluster != null) {
       this.hbaseCluster.shutdown();
     }
-    HConnectionManager.deleteAllConnections(false);
   }
 
   @Override
@@ -657,7 +655,8 @@ public class MiniHBaseCluster extends HBaseCluster {
   }
 
   @Override
-  public ServerName getServerHoldingRegion(byte[] regionName) throws IOException {
+  public ServerName getServerHoldingRegion(final TableName tn, byte[] regionName)
+  throws IOException {
     // Assume there is only one master thread which is the active master.
     // If there are multiple master threads, the backup master threads
     // should hold some regions. Please refer to #countServedRegions

http://git-wip-us.apache.org/repos/asf/hbase/blob/4f5cde8a/hbase-server/src/test/java/org/apache/hadoop/hbase/client/TestAdmin1.java
----------------------------------------------------------------------
diff --git a/hbase-server/src/test/java/org/apache/hadoop/hbase/client/TestAdmin1.java b/hbase-server/src/test/java/org/apache/hadoop/hbase/client/TestAdmin1.java
index 8724bca..332803a 100644
--- a/hbase-server/src/test/java/org/apache/hadoop/hbase/client/TestAdmin1.java
+++ b/hbase-server/src/test/java/org/apache/hadoop/hbase/client/TestAdmin1.java
@@ -906,7 +906,6 @@ public class TestAdmin1 {
     admin.createTable(desc, splitKeys);
     HTable ht = new HTable(TEST_UTIL.getConfiguration(), tableName);
     Map<HRegionInfo, ServerName> regions = ht.getRegionLocations();
-    ht.close();
     assertEquals("Tried to create " + expectedRegions + " regions "
         + "but only found " + regions.size(), expectedRegions, regions.size());
     // Disable table.

http://git-wip-us.apache.org/repos/asf/hbase/blob/4f5cde8a/hbase-server/src/test/java/org/apache/hadoop/hbase/client/TestHBaseAdminNoCluster.java
----------------------------------------------------------------------
diff --git a/hbase-server/src/test/java/org/apache/hadoop/hbase/client/TestHBaseAdminNoCluster.java b/hbase-server/src/test/java/org/apache/hadoop/hbase/client/TestHBaseAdminNoCluster.java
index 82819da..526a3db 100644
--- a/hbase-server/src/test/java/org/apache/hadoop/hbase/client/TestHBaseAdminNoCluster.java
+++ b/hbase-server/src/test/java/org/apache/hadoop/hbase/client/TestHBaseAdminNoCluster.java
@@ -51,7 +51,7 @@ public class TestHBaseAdminNoCluster {
    * @throws ServiceException 
    */
   @Test
-  public void testMasterMonitorCollableRetries()
+  public void testMasterMonitorCallableRetries()
   throws MasterNotRunningException, ZooKeeperConnectionException, IOException, ServiceException {
     Configuration configuration = HBaseConfiguration.create();
     // Set the pause and retry count way down.
@@ -60,20 +60,18 @@ public class TestHBaseAdminNoCluster {
     configuration.setInt(HConstants.HBASE_CLIENT_RETRIES_NUMBER, count);
     // Get mocked connection.   Getting the connection will register it so when HBaseAdmin is
     // constructed with same configuration, it will find this mocked connection.
-    HConnection connection = HConnectionTestingUtility.getMockedConnection(configuration);
+    ClusterConnection connection = HConnectionTestingUtility.getMockedConnection(configuration);
     // Mock so we get back the master interface.  Make it so when createTable is called, we throw
     // the PleaseHoldException.
-    MasterKeepAliveConnection masterAdmin =
-      Mockito.mock(MasterKeepAliveConnection.class);
+    MasterKeepAliveConnection masterAdmin = Mockito.mock(MasterKeepAliveConnection.class);
     Mockito.when(masterAdmin.createTable((RpcController)Mockito.any(),
       (CreateTableRequest)Mockito.any())).
         thenThrow(new ServiceException("Test fail").initCause(new PleaseHoldException("test")));
     Mockito.when(connection.getKeepAliveMasterService()).thenReturn(masterAdmin);
-    // Mock up our admin Interfaces
-    Admin admin = new HBaseAdmin(configuration);
+    Admin admin = new HBaseAdmin(connection);
     try {
       HTableDescriptor htd =
-          new HTableDescriptor(TableName.valueOf("testMasterMonitorCollableRetries"));
+        new HTableDescriptor(TableName.valueOf("testMasterMonitorCollableRetries"));
       // Pass any old htable descriptor; not important
       try {
         admin.createTable(htd, HBaseTestingUtility.KEYS_FOR_HBA_CREATE_TABLE);
@@ -86,7 +84,7 @@ public class TestHBaseAdminNoCluster {
         (CreateTableRequest)Mockito.any());
     } finally {
       admin.close();
-      if (connection != null)HConnectionManager.deleteConnection(configuration);
+      if (connection != null) connection.close();
     }
   }
 }
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/hbase/blob/4f5cde8a/hbase-server/src/test/java/org/apache/hadoop/hbase/client/TestHCM.java
----------------------------------------------------------------------
diff --git a/hbase-server/src/test/java/org/apache/hadoop/hbase/client/TestHCM.java b/hbase-server/src/test/java/org/apache/hadoop/hbase/client/TestHCM.java
index 798b393..7cff5e7 100644
--- a/hbase-server/src/test/java/org/apache/hadoop/hbase/client/TestHCM.java
+++ b/hbase-server/src/test/java/org/apache/hadoop/hbase/client/TestHCM.java
@@ -131,6 +131,8 @@ public class TestHCM {
 
   @BeforeClass
   public static void setUpBeforeClass() throws Exception {
+    TEST_UTIL.getConfiguration().setBoolean(HConstants.STATUS_PUBLISHED,
+      HConstants.STATUS_PUBLISHED_DEFAULT);
     if (isJavaOk) {
       TEST_UTIL.getConfiguration().setBoolean(HConstants.STATUS_PUBLISHED, true);
     }
@@ -1009,113 +1011,114 @@ public class TestHCM {
   @Test
   public void testMulti() throws Exception {
     HTable table = TEST_UTIL.createTable(TABLE_NAME3, FAM_NAM);
-    TEST_UTIL.createMultiRegions(table, FAM_NAM);
-    ConnectionManager.HConnectionImplementation conn =
-      (ConnectionManager.HConnectionImplementation)
-        HConnectionManager.getConnection(TEST_UTIL.getConfiguration());
+    try {
+      TEST_UTIL.createMultiRegions(table, FAM_NAM);
+      ConnectionManager.HConnectionImplementation conn =
+          ( ConnectionManager.HConnectionImplementation)table.getConnection();
 
-    // We're now going to move the region and check that it works for the client
-    // First a new put to add the location in the cache
-    conn.clearRegionCache(TABLE_NAME3);
-    Assert.assertEquals(0, conn.getNumberOfCachedRegionLocations(TABLE_NAME3));
+      // We're now going to move the region and check that it works for the client
+      // First a new put to add the location in the cache
+      conn.clearRegionCache(TABLE_NAME3);
+      Assert.assertEquals(0, conn.getNumberOfCachedRegionLocations(TABLE_NAME3));
 
-    TEST_UTIL.getHBaseAdmin().setBalancerRunning(false, false);
-    HMaster master = TEST_UTIL.getMiniHBaseCluster().getMaster();
+      TEST_UTIL.getHBaseAdmin().setBalancerRunning(false, false);
+      HMaster master = TEST_UTIL.getMiniHBaseCluster().getMaster();
 
-    // We can wait for all regions to be online, that makes log reading easier when debugging
-    while (master.getAssignmentManager().getRegionStates().isRegionsInTransition()) {
-      Thread.sleep(1);
-    }
+      // We can wait for all regions to be online, that makes log reading easier when debugging
+      while (master.getAssignmentManager().getRegionStates().isRegionsInTransition()) {
+        Thread.sleep(1);
+      }
 
-    Put put = new Put(ROW_X);
-    put.add(FAM_NAM, ROW_X, ROW_X);
-    table.put(put);
+      Put put = new Put(ROW_X);
+      put.add(FAM_NAM, ROW_X, ROW_X);
+      table.put(put);
 
-    // Now moving the region to the second server
-    HRegionLocation toMove = conn.getCachedLocation(TABLE_NAME3, ROW_X).getRegionLocation();
-    byte[] regionName = toMove.getRegionInfo().getRegionName();
-    byte[] encodedRegionNameBytes = toMove.getRegionInfo().getEncodedNameAsBytes();
+      // Now moving the region to the second server
+      HRegionLocation toMove = conn.getCachedLocation(TABLE_NAME3, ROW_X).getRegionLocation();
+      byte[] regionName = toMove.getRegionInfo().getRegionName();
+      byte[] encodedRegionNameBytes = toMove.getRegionInfo().getEncodedNameAsBytes();
 
-    // Choose the other server.
-    int curServerId = TEST_UTIL.getHBaseCluster().getServerWith(regionName);
-    int destServerId = (curServerId == 0 ? 1 : 0);
+      // Choose the other server.
+      int curServerId = TEST_UTIL.getHBaseCluster().getServerWith(regionName);
+      int destServerId = (curServerId == 0 ? 1 : 0);
 
-    HRegionServer curServer = TEST_UTIL.getHBaseCluster().getRegionServer(curServerId);
-    HRegionServer destServer = TEST_UTIL.getHBaseCluster().getRegionServer(destServerId);
+      HRegionServer curServer = TEST_UTIL.getHBaseCluster().getRegionServer(curServerId);
+      HRegionServer destServer = TEST_UTIL.getHBaseCluster().getRegionServer(destServerId);
 
-    ServerName destServerName = destServer.getServerName();
+      ServerName destServerName = destServer.getServerName();
 
-    //find another row in the cur server that is less than ROW_X
-    List<HRegion> regions = curServer.getOnlineRegions(TABLE_NAME3);
-    byte[] otherRow = null;
-    for (HRegion region : regions) {
-      if (!region.getRegionInfo().getEncodedName().equals(toMove.getRegionInfo().getEncodedName())
-          && Bytes.BYTES_COMPARATOR.compare(region.getRegionInfo().getStartKey(), ROW_X) < 0) {
-        otherRow = region.getRegionInfo().getStartKey();
-        break;
+      //find another row in the cur server that is less than ROW_X
+      List<HRegion> regions = curServer.getOnlineRegions(TABLE_NAME3);
+      byte[] otherRow = null;
+      for (HRegion region : regions) {
+        if (!region.getRegionInfo().getEncodedName().equals(toMove.getRegionInfo().getEncodedName())
+            && Bytes.BYTES_COMPARATOR.compare(region.getRegionInfo().getStartKey(), ROW_X) < 0) {
+          otherRow = region.getRegionInfo().getStartKey();
+          break;
+        }
+      }
+      assertNotNull(otherRow);
+      // If empty row, set it to first row.-f
+      if (otherRow.length <= 0) otherRow = Bytes.toBytes("aaa");
+      Put put2 = new Put(otherRow);
+      put2.add(FAM_NAM, otherRow, otherRow);
+      table.put(put2); //cache put2's location
+
+      // Check that we are in the expected state
+      Assert.assertTrue(curServer != destServer);
+      Assert.assertNotEquals(curServer.getServerName(), destServer.getServerName());
+      Assert.assertNotEquals(toMove.getPort(), destServerName.getPort());
+      Assert.assertNotNull(curServer.getOnlineRegion(regionName));
+      Assert.assertNull(destServer.getOnlineRegion(regionName));
+      Assert.assertFalse(TEST_UTIL.getMiniHBaseCluster().getMaster().
+          getAssignmentManager().getRegionStates().isRegionsInTransition());
+
+      // Moving. It's possible that we don't have all the regions online at this point, so
+      //  the test must depends only on the region we're looking at.
+      LOG.info("Move starting region="+toMove.getRegionInfo().getRegionNameAsString());
+      TEST_UTIL.getHBaseAdmin().move(
+          toMove.getRegionInfo().getEncodedNameAsBytes(),
+          destServerName.getServerName().getBytes()
+          );
+
+      while (destServer.getOnlineRegion(regionName) == null ||
+          destServer.getRegionsInTransitionInRS().containsKey(encodedRegionNameBytes) ||
+          curServer.getRegionsInTransitionInRS().containsKey(encodedRegionNameBytes) ||
+          master.getAssignmentManager().getRegionStates().isRegionsInTransition()) {
+        // wait for the move to be finished
+        Thread.sleep(1);
       }
-    }
-    assertNotNull(otherRow);
-    // If empty row, set it to first row.-f
-    if (otherRow.length <= 0) otherRow = Bytes.toBytes("aaa");
-    Put put2 = new Put(otherRow);
-    put2.add(FAM_NAM, otherRow, otherRow);
-    table.put(put2); //cache put2's location
-
-    // Check that we are in the expected state
-    Assert.assertTrue(curServer != destServer);
-    Assert.assertNotEquals(curServer.getServerName(), destServer.getServerName());
-    Assert.assertNotEquals(toMove.getPort(), destServerName.getPort());
-    Assert.assertNotNull(curServer.getOnlineRegion(regionName));
-    Assert.assertNull(destServer.getOnlineRegion(regionName));
-    Assert.assertFalse(TEST_UTIL.getMiniHBaseCluster().getMaster().
-        getAssignmentManager().getRegionStates().isRegionsInTransition());
-
-    // Moving. It's possible that we don't have all the regions online at this point, so
-    //  the test must depends only on the region we're looking at.
-    LOG.info("Move starting region="+toMove.getRegionInfo().getRegionNameAsString());
-    TEST_UTIL.getHBaseAdmin().move(
-      toMove.getRegionInfo().getEncodedNameAsBytes(),
-      destServerName.getServerName().getBytes()
-    );
-
-    while (destServer.getOnlineRegion(regionName) == null ||
-        destServer.getRegionsInTransitionInRS().containsKey(encodedRegionNameBytes) ||
-        curServer.getRegionsInTransitionInRS().containsKey(encodedRegionNameBytes) ||
-        master.getAssignmentManager().getRegionStates().isRegionsInTransition()) {
-      // wait for the move to be finished
-      Thread.sleep(1);
-    }
 
-    LOG.info("Move finished for region="+toMove.getRegionInfo().getRegionNameAsString());
+      LOG.info("Move finished for region="+toMove.getRegionInfo().getRegionNameAsString());
 
-    // Check our new state.
-    Assert.assertNull(curServer.getOnlineRegion(regionName));
-    Assert.assertNotNull(destServer.getOnlineRegion(regionName));
-    Assert.assertFalse(destServer.getRegionsInTransitionInRS().containsKey(encodedRegionNameBytes));
-    Assert.assertFalse(curServer.getRegionsInTransitionInRS().containsKey(encodedRegionNameBytes));
+      // Check our new state.
+      Assert.assertNull(curServer.getOnlineRegion(regionName));
+      Assert.assertNotNull(destServer.getOnlineRegion(regionName));
+      Assert.assertFalse(destServer.getRegionsInTransitionInRS().containsKey(encodedRegionNameBytes));
+      Assert.assertFalse(curServer.getRegionsInTransitionInRS().containsKey(encodedRegionNameBytes));
 
 
-    // Cache was NOT updated and points to the wrong server
-    Assert.assertFalse(
-        conn.getCachedLocation(TABLE_NAME3, ROW_X).getRegionLocation()
+      // Cache was NOT updated and points to the wrong server
+      Assert.assertFalse(
+          conn.getCachedLocation(TABLE_NAME3, ROW_X).getRegionLocation()
           .getPort() == destServerName.getPort());
 
-    // Hijack the number of retry to fail after 2 tries
-    final int prevNumRetriesVal = setNumTries(conn, 2);
+      // Hijack the number of retry to fail after 2 tries
+      final int prevNumRetriesVal = setNumTries(conn, 2);
 
-    Put put3 = new Put(ROW_X);
-    put3.add(FAM_NAM, ROW_X, ROW_X);
-    Put put4 = new Put(otherRow);
-    put4.add(FAM_NAM, otherRow, otherRow);
+      Put put3 = new Put(ROW_X);
+      put3.add(FAM_NAM, ROW_X, ROW_X);
+      Put put4 = new Put(otherRow);
+      put4.add(FAM_NAM, otherRow, otherRow);
 
-    // do multi
-    table.batch(Lists.newArrayList(put4, put3)); // first should be a valid row,
-                                                 // second we get RegionMovedException.
+      // do multi
+      table.batch(Lists.newArrayList(put4, put3)); // first should be a valid row,
+      // second we get RegionMovedException.
 
-    setNumTries(conn, prevNumRetriesVal);
-    table.close();
-    conn.close();
+      setNumTries(conn, prevNumRetriesVal);
+    } finally {
+      table.close();
+    }
   }
 
   @Ignore ("Test presumes RETRY_BACKOFF will never change; it has") @Test

http://git-wip-us.apache.org/repos/asf/hbase/blob/4f5cde8a/hbase-server/src/test/java/org/apache/hadoop/hbase/client/TestMultiParallel.java
----------------------------------------------------------------------
diff --git a/hbase-server/src/test/java/org/apache/hadoop/hbase/client/TestMultiParallel.java b/hbase-server/src/test/java/org/apache/hadoop/hbase/client/TestMultiParallel.java
index 46c6e14..9f10385 100644
--- a/hbase-server/src/test/java/org/apache/hadoop/hbase/client/TestMultiParallel.java
+++ b/hbase-server/src/test/java/org/apache/hadoop/hbase/client/TestMultiParallel.java
@@ -33,7 +33,6 @@ import java.util.concurrent.ThreadPoolExecutor;
 
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
-import org.apache.commons.logging.impl.Log4JLogger;
 import org.apache.hadoop.hbase.Cell;
 import org.apache.hadoop.hbase.CellUtil;
 import org.apache.hadoop.hbase.HBaseTestingUtility;
@@ -43,12 +42,10 @@ import org.apache.hadoop.hbase.ServerName;
 import org.apache.hadoop.hbase.TableName;
 import org.apache.hadoop.hbase.Waiter;
 import org.apache.hadoop.hbase.exceptions.OperationConflictException;
-import org.apache.hadoop.hbase.ipc.RpcClient;
-import org.apache.hadoop.hbase.ipc.RpcServer;
+
 import org.apache.hadoop.hbase.util.Bytes;
 import org.apache.hadoop.hbase.util.JVMClusterUtil;
 import org.apache.hadoop.hbase.util.Threads;
-import org.apache.log4j.Level;
 import org.junit.AfterClass;
 import org.junit.Assert;
 import org.junit.Before;
@@ -70,6 +67,7 @@ public class TestMultiParallel {
   private static final byte [][] KEYS = makeKeys();
 
   private static final int slaves = 5; // also used for testing HTable pool size
+  private static Connection CONNECTION;
 
   @BeforeClass public static void beforeClass() throws Exception {
     // Uncomment the following lines if more verbosity is needed for
@@ -82,9 +80,11 @@ public class TestMultiParallel {
     UTIL.createMultiRegions(t, Bytes.toBytes(FAMILY));
     UTIL.waitTableEnabled(TEST_TABLE);
     t.close();
+    CONNECTION = ConnectionFactory.createConnection(UTIL.getConfiguration());
   }
 
   @AfterClass public static void afterClass() throws Exception {
+    CONNECTION.close();
     UTIL.shutdownMiniCluster();
   }
 
@@ -97,9 +97,6 @@ public class TestMultiParallel {
       // Wait until completing balance
       UTIL.waitFor(15 * 1000, UTIL.predicateNoRegionsInTransition());
     }
-    HConnection conn = HConnectionManager.getConnection(UTIL.getConfiguration());
-    conn.clearRegionCache();
-    conn.close();
     LOG.info("before done");
   }
 
@@ -328,7 +325,7 @@ public class TestMultiParallel {
   @Test (timeout=300000)
   public void testBatchWithPut() throws Exception {
     LOG.info("test=testBatchWithPut");
-    Table table = new HTable(UTIL.getConfiguration(), TEST_TABLE);
+    Table table = CONNECTION.getTable(TEST_TABLE);
 
     // put multiple rows using a batch
     List<Row> puts = constructPutRequests();
@@ -347,9 +344,8 @@ public class TestMultiParallel {
         results = table.batch(puts);
       } catch (RetriesExhaustedWithDetailsException ree) {
         LOG.info(ree.getExhaustiveDescription());
-        throw ree;
-      } finally {
         table.close();
+        throw ree;
       }
       validateSizeAndEmpty(results, KEYS.length);
     }
@@ -490,7 +486,8 @@ public class TestMultiParallel {
   @Test(timeout=300000)
   public void testNonceCollision() throws Exception {
     LOG.info("test=testNonceCollision");
-    HTable table = new HTable(UTIL.getConfiguration(), TEST_TABLE);
+    final Connection connection = ConnectionFactory.createConnection(UTIL.getConfiguration());
+    Table table = connection.getTable(TEST_TABLE);
     Put put = new Put(ONE_ROW);
     put.add(BYTES_FAMILY, QUALIFIER, Bytes.toBytes(0L));
 
@@ -509,8 +506,9 @@ public class TestMultiParallel {
         return nonce;
       }
     };
+
     NonceGenerator oldCnm =
-        ConnectionUtils.injectNonceGeneratorForTesting(table.getConnection(), cnm);
+      ConnectionUtils.injectNonceGeneratorForTesting((ClusterConnection)connection, cnm);
 
     // First test sequential requests.
     try {
@@ -540,7 +538,7 @@ public class TestMultiParallel {
           public void run() {
             Table table = null;
             try {
-              table = new HTable(UTIL.getConfiguration(), TEST_TABLE);
+              table = connection.getTable(TEST_TABLE);
             } catch (IOException e) {
               fail("Not expected");
             }
@@ -573,7 +571,7 @@ public class TestMultiParallel {
       validateResult(result, QUALIFIER, Bytes.toBytes((numRequests / 2) + 1L));
       table.close();
     } finally {
-      ConnectionManager.injectNonceGeneratorForTesting(table.getConnection(), oldCnm);
+      ConnectionManager.injectNonceGeneratorForTesting((ClusterConnection)connection, oldCnm);
     }
   }
 

http://git-wip-us.apache.org/repos/asf/hbase/blob/4f5cde8a/hbase-server/src/test/java/org/apache/hadoop/hbase/mapreduce/TestLoadIncrementalHFilesSplitRecovery.java
----------------------------------------------------------------------
diff --git a/hbase-server/src/test/java/org/apache/hadoop/hbase/mapreduce/TestLoadIncrementalHFilesSplitRecovery.java b/hbase-server/src/test/java/org/apache/hadoop/hbase/mapreduce/TestLoadIncrementalHFilesSplitRecovery.java
index f3aeed3..5d6f653 100644
--- a/hbase-server/src/test/java/org/apache/hadoop/hbase/mapreduce/TestLoadIncrementalHFilesSplitRecovery.java
+++ b/hbase-server/src/test/java/org/apache/hadoop/hbase/mapreduce/TestLoadIncrementalHFilesSplitRecovery.java
@@ -46,6 +46,8 @@ import org.apache.hadoop.hbase.LargeTests;
 import org.apache.hadoop.hbase.ServerName;
 import org.apache.hadoop.hbase.TableExistsException;
 import org.apache.hadoop.hbase.MetaTableAccessor;
+import org.apache.hadoop.hbase.client.Connection;
+import org.apache.hadoop.hbase.client.ConnectionFactory;
 import org.apache.hadoop.hbase.client.HConnection;
 import org.apache.hadoop.hbase.client.HConnectionManager;
 import org.apache.hadoop.hbase.client.HTable;
@@ -231,10 +233,10 @@ public class TestLoadIncrementalHFilesSplitRecovery {
    * @throws IOException
    */
   void assertExpectedTable(TableName table, int count, int value) throws IOException {
+    HTableDescriptor [] htds = util.getHBaseAdmin().listTables(table.getNameAsString());
+    assertEquals(htds.length, 1);
     Table t = null;
     try {
-      assertEquals(
-          util.getHBaseAdmin().listTables(table.getNameAsString()).length, 1);
       t = new HTable(util.getConfiguration(), table);
       Scan s = new Scan();
       ResultScanner sr = t.getScanner(s);
@@ -443,30 +445,33 @@ public class TestLoadIncrementalHFilesSplitRecovery {
   public void testGroupOrSplitWhenRegionHoleExistsInMeta() throws Exception {
     TableName tableName = TableName.valueOf("testGroupOrSplitWhenRegionHoleExistsInMeta");
     byte[][] SPLIT_KEYS = new byte[][] { Bytes.toBytes("row_00000100") };
-    HTable table = new HTable(util.getConfiguration(), tableName);
+    // Share connection. We were failing to find the table with our new reverse scan because it
+    // looks for first region, not any region -- that is how it works now.  The below removes first
+    // region in test.  Was reliant on the Connection caching having first region.
+    Connection connection = ConnectionFactory.createConnection(util.getConfiguration());
+    Table table = connection.getTable(tableName);
 
     setupTableWithSplitkeys(tableName, 10, SPLIT_KEYS);
     Path dir = buildBulkFiles(tableName, 2);
 
     final AtomicInteger countedLqis = new AtomicInteger();
-    LoadIncrementalHFiles loader = new LoadIncrementalHFiles(
-      util.getConfiguration()) {
-
-    protected List<LoadQueueItem> groupOrSplit(
-        Multimap<ByteBuffer, LoadQueueItem> regionGroups,
-        final LoadQueueItem item, final HTable htable,
-        final Pair<byte[][], byte[][]> startEndKeys) throws IOException {
-      List<LoadQueueItem> lqis = super.groupOrSplit(regionGroups, item, htable, startEndKeys);
-      if (lqis != null) {
-        countedLqis.addAndGet(lqis.size());
+    LoadIncrementalHFiles loader = new LoadIncrementalHFiles(util.getConfiguration()) {
+
+      protected List<LoadQueueItem> groupOrSplit(
+          Multimap<ByteBuffer, LoadQueueItem> regionGroups,
+          final LoadQueueItem item, final HTable htable,
+          final Pair<byte[][], byte[][]> startEndKeys) throws IOException {
+        List<LoadQueueItem> lqis = super.groupOrSplit(regionGroups, item, htable, startEndKeys);
+        if (lqis != null) {
+          countedLqis.addAndGet(lqis.size());
+        }
+        return lqis;
       }
-      return lqis;
-    }
-  };
+    };
 
     // do bulkload when there is no region hole in hbase:meta.
     try {
-      loader.doBulkLoad(dir, table);
+      loader.doBulkLoad(dir, (HTable)table);
     } catch (Exception e) {
       LOG.error("exeception=", e);
     }
@@ -481,13 +486,13 @@ public class TestLoadIncrementalHFilesSplitRecovery {
       util.getZooKeeperWatcher(), hConnection, tableName);
     for (HRegionInfo regionInfo : regionInfos) {
       if (Bytes.equals(regionInfo.getStartKey(), HConstants.EMPTY_BYTE_ARRAY)) {
-        MetaTableAccessor.deleteRegion(hConnection, regionInfo);
+        MetaTableAccessor.deleteRegion(connection, regionInfo);
         break;
       }
     }
 
     try {
-      loader.doBulkLoad(dir, table);
+      loader.doBulkLoad(dir, (HTable)table);
     } catch (Exception e) {
       LOG.error("exeception=", e);
       assertTrue("IOException expected", e instanceof IOException);
@@ -495,7 +500,43 @@ public class TestLoadIncrementalHFilesSplitRecovery {
 
     table.close();
 
-    this.assertExpectedTable(tableName, ROWCOUNT, 2);
+    // Make sure at least the one region that still exists can be found.
+    regionInfos = MetaTableAccessor.getTableRegions(util.getZooKeeperWatcher(),
+        connection, tableName);
+    assertTrue(regionInfos.size() >= 1);
+
+    this.assertExpectedTable(connection, tableName, ROWCOUNT, 2);
+    connection.close();
   }
-}
 
+  /**
+   * Checks that all columns have the expected value and that there is the
+   * expected number of rows.
+   * @throws IOException
+   */
+  void assertExpectedTable(final Connection connection, TableName table, int count, int value)
+  throws IOException {
+    HTableDescriptor [] htds = util.getHBaseAdmin().listTables(table.getNameAsString());
+    assertEquals(htds.length, 1);
+    Table t = null;
+    try {
+      t = connection.getTable(table);
+      Scan s = new Scan();
+      ResultScanner sr = t.getScanner(s);
+      int i = 0;
+      for (Result r : sr) {
+        i++;
+        for (NavigableMap<byte[], byte[]> nm : r.getNoVersionMap().values()) {
+          for (byte[] val : nm.values()) {
+            assertTrue(Bytes.equals(val, value(value)));
+          }
+        }
+      }
+      assertEquals(count, i);
+    } catch (IOException e) {
+      fail("Failed due to exception");
+    } finally {
+      if (t != null) t.close();
+    }
+  }
+}

http://git-wip-us.apache.org/repos/asf/hbase/blob/4f5cde8a/hbase-server/src/test/java/org/apache/hadoop/hbase/master/TestDistributedLogSplitting.java
----------------------------------------------------------------------
diff --git a/hbase-server/src/test/java/org/apache/hadoop/hbase/master/TestDistributedLogSplitting.java b/hbase-server/src/test/java/org/apache/hadoop/hbase/master/TestDistributedLogSplitting.java
index 27b2dc2..24b51dd 100644
--- a/hbase-server/src/test/java/org/apache/hadoop/hbase/master/TestDistributedLogSplitting.java
+++ b/hbase-server/src/test/java/org/apache/hadoop/hbase/master/TestDistributedLogSplitting.java
@@ -68,6 +68,7 @@ import org.apache.hadoop.hbase.ServerName;
 import org.apache.hadoop.hbase.SplitLogCounters;
 import org.apache.hadoop.hbase.TableName;
 import org.apache.hadoop.hbase.Waiter;
+import org.apache.hadoop.hbase.client.ClusterConnection;
 import org.apache.hadoop.hbase.client.ConnectionUtils;
 import org.apache.hadoop.hbase.client.Delete;
 import org.apache.hadoop.hbase.client.Get;
@@ -103,8 +104,7 @@ import org.apache.hadoop.hbase.zookeeper.ZKAssign;
 import org.apache.hadoop.hbase.zookeeper.ZKUtil;
 import org.apache.hadoop.hbase.zookeeper.ZooKeeperWatcher;
 import org.apache.hadoop.hdfs.MiniDFSCluster;
-import org.apache.log4j.Level;
-import org.apache.log4j.Logger;
+
 import org.apache.zookeeper.KeeperException;
 import org.junit.After;
 import org.junit.AfterClass;
@@ -332,7 +332,7 @@ public class TestDistributedLogSplitting {
     HTable ht = installTable(zkw, TABLE_NAME, FAMILY_NAME, NUM_REGIONS_TO_CREATE);
     NonceGeneratorWithDups ng = new NonceGeneratorWithDups();
     NonceGenerator oldNg =
-        ConnectionUtils.injectNonceGeneratorForTesting(ht.getConnection(), ng);
+        ConnectionUtils.injectNonceGeneratorForTesting((ClusterConnection)ht.getConnection(), ng);
 
     try {
       List<Increment> reqs = new ArrayList<Increment>();
@@ -366,7 +366,7 @@ public class TestDistributedLogSplitting {
         }
       }
     } finally {
-      ConnectionUtils.injectNonceGeneratorForTesting(ht.getConnection(), oldNg);
+      ConnectionUtils.injectNonceGeneratorForTesting((ClusterConnection) ht.getConnection(), oldNg);
       ht.close();
       zkw.close();
     }

http://git-wip-us.apache.org/repos/asf/hbase/blob/4f5cde8a/hbase-server/src/test/java/org/apache/hadoop/hbase/regionserver/TestScannerWithBulkload.java
----------------------------------------------------------------------
diff --git a/hbase-server/src/test/java/org/apache/hadoop/hbase/regionserver/TestScannerWithBulkload.java b/hbase-server/src/test/java/org/apache/hadoop/hbase/regionserver/TestScannerWithBulkload.java
index 38e53bc..f0042dd 100644
--- a/hbase-server/src/test/java/org/apache/hadoop/hbase/regionserver/TestScannerWithBulkload.java
+++ b/hbase-server/src/test/java/org/apache/hadoop/hbase/regionserver/TestScannerWithBulkload.java
@@ -177,7 +177,6 @@ public class TestScannerWithBulkload {
     table.put(put1);
     table.flushCommits();
     admin.flush(tableName);
-    admin.close();
     put0 = new Put(Bytes.toBytes("row1"));
     put0.add(new KeyValue(Bytes.toBytes("row1"), Bytes.toBytes("col"), Bytes.toBytes("q"), l, Bytes
         .toBytes("version1")));
@@ -198,7 +197,7 @@ public class TestScannerWithBulkload {
   @Test
   public void testBulkLoadWithParallelScan() throws Exception {
     TableName tableName = TableName.valueOf("testBulkLoadWithParallelScan");
-    final long l = System.currentTimeMillis();
+      final long l = System.currentTimeMillis();
     HBaseAdmin admin = new HBaseAdmin(TEST_UTIL.getConfiguration());
     createTable(admin, tableName);
     Scan scan = createScan();

http://git-wip-us.apache.org/repos/asf/hbase/blob/4f5cde8a/hbase-server/src/test/java/org/apache/hadoop/hbase/regionserver/TestSplitTransactionOnCluster.java
----------------------------------------------------------------------
diff --git a/hbase-server/src/test/java/org/apache/hadoop/hbase/regionserver/TestSplitTransactionOnCluster.java b/hbase-server/src/test/java/org/apache/hadoop/hbase/regionserver/TestSplitTransactionOnCluster.java
index 89870ca..dc1691f 100644
--- a/hbase-server/src/test/java/org/apache/hadoop/hbase/regionserver/TestSplitTransactionOnCluster.java
+++ b/hbase-server/src/test/java/org/apache/hadoop/hbase/regionserver/TestSplitTransactionOnCluster.java
@@ -107,8 +107,8 @@ import org.junit.experimental.categories.Category;
 import com.google.protobuf.ServiceException;
 
 /**
- * Like {@link TestSplitTransaction} in that we're testing {@link SplitTransaction}
- * only the below tests are against a running cluster where {@link TestSplitTransaction}
+ * Like TestSplitTransaction in that we're testing {@link SplitTransaction}
+ * only the below tests are against a running cluster where TestSplitTransaction
  * is tests against a bare {@link HRegion}.
  */
 @Category(LargeTests.class)
@@ -1053,7 +1053,7 @@ public class TestSplitTransactionOnCluster {
       fail("Each table should have at least one region.");
     }
     ServerName serverName =
-        cluster.getServerHoldingRegion(firstTableRegions.get(0).getRegionName());
+        cluster.getServerHoldingRegion(firstTable, firstTableRegions.get(0).getRegionName());
     admin.move(secondTableRegions.get(0).getRegionInfo().getEncodedNameAsBytes(),
       Bytes.toBytes(serverName.getServerName()));
     Table table1 = null;

http://git-wip-us.apache.org/repos/asf/hbase/blob/4f5cde8a/hbase-server/src/test/java/org/apache/hadoop/hbase/security/access/TestAccessController2.java
----------------------------------------------------------------------
diff --git a/hbase-server/src/test/java/org/apache/hadoop/hbase/security/access/TestAccessController2.java b/hbase-server/src/test/java/org/apache/hadoop/hbase/security/access/TestAccessController2.java
index f06cf0e..acf000b2 100644
--- a/hbase-server/src/test/java/org/apache/hadoop/hbase/security/access/TestAccessController2.java
+++ b/hbase-server/src/test/java/org/apache/hadoop/hbase/security/access/TestAccessController2.java
@@ -85,7 +85,7 @@ public class TestAccessController2 extends SecureTestUtil {
       public Object run() throws Exception {
         HTableDescriptor desc = new HTableDescriptor(TEST_TABLE.getTableName());
         desc.addFamily(new HColumnDescriptor(TEST_FAMILY));
-        Admin admin = new HBaseAdmin(conf);
+        Admin admin = new HBaseAdmin(TEST_UTIL.getConfiguration());
         try {
           admin.createTable(desc);
         } finally {


Mime
View raw message