You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@hbase.apache.org by st...@apache.org on 2014/07/03 04:01:29 UTC

[4/8] HBASE-4495 CatalogTracker has an identity crisis; needs to be cut-back in scope (Mikhail Antonov)

http://git-wip-us.apache.org/repos/asf/hbase/blob/ea085c63/hbase-server/src/test/java/org/apache/hadoop/hbase/catalog/TestMetaReaderEditorNoCluster.java
----------------------------------------------------------------------
diff --git a/hbase-server/src/test/java/org/apache/hadoop/hbase/catalog/TestMetaReaderEditorNoCluster.java b/hbase-server/src/test/java/org/apache/hadoop/hbase/catalog/TestMetaReaderEditorNoCluster.java
deleted file mode 100644
index ea2324c..0000000
--- a/hbase-server/src/test/java/org/apache/hadoop/hbase/catalog/TestMetaReaderEditorNoCluster.java
+++ /dev/null
@@ -1,228 +0,0 @@
-/**
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.hadoop.hbase.catalog;
-
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertNotNull;
-import static org.junit.Assert.assertNull;
-import static org.junit.Assert.assertTrue;
-
-import java.io.IOException;
-import java.util.ArrayList;
-import java.util.List;
-import java.util.NavigableMap;
-
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-import org.apache.hadoop.hbase.Abortable;
-import org.apache.hadoop.hbase.Cell;
-import org.apache.hadoop.hbase.CellScannable;
-import org.apache.hadoop.hbase.CellUtil;
-import org.apache.hadoop.hbase.RegionLocations;
-import org.apache.hadoop.hbase.TableName;
-import org.apache.hadoop.hbase.HBaseTestingUtility;
-import org.apache.hadoop.hbase.HConstants;
-import org.apache.hadoop.hbase.HRegionInfo;
-import org.apache.hadoop.hbase.HRegionLocation;
-import org.apache.hadoop.hbase.KeyValue;
-import org.apache.hadoop.hbase.MediumTests;
-import org.apache.hadoop.hbase.ServerName;
-import org.apache.hadoop.hbase.client.ClusterConnection;
-import org.apache.hadoop.hbase.client.HConnection;
-import org.apache.hadoop.hbase.client.HConnectionManager;
-import org.apache.hadoop.hbase.client.HConnectionTestingUtility;
-import org.apache.hadoop.hbase.client.Result;
-import org.apache.hadoop.hbase.ipc.PayloadCarryingRpcController;
-import org.apache.hadoop.hbase.protobuf.generated.ClientProtos;
-import org.apache.hadoop.hbase.protobuf.generated.ClientProtos.ScanRequest;
-import org.apache.hadoop.hbase.protobuf.generated.ClientProtos.ScanResponse;
-import org.apache.hadoop.hbase.util.Bytes;
-import org.apache.hadoop.hbase.zookeeper.ZooKeeperWatcher;
-import org.junit.After;
-import org.junit.Before;
-import org.junit.Test;
-import org.junit.experimental.categories.Category;
-import org.mockito.Mockito;
-import org.mockito.invocation.InvocationOnMock;
-import org.mockito.stubbing.Answer;
-
-import com.google.protobuf.RpcController;
-import com.google.protobuf.ServiceException;
-
-/**
- * Test MetaReader/Editor but without spinning up a cluster.
- * We mock regionserver back and forth (we do spin up a zk cluster).
- */
-@Category(MediumTests.class)
-public class TestMetaReaderEditorNoCluster {
-  private static final Log LOG = LogFactory.getLog(TestMetaReaderEditorNoCluster.class);
-  private static final  HBaseTestingUtility UTIL = new HBaseTestingUtility();
-  private static final Abortable ABORTABLE = new Abortable() {
-    boolean aborted = false;
-    @Override
-    public void abort(String why, Throwable e) {
-      LOG.info(why, e);
-      this.aborted = true;
-      throw new RuntimeException(e);
-    }
-    @Override
-    public boolean isAborted()  {
-      return this.aborted;
-    }
-  };
-
-  @Before
-  public void before() throws Exception {
-    UTIL.startMiniZKCluster();
-  }
-
-  @After
-  public void after() throws IOException {
-    UTIL.shutdownMiniZKCluster();
-  }
-
-  @Test
-  public void testGetHRegionInfo() throws IOException {
-    assertNull(HRegionInfo.getHRegionInfo(new Result()));
-
-    List<Cell> kvs = new ArrayList<Cell>();
-    Result r = Result.create(kvs);
-    assertNull(HRegionInfo.getHRegionInfo(r));
-
-    byte [] f = HConstants.CATALOG_FAMILY;
-    // Make a key value that doesn't have the expected qualifier.
-    kvs.add(new KeyValue(HConstants.EMPTY_BYTE_ARRAY, f,
-      HConstants.SERVER_QUALIFIER, f));
-    r = Result.create(kvs);
-    assertNull(HRegionInfo.getHRegionInfo(r));
-    // Make a key that does not have a regioninfo value.
-    kvs.add(new KeyValue(HConstants.EMPTY_BYTE_ARRAY, f,
-      HConstants.REGIONINFO_QUALIFIER, f));
-    HRegionInfo hri = HRegionInfo.getHRegionInfo(Result.create(kvs));
-    assertTrue(hri == null);
-    // OK, give it what it expects
-    kvs.clear();
-    kvs.add(new KeyValue(HConstants.EMPTY_BYTE_ARRAY, f,
-      HConstants.REGIONINFO_QUALIFIER,
-      HRegionInfo.FIRST_META_REGIONINFO.toByteArray()));
-    hri = HRegionInfo.getHRegionInfo(Result.create(kvs));
-    assertNotNull(hri);
-    assertTrue(hri.equals(HRegionInfo.FIRST_META_REGIONINFO));
-  }
-
-  /**
-   * Test that MetaReader will ride over server throwing
-   * "Server not running" IOEs.
-   * @see @link {https://issues.apache.org/jira/browse/HBASE-3446}
-   * @throws IOException
-   * @throws InterruptedException
-   */
-  @Test
-  public void testRideOverServerNotRunning()
-      throws IOException, InterruptedException, ServiceException {
-    // Need a zk watcher.
-    ZooKeeperWatcher zkw = new ZooKeeperWatcher(UTIL.getConfiguration(),
-      this.getClass().getSimpleName(), ABORTABLE, true);
-    // This is a servername we use in a few places below.
-    ServerName sn = ServerName.valueOf("example.com", 1234, System.currentTimeMillis());
-
-    HConnection connection;
-    CatalogTracker ct = null;
-    try {
-      // Mock an ClientProtocol. Our mock implementation will fail a few
-      // times when we go to open a scanner.
-      final ClientProtos.ClientService.BlockingInterface implementation =
-        Mockito.mock(ClientProtos.ClientService.BlockingInterface.class);
-      // When scan called throw IOE 'Server not running' a few times
-      // before we return a scanner id.  Whats WEIRD is that these
-      // exceptions do not show in the log because they are caught and only
-      // printed if we FAIL.  We eventually succeed after retry so these don't
-      // show.  We will know if they happened or not because we will ask
-      // mockito at the end of this test to verify that scan was indeed
-      // called the wanted number of times.
-      List<Cell> kvs = new ArrayList<Cell>();
-      final byte [] rowToVerify = Bytes.toBytes("rowToVerify");
-      kvs.add(new KeyValue(rowToVerify,
-        HConstants.CATALOG_FAMILY, HConstants.REGIONINFO_QUALIFIER,
-        HRegionInfo.FIRST_META_REGIONINFO.toByteArray()));
-      kvs.add(new KeyValue(rowToVerify,
-        HConstants.CATALOG_FAMILY, HConstants.SERVER_QUALIFIER,
-        Bytes.toBytes(sn.getHostAndPort())));
-      kvs.add(new KeyValue(rowToVerify,
-        HConstants.CATALOG_FAMILY, HConstants.STARTCODE_QUALIFIER,
-        Bytes.toBytes(sn.getStartcode())));
-      final List<CellScannable> cellScannables = new ArrayList<CellScannable>(1);
-      cellScannables.add(Result.create(kvs));
-      final ScanResponse.Builder builder = ScanResponse.newBuilder();
-      for (CellScannable result : cellScannables) {
-        builder.addCellsPerResult(((Result)result).size());
-      }
-      Mockito.when(implementation.scan((RpcController) Mockito.any(), (ScanRequest) Mockito.any()))
-          .thenThrow(new ServiceException("Server not running (1 of 3)"))
-          .thenThrow(new ServiceException("Server not running (2 of 3)"))
-          .thenThrow(new ServiceException("Server not running (3 of 3)"))
-          .thenReturn(ScanResponse.newBuilder().setScannerId(1234567890L).build())
-          .thenAnswer(new Answer<ScanResponse>() {
-            public ScanResponse answer(InvocationOnMock invocation) throws Throwable {
-              ((PayloadCarryingRpcController) invocation.getArguments()[0]).setCellScanner(CellUtil
-                  .createCellScanner(cellScannables));
-              return builder.build();
-            }
-          }).thenReturn(ScanResponse.newBuilder().setMoreResults(false).build());
-      // Associate a spied-upon HConnection with UTIL.getConfiguration.  Need
-      // to shove this in here first so it gets picked up all over; e.g. by
-      // HTable.
-      connection = HConnectionTestingUtility.getSpiedConnection(UTIL.getConfiguration());
-      
-      // Fix the location lookup so it 'works' though no network.  First
-      // make an 'any location' object.
-      final HRegionLocation anyLocation =
-        new HRegionLocation(HRegionInfo.FIRST_META_REGIONINFO, sn);
-      final RegionLocations rl = new RegionLocations(anyLocation);
-      // Return the RegionLocations object when locateRegion
-      // The ugly format below comes of 'Important gotcha on spying real objects!' from
-      // http://mockito.googlecode.com/svn/branches/1.6/javadoc/org/mockito/Mockito.html
-      ClusterConnection cConnection =
-          HConnectionTestingUtility.getSpiedClusterConnection(UTIL.getConfiguration());
-      Mockito.doReturn(rl).when
-      (cConnection).locateRegion((TableName)Mockito.any(), (byte[])Mockito.any(),
-              Mockito.anyBoolean(), Mockito.anyBoolean(), Mockito.anyInt());
-
-      // Now shove our HRI implementation into the spied-upon connection.
-      Mockito.doReturn(implementation).
-        when(connection).getClient(Mockito.any(ServerName.class));
-
-      // Now start up the catalogtracker with our doctored Connection.
-      ct = new CatalogTracker(zkw, null, connection, ABORTABLE);
-      ct.start();
-      // Scan meta for user tables and verify we got back expected answer.
-      NavigableMap<HRegionInfo, Result> hris = MetaReader.getServerUserRegions(ct, sn);
-      assertEquals(1, hris.size());
-      assertTrue(hris.firstEntry().getKey().equals(HRegionInfo.FIRST_META_REGIONINFO));
-      assertTrue(Bytes.equals(rowToVerify, hris.firstEntry().getValue().getRow()));
-      // Finally verify that scan was called four times -- three times
-      // with exception and then on 4th, 5th and 6th attempt we succeed
-      Mockito.verify(implementation, Mockito.times(6)).
-        scan((RpcController)Mockito.any(), (ScanRequest)Mockito.any());
-    } finally {
-      if (ct != null) ct.stop();
-      HConnectionManager.deleteConnection(UTIL.getConfiguration());
-      zkw.close();
-    }
-  }
-}

http://git-wip-us.apache.org/repos/asf/hbase/blob/ea085c63/hbase-server/src/test/java/org/apache/hadoop/hbase/client/TestAdmin.java
----------------------------------------------------------------------
diff --git a/hbase-server/src/test/java/org/apache/hadoop/hbase/client/TestAdmin.java b/hbase-server/src/test/java/org/apache/hadoop/hbase/client/TestAdmin.java
index 54b751d..caf3c61 100644
--- a/hbase-server/src/test/java/org/apache/hadoop/hbase/client/TestAdmin.java
+++ b/hbase-server/src/test/java/org/apache/hadoop/hbase/client/TestAdmin.java
@@ -54,7 +54,6 @@ import org.apache.hadoop.hbase.TableNotDisabledException;
 import org.apache.hadoop.hbase.TableNotEnabledException;
 import org.apache.hadoop.hbase.TableNotFoundException;
 import org.apache.hadoop.hbase.ZooKeeperConnectionException;
-import org.apache.hadoop.hbase.catalog.CatalogTracker;
 import org.apache.hadoop.hbase.constraint.ConstraintException;
 import org.apache.hadoop.hbase.executor.EventHandler;
 import org.apache.hadoop.hbase.master.AssignmentManager;
@@ -1764,18 +1763,13 @@ public class TestAdmin {
     final byte [] nameBytes = Bytes.toBytes(name);
     HTable t = TEST_UTIL.createTable(nameBytes, HConstants.CATALOG_FAMILY);
     TEST_UTIL.createMultiRegions(t, HConstants.CATALOG_FAMILY);
-    CatalogTracker ct = new CatalogTracker(TEST_UTIL.getConfiguration());
-    ct.start();
-    try {
-      HRegionLocation regionLocation = t.getRegionLocation("mmm");
-      HRegionInfo region = regionLocation.getRegionInfo();
-      byte[] regionName = region.getRegionName();
-      Pair<HRegionInfo, ServerName> pair = admin.getRegion(regionName, ct);
-      assertTrue(Bytes.equals(regionName, pair.getFirst().getRegionName()));
-      pair = admin.getRegion(region.getEncodedNameAsBytes(), ct);
-      assertTrue(Bytes.equals(regionName, pair.getFirst().getRegionName()));
-    } finally {
-      ct.stop();
-    }
+
+    HRegionLocation regionLocation = t.getRegionLocation("mmm");
+    HRegionInfo region = regionLocation.getRegionInfo();
+    byte[] regionName = region.getRegionName();
+    Pair<HRegionInfo, ServerName> pair = admin.getRegion(regionName);
+    assertTrue(Bytes.equals(regionName, pair.getFirst().getRegionName()));
+    pair = admin.getRegion(region.getEncodedNameAsBytes());
+    assertTrue(Bytes.equals(regionName, pair.getFirst().getRegionName()));
   }
 }

http://git-wip-us.apache.org/repos/asf/hbase/blob/ea085c63/hbase-server/src/test/java/org/apache/hadoop/hbase/client/TestMetaScanner.java
----------------------------------------------------------------------
diff --git a/hbase-server/src/test/java/org/apache/hadoop/hbase/client/TestMetaScanner.java b/hbase-server/src/test/java/org/apache/hadoop/hbase/client/TestMetaScanner.java
index 4e5a656..77c1cbc 100644
--- a/hbase-server/src/test/java/org/apache/hadoop/hbase/client/TestMetaScanner.java
+++ b/hbase-server/src/test/java/org/apache/hadoop/hbase/client/TestMetaScanner.java
@@ -24,7 +24,6 @@ import static org.mockito.Mockito.mock;
 import static org.mockito.Mockito.reset;
 import static org.mockito.Mockito.times;
 import static org.mockito.Mockito.verify;
-import static org.mockito.Mockito.when;
 
 import java.math.BigDecimal;
 import java.util.List;
@@ -34,14 +33,13 @@ import java.util.Random;
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
 import org.apache.hadoop.conf.Configuration;
+import org.apache.hadoop.hbase.MetaTableAccessor;
 import org.apache.hadoop.hbase.TableName;
 import org.apache.hadoop.hbase.HBaseTestingUtility;
 import org.apache.hadoop.hbase.HConstants;
 import org.apache.hadoop.hbase.HRegionInfo;
 import org.apache.hadoop.hbase.MediumTests;
 import org.apache.hadoop.hbase.ServerName;
-import org.apache.hadoop.hbase.catalog.CatalogTracker;
-import org.apache.hadoop.hbase.catalog.MetaEditor;
 import org.apache.hadoop.hbase.util.Bytes;
 import org.apache.hadoop.hbase.util.StoppableImplementation;
 import org.apache.hadoop.hbase.util.Threads;
@@ -50,6 +48,7 @@ import org.junit.After;
 import org.junit.Assert;
 import org.junit.Test;
 import org.junit.experimental.categories.Category;
+
 @Category(MediumTests.class)
 public class TestMetaScanner {
   final Log LOG = LogFactory.getLog(getClass());
@@ -127,8 +126,6 @@ public class TestMetaScanner {
         TableName.valueOf("testConcurrentMetaScannerAndCatalogJanitor");
     final byte[] FAMILY = Bytes.toBytes("family");
     TEST_UTIL.createTable(TABLENAME, FAMILY);
-    final CatalogTracker catalogTracker = mock(CatalogTracker.class);
-    when(catalogTracker.getConnection()).thenReturn(TEST_UTIL.getHBaseAdmin().getConnection());
 
     class RegionMetaSplitter extends StoppableImplementation implements Runnable {
       Random random = new Random();
@@ -169,7 +166,8 @@ public class TestMetaScanner {
               Bytes.toBytes(midKey),
               end);
 
-            MetaEditor.splitRegion(catalogTracker, parent, splita, splitb, ServerName.valueOf("fooserver", 1, 0));
+            MetaTableAccessor.splitRegion(TEST_UTIL.getHBaseAdmin().getConnection(),
+              parent, splita, splitb, ServerName.valueOf("fooserver", 1, 0));
 
             Threads.sleep(random.nextInt(200));
           } catch (Throwable e) {

http://git-wip-us.apache.org/repos/asf/hbase/blob/ea085c63/hbase-server/src/test/java/org/apache/hadoop/hbase/client/TestScannerTimeout.java
----------------------------------------------------------------------
diff --git a/hbase-server/src/test/java/org/apache/hadoop/hbase/client/TestScannerTimeout.java b/hbase-server/src/test/java/org/apache/hadoop/hbase/client/TestScannerTimeout.java
index e971e4f..65fb0d6 100644
--- a/hbase-server/src/test/java/org/apache/hadoop/hbase/client/TestScannerTimeout.java
+++ b/hbase-server/src/test/java/org/apache/hadoop/hbase/client/TestScannerTimeout.java
@@ -27,7 +27,7 @@ import org.apache.hadoop.conf.Configuration;
 import org.apache.hadoop.hbase.HBaseTestingUtility;
 import org.apache.hadoop.hbase.HConstants;
 import org.apache.hadoop.hbase.LargeTests;
-import org.apache.hadoop.hbase.catalog.MetaReader;
+import org.apache.hadoop.hbase.MetaTableAccessor;
 import org.apache.hadoop.hbase.regionserver.HRegionServer;
 import org.apache.hadoop.hbase.util.Bytes;
 import org.junit.AfterClass;
@@ -165,7 +165,7 @@ public class TestScannerTimeout {
     Scan scan = new Scan();
     scan.setCaching(SCANNER_CACHING);
     LOG.info("************ TEST3686A");
-    MetaReader.fullScanMetaAndPrint(TEST_UTIL.getHBaseCluster().getMaster().getCatalogTracker());
+    MetaTableAccessor.fullScanMetaAndPrint(TEST_UTIL.getHBaseAdmin().getConnection());
     // Set a very high timeout, we want to test what happens when a RS
     // fails but the region is recovered before the lease times out.
     // Since the RS is already created, this conf is client-side only for

http://git-wip-us.apache.org/repos/asf/hbase/blob/ea085c63/hbase-server/src/test/java/org/apache/hadoop/hbase/coprocessor/TestRegionServerObserver.java
----------------------------------------------------------------------
diff --git a/hbase-server/src/test/java/org/apache/hadoop/hbase/coprocessor/TestRegionServerObserver.java b/hbase-server/src/test/java/org/apache/hadoop/hbase/coprocessor/TestRegionServerObserver.java
index ada3e6f..5920bb5 100644
--- a/hbase-server/src/test/java/org/apache/hadoop/hbase/coprocessor/TestRegionServerObserver.java
+++ b/hbase-server/src/test/java/org/apache/hadoop/hbase/coprocessor/TestRegionServerObserver.java
@@ -35,7 +35,7 @@ import org.apache.hadoop.hbase.HTableDescriptor;
 import org.apache.hadoop.hbase.MediumTests;
 import org.apache.hadoop.hbase.MiniHBaseCluster;
 import org.apache.hadoop.hbase.TableName;
-import org.apache.hadoop.hbase.catalog.MetaEditor;
+import org.apache.hadoop.hbase.MetaTableAccessor;
 import org.apache.hadoop.hbase.client.HBaseAdmin;
 import org.apache.hadoop.hbase.client.Mutation;
 import org.apache.hadoop.hbase.regionserver.HRegion;
@@ -152,7 +152,7 @@ public class TestRegionServerObserver {
       mergedRegion = rmt.stepsBeforePONR(rs, rs, false);
       rmt.prepareMutationsForMerge(mergedRegion.getRegionInfo(), regionA.getRegionInfo(),
         regionB.getRegionInfo(), rs.getServerName(), metaEntries);
-      MetaEditor.mutateMetaTable(rs.getCatalogTracker(), metaEntries);
+      MetaTableAccessor.mutateMetaTable(rs.getShortCircuitConnection(), metaEntries);
     }
 
     @Override

http://git-wip-us.apache.org/repos/asf/hbase/blob/ea085c63/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 f302f10..491c2c6 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
@@ -45,10 +45,9 @@ import org.apache.hadoop.hbase.HTableDescriptor;
 import org.apache.hadoop.hbase.LargeTests;
 import org.apache.hadoop.hbase.ServerName;
 import org.apache.hadoop.hbase.TableExistsException;
-import org.apache.hadoop.hbase.catalog.CatalogTracker;
-import org.apache.hadoop.hbase.catalog.MetaEditor;
-import org.apache.hadoop.hbase.catalog.MetaReader;
+import org.apache.hadoop.hbase.MetaTableAccessor;
 import org.apache.hadoop.hbase.client.HConnection;
+import org.apache.hadoop.hbase.client.HConnectionManager;
 import org.apache.hadoop.hbase.client.HTable;
 import org.apache.hadoop.hbase.client.Result;
 import org.apache.hadoop.hbase.client.ResultScanner;
@@ -474,11 +473,12 @@ public class TestLoadIncrementalHFilesSplitRecovery {
     dir = buildBulkFiles(tableName, 3);
 
     // Mess it up by leaving a hole in the hbase:meta
-    CatalogTracker ct = new CatalogTracker(util.getConfiguration());
-    List<HRegionInfo> regionInfos = MetaReader.getTableRegions(ct, TableName.valueOf(tableName));
+    HConnection hConnection = HConnectionManager.getConnection(util.getConfiguration());
+    List<HRegionInfo> regionInfos = MetaTableAccessor.getTableRegions(
+      util.getZooKeeperWatcher(), hConnection, TableName.valueOf(tableName));
     for (HRegionInfo regionInfo : regionInfos) {
       if (Bytes.equals(regionInfo.getStartKey(), HConstants.EMPTY_BYTE_ARRAY)) {
-        MetaEditor.deleteRegion(ct, regionInfo);
+        MetaTableAccessor.deleteRegion(hConnection, regionInfo);
         break;
       }
     }

http://git-wip-us.apache.org/repos/asf/hbase/blob/ea085c63/hbase-server/src/test/java/org/apache/hadoop/hbase/master/MockRegionServer.java
----------------------------------------------------------------------
diff --git a/hbase-server/src/test/java/org/apache/hadoop/hbase/master/MockRegionServer.java b/hbase-server/src/test/java/org/apache/hadoop/hbase/master/MockRegionServer.java
index af58a84..9971c4c 100644
--- a/hbase-server/src/test/java/org/apache/hadoop/hbase/master/MockRegionServer.java
+++ b/hbase-server/src/test/java/org/apache/hadoop/hbase/master/MockRegionServer.java
@@ -36,8 +36,8 @@ import org.apache.hadoop.hbase.HRegionInfo;
 import org.apache.hadoop.hbase.ServerName;
 import org.apache.hadoop.hbase.TableName;
 import org.apache.hadoop.hbase.ZooKeeperConnectionException;
-import org.apache.hadoop.hbase.catalog.CatalogTracker;
 import org.apache.hadoop.hbase.client.Get;
+import org.apache.hadoop.hbase.client.HConnection;
 import org.apache.hadoop.hbase.client.Result;
 import org.apache.hadoop.hbase.client.Scan;
 import org.apache.hadoop.hbase.executor.ExecutorService;
@@ -94,6 +94,7 @@ import org.apache.hadoop.hbase.regionserver.RegionServerServices;
 import org.apache.hadoop.hbase.regionserver.ServerNonceManager;
 import org.apache.hadoop.hbase.regionserver.wal.HLog;
 import org.apache.hadoop.hbase.util.Bytes;
+import org.apache.hadoop.hbase.zookeeper.MetaTableLocator;
 import org.apache.hadoop.hbase.zookeeper.ZooKeeperWatcher;
 import org.apache.zookeeper.KeeperException;
 
@@ -275,8 +276,12 @@ ClientProtos.ClientService.BlockingInterface, RegionServerServices {
   }
 
   @Override
-  public CatalogTracker getCatalogTracker() {
-    // TODO Auto-generated method stub
+  public HConnection getShortCircuitConnection() {
+    return null;
+  }
+
+  @Override
+  public MetaTableLocator getMetaTableLocator() {
     return null;
   }
 
@@ -313,7 +318,7 @@ ClientProtos.ClientService.BlockingInterface, RegionServerServices {
   }
 
   @Override
-  public void postOpenDeployTasks(HRegion r, CatalogTracker ct)
+  public void postOpenDeployTasks(HRegion r)
       throws KeeperException, IOException {
     // TODO Auto-generated method stub
   }

http://git-wip-us.apache.org/repos/asf/hbase/blob/ea085c63/hbase-server/src/test/java/org/apache/hadoop/hbase/master/TestActiveMasterManager.java
----------------------------------------------------------------------
diff --git a/hbase-server/src/test/java/org/apache/hadoop/hbase/master/TestActiveMasterManager.java b/hbase-server/src/test/java/org/apache/hadoop/hbase/master/TestActiveMasterManager.java
index 1c010b2..5596cb3 100644
--- a/hbase-server/src/test/java/org/apache/hadoop/hbase/master/TestActiveMasterManager.java
+++ b/hbase-server/src/test/java/org/apache/hadoop/hbase/master/TestActiveMasterManager.java
@@ -33,10 +33,11 @@ import org.apache.hadoop.hbase.HBaseTestingUtility;
 import org.apache.hadoop.hbase.MediumTests;
 import org.apache.hadoop.hbase.Server;
 import org.apache.hadoop.hbase.ServerName;
-import org.apache.hadoop.hbase.catalog.CatalogTracker;
+import org.apache.hadoop.hbase.client.HConnection;
 import org.apache.hadoop.hbase.monitoring.MonitoredTask;
 import org.apache.hadoop.hbase.zookeeper.ClusterStatusTracker;
 import org.apache.hadoop.hbase.zookeeper.MasterAddressTracker;
+import org.apache.hadoop.hbase.zookeeper.MetaTableLocator;
 import org.apache.hadoop.hbase.zookeeper.ZKUtil;
 import org.apache.hadoop.hbase.zookeeper.ZooKeeperListener;
 import org.apache.hadoop.hbase.zookeeper.ZooKeeperWatcher;
@@ -302,7 +303,12 @@ public class TestActiveMasterManager {
     }
 
     @Override
-    public CatalogTracker getCatalogTracker() {
+    public HConnection getShortCircuitConnection() {
+      return null;
+    }
+
+    @Override
+    public MetaTableLocator getMetaTableLocator() {
       return null;
     }
 

http://git-wip-us.apache.org/repos/asf/hbase/blob/ea085c63/hbase-server/src/test/java/org/apache/hadoop/hbase/master/TestAssignmentManager.java
----------------------------------------------------------------------
diff --git a/hbase-server/src/test/java/org/apache/hadoop/hbase/master/TestAssignmentManager.java b/hbase-server/src/test/java/org/apache/hadoop/hbase/master/TestAssignmentManager.java
index 0d0b789..4a3d4f2 100644
--- a/hbase-server/src/test/java/org/apache/hadoop/hbase/master/TestAssignmentManager.java
+++ b/hbase-server/src/test/java/org/apache/hadoop/hbase/master/TestAssignmentManager.java
@@ -48,8 +48,7 @@ import org.apache.hadoop.hbase.ServerLoad;
 import org.apache.hadoop.hbase.ServerName;
 import org.apache.hadoop.hbase.TableName;
 import org.apache.hadoop.hbase.ZooKeeperConnectionException;
-import org.apache.hadoop.hbase.catalog.CatalogTracker;
-import org.apache.hadoop.hbase.catalog.MetaMockingUtil;
+import org.apache.hadoop.hbase.MetaMockingUtil;
 import org.apache.hadoop.hbase.client.HConnection;
 import org.apache.hadoop.hbase.client.HConnectionTestingUtility;
 import org.apache.hadoop.hbase.client.Result;
@@ -80,6 +79,7 @@ import org.apache.hadoop.hbase.regionserver.RegionOpeningState;
 import org.apache.hadoop.hbase.util.Bytes;
 import org.apache.hadoop.hbase.util.EnvironmentEdgeManager;
 import org.apache.hadoop.hbase.util.Threads;
+import org.apache.hadoop.hbase.zookeeper.MetaTableLocator;
 import org.apache.hadoop.hbase.zookeeper.RecoverableZooKeeper;
 import org.apache.hadoop.hbase.zookeeper.ZKAssign;
 import org.apache.hadoop.hbase.zookeeper.ZKUtil;
@@ -123,6 +123,7 @@ public class TestAssignmentManager {
   private ServerManager serverManager;
   private ZooKeeperWatcher watcher;
   private CoordinatedStateManager cp;
+  private MetaTableLocator mtl;
   private LoadBalancer balancer;
   private HMaster master;
 
@@ -148,7 +149,6 @@ public class TestAssignmentManager {
     this.server = Mockito.mock(Server.class);
     Mockito.when(server.getServerName()).thenReturn(ServerName.valueOf("master,1,1"));
     Mockito.when(server.getConfiguration()).thenReturn(HTU.getConfiguration());
-    Mockito.when(server.getCatalogTracker()).thenReturn(null);
     this.watcher =
       new ZooKeeperWatcher(HTU.getConfiguration(), "mockedServer", this.server, true);
     Mockito.when(server.getZooKeeper()).thenReturn(this.watcher);
@@ -159,7 +159,18 @@ public class TestAssignmentManager {
     cp.initialize(this.server);
     cp.start();
 
+    mtl = Mockito.mock(MetaTableLocator.class);
+
     Mockito.when(server.getCoordinatedStateManager()).thenReturn(cp);
+    Mockito.when(server.getMetaTableLocator()).thenReturn(mtl);
+
+    // Get a connection w/ mocked up common methods.
+    HConnection connection =
+      HConnectionTestingUtility.getMockedConnection(HTU.getConfiguration());
+
+    // Make it so we can get a catalogtracker from servermanager.. .needed
+    // down in guts of server shutdown handler.
+    Mockito.when(server.getShortCircuitConnection()).thenReturn(connection);
 
     // Mock a ServerManager.  Say server SERVERNAME_{A,B} are online.  Also
     // make it so if close or open, we return 'success'.
@@ -385,12 +396,11 @@ public class TestAssignmentManager {
     ExecutorService executor = startupMasterExecutor("testBalanceExecutor");
 
     // We need a mocked catalog tracker.
-    CatalogTracker ct = Mockito.mock(CatalogTracker.class);
     LoadBalancer balancer = LoadBalancerFactory.getLoadBalancer(server
         .getConfiguration());
     // Create an AM.
     AssignmentManager am = new AssignmentManager(this.server,
-      this.serverManager, ct, balancer, executor, null, master.getTableLockManager());
+      this.serverManager, balancer, executor, null, master.getTableLockManager());
     am.failoverCleanupDone.set(true);
     try {
       // Make sure our new AM gets callbacks; once registered, can't unregister.
@@ -459,13 +469,11 @@ public class TestAssignmentManager {
     // handling zk callbacks.
     ExecutorService executor = startupMasterExecutor("testShutdownHandler");
 
-    // We need a mocked catalog tracker.
-    CatalogTracker ct = Mockito.mock(CatalogTracker.class);
     // Create an AM.
     AssignmentManagerWithExtrasForTesting am = setUpMockedAssignmentManager(
         this.server, this.serverManager);
     try {
-      processServerShutdownHandler(ct, am, false);
+      processServerShutdownHandler(am, false);
     } finally {
       executor.shutdown();
       am.shutdown();
@@ -513,7 +521,6 @@ public class TestAssignmentManager {
     // handling zk callbacks.
     ExecutorService executor = startupMasterExecutor("testSSHWhenSplitRegionInProgress");
     // We need a mocked catalog tracker.
-    CatalogTracker ct = Mockito.mock(CatalogTracker.class);
     ZKAssign.deleteAllNodes(this.watcher);
 
     // Create an AM.
@@ -533,7 +540,7 @@ public class TestAssignmentManager {
     ZKUtil.createAndWatch(this.watcher, node, data.toByteArray());
 
     try {
-      processServerShutdownHandler(ct, am, regionSplitDone);
+      processServerShutdownHandler(am, regionSplitDone);
       // check znode deleted or not.
       // In both cases the znode should be deleted.
 
@@ -561,14 +568,12 @@ public class TestAssignmentManager {
     // Create and startup an executor. This is used by AssignmentManager
     // handling zk callbacks.
     ExecutorService executor = startupMasterExecutor("testSSHWhenDisableTableInProgress");
-    // We need a mocked catalog tracker.
-    CatalogTracker ct = Mockito.mock(CatalogTracker.class);
     LoadBalancer balancer = LoadBalancerFactory.getLoadBalancer(server.getConfiguration());
     ZKAssign.deleteAllNodes(this.watcher);
 
     // Create an AM.
     AssignmentManager am = new AssignmentManager(this.server,
-      this.serverManager, ct, balancer, executor, null, master.getTableLockManager());
+      this.serverManager, balancer, executor, null, master.getTableLockManager());
     // adding region to regions and servers maps.
     am.regionOnline(REGIONINFO, SERVERNAME_A);
     // adding region in pending close.
@@ -590,7 +595,7 @@ public class TestAssignmentManager {
     ZKUtil.createAndWatch(this.watcher, node, data.toByteArray());
 
     try {
-      processServerShutdownHandler(ct, am, false);
+      processServerShutdownHandler(am, false);
       // check znode deleted or not.
       // In both cases the znode should be deleted.
       assertTrue("The znode should be deleted.", ZKUtil.checkExists(this.watcher, node) == -1);
@@ -610,7 +615,7 @@ public class TestAssignmentManager {
     }
   }
 
-  private void processServerShutdownHandler(CatalogTracker ct, AssignmentManager am, boolean splitRegion)
+  private void processServerShutdownHandler(AssignmentManager am, boolean splitRegion)
       throws IOException, ServiceException {
     // Make sure our new AM gets callbacks; once registered, can't unregister.
     // Thats ok because we make a new zk watcher for each test.
@@ -655,8 +660,7 @@ public class TestAssignmentManager {
 
     // Make it so we can get a catalogtracker from servermanager.. .needed
     // down in guts of server shutdown handler.
-    Mockito.when(ct.getConnection()).thenReturn(connection);
-    Mockito.when(this.server.getCatalogTracker()).thenReturn(ct);
+    Mockito.when(this.server.getShortCircuitConnection()).thenReturn(connection);
 
     // Now make a server shutdown handler instance and invoke process.
     // Have it that SERVERNAME_A died.
@@ -704,12 +708,11 @@ public class TestAssignmentManager {
     // default null.
     Mockito.when(this.serverManager.sendRegionClose(SERVERNAME_A, hri, -1)).thenReturn(true);
     // Need a mocked catalog tracker.
-    CatalogTracker ct = Mockito.mock(CatalogTracker.class);
     LoadBalancer balancer = LoadBalancerFactory.getLoadBalancer(server
         .getConfiguration());
     // Create an AM.
     AssignmentManager am = new AssignmentManager(this.server,
-      this.serverManager, ct, balancer, null, null, master.getTableLockManager());
+      this.serverManager, balancer, null, null, master.getTableLockManager());
     try {
       // First make sure my mock up basically works.  Unassign a region.
       unassign(am, SERVERNAME_A, hri);
@@ -885,7 +888,6 @@ public class TestAssignmentManager {
     am.getRegionStates().logSplit(SERVERNAME_A); // Assume log splitting is done
     am.getRegionStates().createRegionState(REGIONINFO);
     am.gate.set(false);
-    CatalogTracker ct = Mockito.mock(CatalogTracker.class);
 
     BaseCoordinatedStateManager cp = new ZkCoordinatedStateManager();
     cp.initialize(server);
@@ -899,7 +901,7 @@ public class TestAssignmentManager {
 
     assertFalse(am.processRegionsInTransition(rt, REGIONINFO, orc, zkOrd));
     am.getTableStateManager().setTableState(REGIONINFO.getTable(), Table.State.ENABLED);
-    processServerShutdownHandler(ct, am, false);
+    processServerShutdownHandler(am, false);
     // Waiting for the assignment to get completed.
     while (!am.gate.get()) {
       Thread.sleep(10);
@@ -934,6 +936,13 @@ public class TestAssignmentManager {
     Server server = new HMaster(HTU.getConfiguration(), csm);
     AssignmentManagerWithExtrasForTesting am = setUpMockedAssignmentManager(server,
         this.serverManager);
+
+    Whitebox.setInternalState(server, "metaTableLocator", Mockito.mock(MetaTableLocator.class));
+
+    // Make it so we can get a catalogtracker from servermanager.. .needed
+    // down in guts of server shutdown handler.
+    Whitebox.setInternalState(server, "shortCircuitConnection", am.getConnection());
+
     AtomicBoolean gate = new AtomicBoolean(false);
     if (balancer instanceof MockedLoadBalancer) {
       ((MockedLoadBalancer) balancer).setGateVariable(gate);
@@ -982,12 +991,19 @@ public class TestAssignmentManager {
     Whitebox.setInternalState(server, "serverManager", this.serverManager);
     AssignmentManagerWithExtrasForTesting am = setUpMockedAssignmentManager(server,
         this.serverManager);
+
+    Whitebox.setInternalState(server, "metaTableLocator", Mockito.mock(MetaTableLocator.class));
+
+    // Make it so we can get a catalogtracker from servermanager.. .needed
+    // down in guts of server shutdown handler.
+    Whitebox.setInternalState(server, "shortCircuitConnection", am.getConnection());
+
     try {
       // set table in enabling state.
       am.getTableStateManager().setTableState(REGIONINFO.getTable(),
         Table.State.ENABLING);
       new EnableTableHandler(server, REGIONINFO.getTable(),
-          am.getCatalogTracker(), am, new NullTableLockManager(), true).prepare()
+          am, new NullTableLockManager(), true).prepare()
           .process();
       assertEquals("Number of assignments should be 1.", 1, assignmentCount);
       assertTrue("Table should be enabled.",
@@ -1024,6 +1040,13 @@ public class TestAssignmentManager {
     Whitebox.setInternalState(server, "serverManager", this.serverManager);
     AssignmentManagerWithExtrasForTesting am = setUpMockedAssignmentManager(server,
         this.serverManager);
+
+    Whitebox.setInternalState(server, "metaTableLocator", Mockito.mock(MetaTableLocator.class));
+
+    // Make it so we can get a catalogtracker from servermanager.. .needed
+    // down in guts of server shutdown handler.
+    Whitebox.setInternalState(server, "shortCircuitConnection", am.getConnection());
+
     try {
       TableName tableName = TableName.valueOf("dummyTable");
       // set table in enabling state.
@@ -1043,8 +1066,6 @@ public class TestAssignmentManager {
   @Test
   public void testSSHTimesOutOpeningRegionTransition()
       throws KeeperException, IOException, CoordinatedStateException, ServiceException {
-    // We need a mocked catalog tracker.
-    CatalogTracker ct = Mockito.mock(CatalogTracker.class);
     // Create an AM.
     AssignmentManagerWithExtrasForTesting am =
       setUpMockedAssignmentManager(this.server, this.serverManager);
@@ -1061,7 +1082,7 @@ public class TestAssignmentManager {
 
     try {
       am.assignInvoked = false;
-      processServerShutdownHandler(ct, am, false);
+      processServerShutdownHandler(am, false);
       assertTrue(am.assignInvoked);
     } finally {
       am.getRegionStates().regionsInTransition.remove(REGIONINFO.getEncodedName());
@@ -1155,8 +1176,6 @@ public class TestAssignmentManager {
   private AssignmentManagerWithExtrasForTesting setUpMockedAssignmentManager(final Server server,
       final ServerManager manager) throws IOException, KeeperException,
         ServiceException, CoordinatedStateException {
-    // We need a mocked catalog tracker. Its used by our AM instance.
-    CatalogTracker ct = Mockito.mock(CatalogTracker.class);
     // Make an RS Interface implementation. Make it so a scanner can go against
     // it and a get to return the single region, REGIONINFO, this test is
     // messing with. Needed when "new master" joins cluster. AM will try and
@@ -1200,12 +1219,11 @@ public class TestAssignmentManager {
       getMockedConnectionAndDecorate(HTU.getConfiguration(), null,
         ri, SERVERNAME_B, REGIONINFO);
     // Make it so we can get the connection from our mocked catalogtracker
-    Mockito.when(ct.getConnection()).thenReturn(connection);
     // Create and startup an executor. Used by AM handling zk callbacks.
     ExecutorService executor = startupMasterExecutor("mockedAMExecutor");
     this.balancer = LoadBalancerFactory.getLoadBalancer(server.getConfiguration());
     AssignmentManagerWithExtrasForTesting am = new AssignmentManagerWithExtrasForTesting(
-      server, manager, ct, this.balancer, executor, new NullTableLockManager());
+      server, connection, manager, this.balancer, executor, new NullTableLockManager());
     return am;
   }
 
@@ -1215,20 +1233,19 @@ public class TestAssignmentManager {
   class AssignmentManagerWithExtrasForTesting extends AssignmentManager {
     // Keep a reference so can give it out below in {@link #getExecutorService}
     private final ExecutorService es;
-    // Ditto for ct
-    private final CatalogTracker ct;
     boolean processRITInvoked = false;
     boolean assignInvoked = false;
     AtomicBoolean gate = new AtomicBoolean(true);
+    private HConnection connection;
 
     public AssignmentManagerWithExtrasForTesting(
-        final Server master, final ServerManager serverManager,
-        final CatalogTracker catalogTracker, final LoadBalancer balancer,
+        final Server master, HConnection connection, final ServerManager serverManager,
+        final LoadBalancer balancer,
         final ExecutorService service, final TableLockManager tableLockManager)
             throws KeeperException, IOException, CoordinatedStateException {
-      super(master, serverManager, catalogTracker, balancer, service, null, tableLockManager);
+      super(master, serverManager, balancer, service, null, tableLockManager);
       this.es = service;
-      this.ct = catalogTracker;
+      this.connection = connection;
     }
 
     @Override
@@ -1282,11 +1299,11 @@ public class TestAssignmentManager {
       return this.es;
     }
 
-    /**
-     * @return CatalogTracker used by this AM (Its a mock).
+    /*
+     * Convenient method to retrieve mocked up connection
      */
-    CatalogTracker getCatalogTracker() {
-      return this.ct;
+    HConnection getConnection() {
+      return this.connection;
     }
   }
 
@@ -1333,12 +1350,11 @@ public class TestAssignmentManager {
     // Region to use in test.
     final HRegionInfo hri = HRegionInfo.FIRST_META_REGIONINFO;
     // Need a mocked catalog tracker.
-    CatalogTracker ct = Mockito.mock(CatalogTracker.class);
     LoadBalancer balancer = LoadBalancerFactory.getLoadBalancer(
       server.getConfiguration());
     // Create an AM.
     AssignmentManager am = new AssignmentManager(this.server,
-      this.serverManager, ct, balancer, null, null, master.getTableLockManager());
+      this.serverManager, balancer, null, null, master.getTableLockManager());
     RegionStates regionStates = am.getRegionStates();
     try {
       // First set the state of the region to merging
@@ -1367,14 +1383,12 @@ public class TestAssignmentManager {
       CoordinatedStateException {
     // Region to use in test.
     final HRegionInfo hri = HRegionInfo.FIRST_META_REGIONINFO;
-    // Need a mocked catalog tracker.
-    CatalogTracker ct = Mockito.mock(CatalogTracker.class);
     LoadBalancer balancer = LoadBalancerFactory.getLoadBalancer(
       server.getConfiguration());
     final AtomicBoolean zkEventProcessed = new AtomicBoolean(false);
     // Create an AM.
     AssignmentManager am = new AssignmentManager(this.server,
-      this.serverManager, ct, balancer, null, null, master.getTableLockManager()) {
+      this.serverManager, balancer, null, null, master.getTableLockManager()) {
 
       @Override
       void handleRegion(final RegionTransition rt, OpenRegionCoordination coordination,
@@ -1415,9 +1429,8 @@ public class TestAssignmentManager {
    */
   @Test
   public void testBalanceRegionOfDeletedTable() throws Exception {
-    CatalogTracker ct = Mockito.mock(CatalogTracker.class);
     AssignmentManager am = new AssignmentManager(this.server, this.serverManager,
-      ct, balancer, null, null, master.getTableLockManager());
+      balancer, null, null, master.getTableLockManager());
     RegionStates regionStates = am.getRegionStates();
     HRegionInfo hri = REGIONINFO;
     regionStates.createRegionState(hri);
@@ -1443,12 +1456,11 @@ public class TestAssignmentManager {
     this.server.getConfiguration().setInt("hbase.assignment.maximum.attempts", 100);
 
     HRegionInfo hri = REGIONINFO;
-    CatalogTracker ct = Mockito.mock(CatalogTracker.class);
     LoadBalancer balancer = LoadBalancerFactory.getLoadBalancer(
       server.getConfiguration());
     // Create an AM.
     AssignmentManager am = new AssignmentManager(this.server,
-      this.serverManager, ct, balancer, null, null, master.getTableLockManager());
+      this.serverManager, balancer, null, null, master.getTableLockManager());
     RegionStates regionStates = am.getRegionStates();
     try {
       am.regionPlans.put(REGIONINFO.getEncodedName(),

http://git-wip-us.apache.org/repos/asf/hbase/blob/ea085c63/hbase-server/src/test/java/org/apache/hadoop/hbase/master/TestAssignmentManagerOnCluster.java
----------------------------------------------------------------------
diff --git a/hbase-server/src/test/java/org/apache/hadoop/hbase/master/TestAssignmentManagerOnCluster.java b/hbase-server/src/test/java/org/apache/hadoop/hbase/master/TestAssignmentManagerOnCluster.java
index de192dc..409e01f 100644
--- a/hbase-server/src/test/java/org/apache/hadoop/hbase/master/TestAssignmentManagerOnCluster.java
+++ b/hbase-server/src/test/java/org/apache/hadoop/hbase/master/TestAssignmentManagerOnCluster.java
@@ -46,7 +46,7 @@ import org.apache.hadoop.hbase.ServerName;
 import org.apache.hadoop.hbase.TableName;
 import org.apache.hadoop.hbase.UnknownRegionException;
 import org.apache.hadoop.hbase.Waiter;
-import org.apache.hadoop.hbase.catalog.MetaEditor;
+import org.apache.hadoop.hbase.MetaTableAccessor;
 import org.apache.hadoop.hbase.client.HBaseAdmin;
 import org.apache.hadoop.hbase.client.HTable;
 import org.apache.hadoop.hbase.coprocessor.BaseRegionObserver;
@@ -122,7 +122,7 @@ public class TestAssignmentManagerOnCluster {
       HTable meta = new HTable(conf, TableName.META_TABLE_NAME);
       HRegionInfo hri = new HRegionInfo(
         desc.getTableName(), Bytes.toBytes("A"), Bytes.toBytes("Z"));
-      MetaEditor.addRegionToMeta(meta, hri);
+      MetaTableAccessor.addRegionToMeta(meta, hri);
 
       HMaster master = TEST_UTIL.getHBaseCluster().getMaster();
       master.assignRegion(hri);
@@ -166,7 +166,7 @@ public class TestAssignmentManagerOnCluster {
       HTable meta = new HTable(conf, TableName.META_TABLE_NAME);
       final HRegionInfo hri = new HRegionInfo(
         desc.getTableName(), Bytes.toBytes("A"), Bytes.toBytes("Z"));
-      MetaEditor.addRegionToMeta(meta, hri);
+      MetaTableAccessor.addRegionToMeta(meta, hri);
 
       master = TEST_UTIL.getHBaseCluster().getMaster();
       Set<ServerName> onlineServers = master.serverManager.getOnlineServers().keySet();
@@ -380,7 +380,7 @@ public class TestAssignmentManagerOnCluster {
       HTable meta = new HTable(conf, TableName.META_TABLE_NAME);
       HRegionInfo hri = new HRegionInfo(
         desc.getTableName(), Bytes.toBytes("A"), Bytes.toBytes("Z"));
-      MetaEditor.addRegionToMeta(meta, hri);
+      MetaTableAccessor.addRegionToMeta(meta, hri);
 
       HMaster master = TEST_UTIL.getHBaseCluster().getMaster();
       master.assignRegion(hri);
@@ -427,7 +427,7 @@ public class TestAssignmentManagerOnCluster {
       HTable meta = new HTable(conf, TableName.META_TABLE_NAME);
       HRegionInfo hri = new HRegionInfo(
         desc.getTableName(), Bytes.toBytes("A"), Bytes.toBytes("Z"));
-      MetaEditor.addRegionToMeta(meta, hri);
+      MetaTableAccessor.addRegionToMeta(meta, hri);
 
       HMaster master = TEST_UTIL.getHBaseCluster().getMaster();
       master.assignRegion(hri);
@@ -471,7 +471,7 @@ public class TestAssignmentManagerOnCluster {
       HTable meta = new HTable(conf, TableName.META_TABLE_NAME);
       HRegionInfo hri = new HRegionInfo(
         desc.getTableName(), Bytes.toBytes("A"), Bytes.toBytes("Z"));
-      MetaEditor.addRegionToMeta(meta, hri);
+      MetaTableAccessor.addRegionToMeta(meta, hri);
 
       MyLoadBalancer.controledRegion = hri.getEncodedName();
 
@@ -513,7 +513,7 @@ public class TestAssignmentManagerOnCluster {
       HTable meta = new HTable(conf, TableName.META_TABLE_NAME);
       HRegionInfo hri = new HRegionInfo(
         desc.getTableName(), Bytes.toBytes("A"), Bytes.toBytes("Z"));
-      MetaEditor.addRegionToMeta(meta, hri);
+      MetaTableAccessor.addRegionToMeta(meta, hri);
 
       FileSystem fs = FileSystem.get(conf);
       Path tableDir= FSUtils.getTableDir(FSUtils.getRootDir(conf), table);
@@ -611,7 +611,7 @@ public class TestAssignmentManagerOnCluster {
       HTable meta = new HTable(conf, TableName.META_TABLE_NAME);
       HRegionInfo hri = new HRegionInfo(
         desc.getTableName(), Bytes.toBytes("A"), Bytes.toBytes("Z"));
-      MetaEditor.addRegionToMeta(meta, hri);
+      MetaTableAccessor.addRegionToMeta(meta, hri);
 
       HMaster master = TEST_UTIL.getHBaseCluster().getMaster();
       master.assignRegion(hri);
@@ -667,7 +667,7 @@ public class TestAssignmentManagerOnCluster {
       HTable meta = new HTable(conf, TableName.META_TABLE_NAME);
       HRegionInfo hri = new HRegionInfo(
         desc.getTableName(), Bytes.toBytes("A"), Bytes.toBytes("Z"));
-      MetaEditor.addRegionToMeta(meta, hri);
+      MetaTableAccessor.addRegionToMeta(meta, hri);
       meta.close();
 
       MyRegionObserver.postOpenEnabled.set(true);
@@ -740,7 +740,7 @@ public class TestAssignmentManagerOnCluster {
       HTable meta = new HTable(conf, TableName.META_TABLE_NAME);
       HRegionInfo hri = new HRegionInfo(
         desc.getTableName(), Bytes.toBytes("A"), Bytes.toBytes("Z"));
-      MetaEditor.addRegionToMeta(meta, hri);
+      MetaTableAccessor.addRegionToMeta(meta, hri);
 
       // Assign the region
       master = (MyMaster)cluster.getMaster();
@@ -814,7 +814,7 @@ public class TestAssignmentManagerOnCluster {
       HTable meta = new HTable(conf, TableName.META_TABLE_NAME);
       HRegionInfo hri = new HRegionInfo(
         desc.getTableName(), Bytes.toBytes("A"), Bytes.toBytes("Z"));
-      MetaEditor.addRegionToMeta(meta, hri);
+      MetaTableAccessor.addRegionToMeta(meta, hri);
 
       // Assign the region
       master = (MyMaster)cluster.getMaster();

http://git-wip-us.apache.org/repos/asf/hbase/blob/ea085c63/hbase-server/src/test/java/org/apache/hadoop/hbase/master/TestCatalogJanitor.java
----------------------------------------------------------------------
diff --git a/hbase-server/src/test/java/org/apache/hadoop/hbase/master/TestCatalogJanitor.java b/hbase-server/src/test/java/org/apache/hadoop/hbase/master/TestCatalogJanitor.java
index 3b69c16..288d115 100644
--- a/hbase-server/src/test/java/org/apache/hadoop/hbase/master/TestCatalogJanitor.java
+++ b/hbase-server/src/test/java/org/apache/hadoop/hbase/master/TestCatalogJanitor.java
@@ -50,8 +50,7 @@ import org.apache.hadoop.hbase.Server;
 import org.apache.hadoop.hbase.ServerName;
 import org.apache.hadoop.hbase.SmallTests;
 import org.apache.hadoop.hbase.TableDescriptors;
-import org.apache.hadoop.hbase.catalog.CatalogTracker;
-import org.apache.hadoop.hbase.catalog.MetaMockingUtil;
+import org.apache.hadoop.hbase.MetaMockingUtil;
 import org.apache.hadoop.hbase.client.HConnection;
 import org.apache.hadoop.hbase.client.HConnectionManager;
 import org.apache.hadoop.hbase.client.HConnectionTestingUtility;
@@ -75,6 +74,7 @@ import org.apache.hadoop.hbase.util.Bytes;
 import org.apache.hadoop.hbase.util.FSUtils;
 import org.apache.hadoop.hbase.util.HFileArchiveUtil;
 import org.apache.hadoop.hbase.util.Triple;
+import org.apache.hadoop.hbase.zookeeper.MetaTableLocator;
 import org.apache.hadoop.hbase.zookeeper.ZooKeeperWatcher;
 import org.junit.Test;
 import org.junit.experimental.categories.Category;
@@ -97,7 +97,6 @@ public class TestCatalogJanitor {
   class MockServer implements Server {
     private final HConnection connection;
     private final Configuration c;
-    private final CatalogTracker ct;
 
     MockServer(final HBaseTestingUtility htu)
     throws NotAllMetaRegionsOnlineException, IOException, InterruptedException {
@@ -137,16 +136,18 @@ public class TestCatalogJanitor {
       FileSystem fs = FileSystem.get(this.c);
       Path rootdir = FSUtils.getRootDir(this.c);
       FSUtils.setRootDir(this.c, rootdir);
-      this.ct = Mockito.mock(CatalogTracker.class);
       AdminProtos.AdminService.BlockingInterface hri =
         Mockito.mock(AdminProtos.AdminService.BlockingInterface.class);
-      Mockito.when(this.ct.getConnection()).thenReturn(this.connection);
-      Mockito.when(ct.waitForMetaServerConnection(Mockito.anyLong())).thenReturn(hri);
     }
 
     @Override
-    public CatalogTracker getCatalogTracker() {
-      return this.ct;
+    public HConnection getShortCircuitConnection() {
+      return this.connection;
+    }
+
+    @Override
+    public MetaTableLocator getMetaTableLocator() {
+      return null;
     }
 
     @Override
@@ -186,9 +187,6 @@ public class TestCatalogJanitor {
 
     @Override
     public void stop(String why) {
-      if (this.ct != null) {
-        this.ct.stop();
-      }
       if (this.connection != null) {
         HConnectionManager.deleteConnection(this.connection.getConfiguration());
       }
@@ -254,7 +252,12 @@ public class TestCatalogJanitor {
     }
 
     @Override
-    public CatalogTracker getCatalogTracker() {
+    public MetaTableLocator getMetaTableLocator() {
+      return null;
+    }
+
+    @Override
+    public HConnection getShortCircuitConnection() {
       return null;
     }
 

http://git-wip-us.apache.org/repos/asf/hbase/blob/ea085c63/hbase-server/src/test/java/org/apache/hadoop/hbase/master/TestClockSkewDetection.java
----------------------------------------------------------------------
diff --git a/hbase-server/src/test/java/org/apache/hadoop/hbase/master/TestClockSkewDetection.java b/hbase-server/src/test/java/org/apache/hadoop/hbase/master/TestClockSkewDetection.java
index 687012c..5791380 100644
--- a/hbase-server/src/test/java/org/apache/hadoop/hbase/master/TestClockSkewDetection.java
+++ b/hbase-server/src/test/java/org/apache/hadoop/hbase/master/TestClockSkewDetection.java
@@ -26,8 +26,9 @@ import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
 import org.apache.hadoop.conf.Configuration;
 import org.apache.hadoop.hbase.*;
-import org.apache.hadoop.hbase.catalog.CatalogTracker;
 import org.apache.hadoop.hbase.CoordinatedStateManager;
+import org.apache.hadoop.hbase.client.HConnection;
+import org.apache.hadoop.hbase.zookeeper.MetaTableLocator;
 import org.apache.hadoop.hbase.zookeeper.ZooKeeperWatcher;
 import org.junit.Test;
 import org.junit.experimental.categories.Category;
@@ -42,7 +43,12 @@ public class TestClockSkewDetection {
     final Configuration conf = HBaseConfiguration.create();
     ServerManager sm = new ServerManager(new Server() {
       @Override
-      public CatalogTracker getCatalogTracker() {
+      public HConnection getShortCircuitConnection() {
+        return null;
+      }
+
+      @Override
+      public MetaTableLocator getMetaTableLocator() {
         return null;
       }
 

http://git-wip-us.apache.org/repos/asf/hbase/blob/ea085c63/hbase-server/src/test/java/org/apache/hadoop/hbase/master/TestMaster.java
----------------------------------------------------------------------
diff --git a/hbase-server/src/test/java/org/apache/hadoop/hbase/master/TestMaster.java b/hbase-server/src/test/java/org/apache/hadoop/hbase/master/TestMaster.java
index d0ddc96..b600f4d 100644
--- a/hbase-server/src/test/java/org/apache/hadoop/hbase/master/TestMaster.java
+++ b/hbase-server/src/test/java/org/apache/hadoop/hbase/master/TestMaster.java
@@ -21,7 +21,7 @@ package org.apache.hadoop.hbase.master;
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
 import org.apache.hadoop.hbase.*;
-import org.apache.hadoop.hbase.catalog.MetaReader;
+import org.apache.hadoop.hbase.MetaTableAccessor;
 import org.apache.hadoop.hbase.client.HBaseAdmin;
 import org.apache.hadoop.hbase.client.HTable;
 import org.apache.hadoop.hbase.protobuf.generated.ZooKeeperProtos;
@@ -74,7 +74,8 @@ public class TestMaster {
     ht.close();
 
     List<Pair<HRegionInfo, ServerName>> tableRegions =
-      MetaReader.getTableRegionsAndLocations(m.getCatalogTracker(), TABLENAME);
+      MetaTableAccessor.getTableRegionsAndLocations(m.getZooKeeper(),
+        m.getShortCircuitConnection(), TABLENAME);
     LOG.info("Regions after load: " + Joiner.on(',').join(tableRegions));
     assertEquals(1, tableRegions.size());
     assertArrayEquals(HConstants.EMPTY_START_ROW,
@@ -91,8 +92,8 @@ public class TestMaster {
       Thread.sleep(100);
     }
     LOG.info("Making sure we can call getTableRegions while opening");
-    tableRegions = MetaReader.getTableRegionsAndLocations(m.getCatalogTracker(),
-        TABLENAME, false);
+    tableRegions = MetaTableAccessor.getTableRegionsAndLocations(m.getZooKeeper(),
+      m.getShortCircuitConnection(), TABLENAME, false);
 
     LOG.info("Regions: " + Joiner.on(',').join(tableRegions));
     // We have three regions because one is split-in-progress
@@ -102,8 +103,8 @@ public class TestMaster {
         m.getTableRegionForRow(TABLENAME, Bytes.toBytes("cde"));
     LOG.info("Result is: " + pair);
     Pair<HRegionInfo, ServerName> tableRegionFromName =
-        MetaReader.getRegion(m.getCatalogTracker(),
-            pair.getFirst().getRegionName());
+        MetaTableAccessor.getRegion(m.getShortCircuitConnection(),
+          pair.getFirst().getRegionName());
     assertEquals(tableRegionFromName.getFirst(), pair.getFirst());
   }
 

http://git-wip-us.apache.org/repos/asf/hbase/blob/ea085c63/hbase-server/src/test/java/org/apache/hadoop/hbase/master/TestMasterFailover.java
----------------------------------------------------------------------
diff --git a/hbase-server/src/test/java/org/apache/hadoop/hbase/master/TestMasterFailover.java b/hbase-server/src/test/java/org/apache/hadoop/hbase/master/TestMasterFailover.java
index a8fbf54..5f1159a 100644
--- a/hbase-server/src/test/java/org/apache/hadoop/hbase/master/TestMasterFailover.java
+++ b/hbase-server/src/test/java/org/apache/hadoop/hbase/master/TestMasterFailover.java
@@ -49,7 +49,7 @@ import org.apache.hadoop.hbase.RegionTransition;
 import org.apache.hadoop.hbase.ServerName;
 import org.apache.hadoop.hbase.TableName;
 import org.apache.hadoop.hbase.TableStateManager;
-import org.apache.hadoop.hbase.catalog.MetaEditor;
+import org.apache.hadoop.hbase.MetaTableAccessor;
 import org.apache.hadoop.hbase.coordination.BaseCoordinatedStateManager;
 import org.apache.hadoop.hbase.client.HTable;
 import org.apache.hadoop.hbase.executor.EventType;
@@ -67,7 +67,7 @@ import org.apache.hadoop.hbase.util.JVMClusterUtil;
 import org.apache.hadoop.hbase.util.JVMClusterUtil.MasterThread;
 import org.apache.hadoop.hbase.util.JVMClusterUtil.RegionServerThread;
 import org.apache.hadoop.hbase.util.Threads;
-import org.apache.hadoop.hbase.zookeeper.MetaRegionTracker;
+import org.apache.hadoop.hbase.zookeeper.MetaTableLocator;
 import org.apache.hadoop.hbase.zookeeper.ZKAssign;
 import org.apache.hadoop.hbase.zookeeper.ZKTableStateManager;
 import org.apache.hadoop.hbase.zookeeper.ZooKeeperWatcher;
@@ -298,8 +298,10 @@ public class TestMasterFailover {
       zkw, HRegionInfo.FIRST_META_REGIONINFO, hrs.getServerName());
     ProtobufUtil.openRegion(hrs.getRSRpcServices(),
       hrs.getServerName(), HRegionInfo.FIRST_META_REGIONINFO);
+
+    MetaTableLocator mtl = new MetaTableLocator();
     while (true) {
-      ServerName sn = MetaRegionTracker.getMetaRegionLocation(zkw);
+      ServerName sn = mtl.getMetaRegionLocation(zkw);
       if (sn != null && sn.equals(hrs.getServerName())) {
         break;
       }
@@ -689,8 +691,10 @@ public class TestMasterFailover {
       zkw, HRegionInfo.FIRST_META_REGIONINFO, hrs.getServerName());
     ProtobufUtil.openRegion(hrs.getRSRpcServices(),
       hrs.getServerName(), HRegionInfo.FIRST_META_REGIONINFO);
+
+    MetaTableLocator mtl = new MetaTableLocator();
     while (true) {
-      ServerName sn = MetaRegionTracker.getMetaRegionLocation(zkw);
+      ServerName sn = mtl.getMetaRegionLocation(zkw);
       if (sn != null && sn.equals(hrs.getServerName())) {
         break;
       }
@@ -1234,7 +1238,7 @@ public class TestMasterFailover {
 
     HRegionInfo hriOffline = new HRegionInfo(offlineTable.getTableName(), null, null);
     createRegion(hriOffline, rootdir, conf, offlineTable);
-    MetaEditor.addRegionToMeta(master.getCatalogTracker(), hriOffline);
+    MetaTableAccessor.addRegionToMeta(master.getShortCircuitConnection(), hriOffline);
 
     log("Regions in hbase:meta and namespace have been created");
 

http://git-wip-us.apache.org/repos/asf/hbase/blob/ea085c63/hbase-server/src/test/java/org/apache/hadoop/hbase/master/TestMasterNoCluster.java
----------------------------------------------------------------------
diff --git a/hbase-server/src/test/java/org/apache/hadoop/hbase/master/TestMasterNoCluster.java b/hbase-server/src/test/java/org/apache/hadoop/hbase/master/TestMasterNoCluster.java
index d7cdc73..00982b0 100644
--- a/hbase-server/src/test/java/org/apache/hadoop/hbase/master/TestMasterNoCluster.java
+++ b/hbase-server/src/test/java/org/apache/hadoop/hbase/master/TestMasterNoCluster.java
@@ -44,8 +44,7 @@ import org.apache.hadoop.hbase.ServerLoad;
 import org.apache.hadoop.hbase.ServerName;
 import org.apache.hadoop.hbase.TableName;
 import org.apache.hadoop.hbase.ZooKeeperConnectionException;
-import org.apache.hadoop.hbase.catalog.CatalogTracker;
-import org.apache.hadoop.hbase.catalog.MetaMockingUtil;
+import org.apache.hadoop.hbase.MetaMockingUtil;
 import org.apache.hadoop.hbase.client.HConnection;
 import org.apache.hadoop.hbase.client.HConnectionTestingUtility;
 import org.apache.hadoop.hbase.client.Result;
@@ -54,7 +53,7 @@ import org.apache.hadoop.hbase.protobuf.ProtobufUtil;
 import org.apache.hadoop.hbase.protobuf.generated.RegionServerStatusProtos.RegionServerReportRequest;
 import org.apache.hadoop.hbase.util.FSUtils;
 import org.apache.hadoop.hbase.util.Threads;
-import org.apache.hadoop.hbase.zookeeper.MetaRegionTracker;
+import org.apache.hadoop.hbase.zookeeper.MetaTableLocator;
 import org.apache.hadoop.hbase.zookeeper.ZKAssign;
 import org.apache.hadoop.hbase.zookeeper.ZKUtil;
 import org.apache.hadoop.hbase.zookeeper.ZooKeeperWatcher;
@@ -159,7 +158,7 @@ public class TestMasterNoCluster {
     final MockRegionServer rs2 = new MockRegionServer(conf, sn2);
     // Put some data into the servers.  Make it look like sn0 has the metaH
     // Put data into sn2 so it looks like it has a few regions for a table named 't'.
-    MetaRegionTracker.setMetaLocation(rs0.getZooKeeper(), rs0.getServerName());
+    MetaTableLocator.setMetaLocation(rs0.getZooKeeper(), rs0.getServerName());
     final TableName tableName = TableName.valueOf("t");
     Result [] results = new Result [] {
       MetaMockingUtil.getMetaTableRowResult(
@@ -206,15 +205,17 @@ public class TestMasterNoCluster {
       }
 
       @Override
-      protected CatalogTracker createCatalogTracker() throws IOException {
-        // Insert a mock for the connection used by the CatalogTracker.  Any
-        // regionserver should do.  Use TESTUTIL.getConfiguration rather than
+      public HConnection getShortCircuitConnection() {
+        // Insert a mock for the connection, use TESTUTIL.getConfiguration rather than
         // the conf from the master; the conf will already have an HConnection
         // associate so the below mocking of a connection will fail.
-        HConnection connection =
-          HConnectionTestingUtility.getMockedConnectionAndDecorate(TESTUTIL.getConfiguration(),
-            rs0, rs0, rs0.getServerName(), HRegionInfo.FIRST_META_REGIONINFO);
-        return new CatalogTracker(getZooKeeper(), getConfiguration(), connection, this);
+        try {
+          return HConnectionTestingUtility.getMockedConnectionAndDecorate(
+            TESTUTIL.getConfiguration(), rs0, rs0, rs0.getServerName(),
+            HRegionInfo.FIRST_META_REGIONINFO);
+        } catch (IOException e) {
+          return null;
+        }
       }
 
       @Override
@@ -285,15 +286,17 @@ public class TestMasterNoCluster {
       }
 
       @Override
-      protected CatalogTracker createCatalogTracker() throws IOException {
-        // Insert a mock for the connection used by the CatalogTracker.  Any
-        // regionserver should do.  Use TESTUTIL.getConfiguration rather than
+      public HConnection getShortCircuitConnection() {
+        // Insert a mock for the connection, use TESTUTIL.getConfiguration rather than
         // the conf from the master; the conf will already have an HConnection
         // associate so the below mocking of a connection will fail.
-        HConnection connection =
-          HConnectionTestingUtility.getMockedConnectionAndDecorate(TESTUTIL.getConfiguration(),
-            rs0, rs0, rs0.getServerName(), HRegionInfo.FIRST_META_REGIONINFO);
-        return new CatalogTracker(getZooKeeper(), getConfiguration(), connection, this);
+        try {
+          return HConnectionTestingUtility.getMockedConnectionAndDecorate(
+            TESTUTIL.getConfiguration(), rs0, rs0, rs0.getServerName(),
+            HRegionInfo.FIRST_META_REGIONINFO);
+        } catch (IOException e) {
+          return null;
+        }
       }
 
       @Override

http://git-wip-us.apache.org/repos/asf/hbase/blob/ea085c63/hbase-server/src/test/java/org/apache/hadoop/hbase/master/TestMasterOperationsForRegionReplicas.java
----------------------------------------------------------------------
diff --git a/hbase-server/src/test/java/org/apache/hadoop/hbase/master/TestMasterOperationsForRegionReplicas.java b/hbase-server/src/test/java/org/apache/hadoop/hbase/master/TestMasterOperationsForRegionReplicas.java
index 05de958..117c515 100644
--- a/hbase-server/src/test/java/org/apache/hadoop/hbase/master/TestMasterOperationsForRegionReplicas.java
+++ b/hbase-server/src/test/java/org/apache/hadoop/hbase/master/TestMasterOperationsForRegionReplicas.java
@@ -42,11 +42,11 @@ import org.apache.hadoop.hbase.MediumTests;
 import org.apache.hadoop.hbase.RegionLocations;
 import org.apache.hadoop.hbase.ServerName;
 import org.apache.hadoop.hbase.TableName;
-import org.apache.hadoop.hbase.catalog.CatalogTracker;
-import org.apache.hadoop.hbase.catalog.MetaReader;
-import org.apache.hadoop.hbase.catalog.MetaReader.Visitor;
+import org.apache.hadoop.hbase.MetaTableAccessor;
+import org.apache.hadoop.hbase.MetaTableAccessor.Visitor;
 import org.apache.hadoop.hbase.client.Delete;
 import org.apache.hadoop.hbase.client.HBaseAdmin;
+import org.apache.hadoop.hbase.client.HConnection;
 import org.apache.hadoop.hbase.client.HTable;
 import org.apache.hadoop.hbase.client.RegionReplicaUtil;
 import org.apache.hadoop.hbase.client.Result;
@@ -62,10 +62,11 @@ public class TestMasterOperationsForRegionReplicas {
   private final static HBaseTestingUtility TEST_UTIL = new HBaseTestingUtility();
   private static HBaseAdmin admin;
   private static int numSlaves = 2;
+  private static Configuration conf;
 
   @BeforeClass
   public static void setupBeforeClass() throws Exception {
-    Configuration conf = TEST_UTIL.getConfiguration();
+    conf = TEST_UTIL.getConfiguration();
     conf.setBoolean("hbase.tests.use.shortcircuit.reads", false);
     TEST_UTIL.startMiniCluster(numSlaves);
     admin = new HBaseAdmin(conf);
@@ -90,9 +91,9 @@ public class TestMasterOperationsForRegionReplicas {
       desc.addFamily(new HColumnDescriptor("family"));
       admin.createTable(desc, Bytes.toBytes("A"), Bytes.toBytes("Z"), numRegions);
 
-      CatalogTracker ct = new CatalogTracker(TEST_UTIL.getConfiguration());
-      validateNumberOfRowsInMeta(table, numRegions, ct);
-      List<HRegionInfo> hris = MetaReader.getTableRegions(ct, table);
+      validateNumberOfRowsInMeta(table, numRegions, admin.getConnection());
+      List<HRegionInfo> hris = MetaTableAccessor.getTableRegions(TEST_UTIL.getZooKeeperWatcher(),
+        admin.getConnection(), table);
       assert(hris.size() == numRegions * numReplica);
     } finally {
       admin.disableTable(table);
@@ -111,10 +112,10 @@ public class TestMasterOperationsForRegionReplicas {
       desc.addFamily(new HColumnDescriptor("family"));
       admin.createTable(desc, Bytes.toBytes("A"), Bytes.toBytes("Z"), numRegions);
       TEST_UTIL.waitTableEnabled(table.getName());
-      CatalogTracker ct = new CatalogTracker(TEST_UTIL.getConfiguration());
-      validateNumberOfRowsInMeta(table, numRegions, ct);
+      validateNumberOfRowsInMeta(table, numRegions, admin.getConnection());
 
-      List<HRegionInfo> hris = MetaReader.getTableRegions(ct, table);
+      List<HRegionInfo> hris = MetaTableAccessor.getTableRegions(TEST_UTIL.getZooKeeperWatcher(),
+        admin.getConnection(), table);
       assert(hris.size() == numRegions * numReplica);
       // check that the master created expected number of RegionState objects
       for (int i = 0; i < numRegions; i++) {
@@ -126,10 +127,10 @@ public class TestMasterOperationsForRegionReplicas {
         }
       }
 
-      List<Result> metaRows = MetaReader.fullScan(ct);
+      List<Result> metaRows = MetaTableAccessor.fullScanOfMeta(admin.getConnection());
       int numRows = 0;
       for (Result result : metaRows) {
-        RegionLocations locations = MetaReader.getRegionLocations(result);
+        RegionLocations locations = MetaTableAccessor.getRegionLocations(result);
         HRegionInfo hri = locations.getRegionLocation().getRegionInfo();
         if (!hri.getTable().equals(table)) continue;
         numRows += 1;
@@ -142,7 +143,8 @@ public class TestMasterOperationsForRegionReplicas {
 
       // The same verification of the meta as above but with the SnapshotOfRegionAssignmentFromMeta
       // class
-      validateFromSnapshotFromMeta(TEST_UTIL, table, numRegions, numReplica, ct);
+      validateFromSnapshotFromMeta(TEST_UTIL, table, numRegions, numReplica,
+        admin.getConnection());
 
       // Now kill the master, restart it and see if the assignments are kept
       ServerName master = TEST_UTIL.getHBaseClusterInterface().getClusterStatus().getMaster();
@@ -158,7 +160,8 @@ public class TestMasterOperationsForRegionReplicas {
           assert (state != null);
         }
       }
-      validateFromSnapshotFromMeta(TEST_UTIL, table, numRegions, numReplica, ct);
+      validateFromSnapshotFromMeta(TEST_UTIL, table, numRegions, numReplica,
+        admin.getConnection());
 
       // Now shut the whole cluster down, and verify the assignments are kept so that the
       // availability constraints are met.
@@ -166,16 +169,19 @@ public class TestMasterOperationsForRegionReplicas {
       TEST_UTIL.shutdownMiniHBaseCluster();
       TEST_UTIL.startMiniHBaseCluster(1, numSlaves);
       TEST_UTIL.waitTableEnabled(table.getName());
-      ct = new CatalogTracker(TEST_UTIL.getConfiguration());
-      validateFromSnapshotFromMeta(TEST_UTIL, table, numRegions, numReplica, ct);
+      admin.close();
+      admin = new HBaseAdmin(conf); 
+      validateFromSnapshotFromMeta(TEST_UTIL, table, numRegions, numReplica,
+        admin.getConnection());
 
       // Now shut the whole cluster down, and verify regions are assigned even if there is only
       // one server running
       TEST_UTIL.shutdownMiniHBaseCluster();
       TEST_UTIL.startMiniHBaseCluster(1, 1);
       TEST_UTIL.waitTableEnabled(table.getName());
-      ct = new CatalogTracker(TEST_UTIL.getConfiguration());
-      validateSingleRegionServerAssignment(ct, numRegions, numReplica);
+      admin.close();
+      admin = new HBaseAdmin(conf);
+      validateSingleRegionServerAssignment(admin.getConnection(), numRegions, numReplica);
       for (int i = 1; i < numSlaves; i++) { //restore the cluster
         TEST_UTIL.getMiniHBaseCluster().startRegionServer();
       }
@@ -202,7 +208,8 @@ public class TestMasterOperationsForRegionReplicas {
           .getAssignmentManager().getRegionStates().getRegionsOfTable(table);
       assert(regions.size() == numRegions * numReplica);
       //also make sure the meta table has the replica locations removed
-      hris = MetaReader.getTableRegions(ct, table);
+      hris = MetaTableAccessor.getTableRegions(TEST_UTIL.getZooKeeperWatcher(),
+        admin.getConnection(), table);
       assert(hris.size() == numRegions * numReplica);
       //just check that the number of default replica regions in the meta table are the same
       //as the number of regions the table was created with, and the count of the
@@ -236,21 +243,24 @@ public class TestMasterOperationsForRegionReplicas {
       desc.addFamily(new HColumnDescriptor("family"));
       admin.createTable(desc, Bytes.toBytes("A"), Bytes.toBytes("Z"), numRegions);
       TEST_UTIL.waitTableEnabled(table.getName());
-      CatalogTracker ct = new CatalogTracker(TEST_UTIL.getConfiguration());
       Set<byte[]> tableRows = new HashSet<byte[]>();
-      List<HRegionInfo> hris = MetaReader.getTableRegions(ct, table);
+      List<HRegionInfo> hris = MetaTableAccessor.getTableRegions(TEST_UTIL.getZooKeeperWatcher(),
+        admin.getConnection(), table);
       for (HRegionInfo hri : hris) {
         tableRows.add(hri.getRegionName());
       }
       admin.disableTable(table);
       // now delete one replica info from all the rows
       // this is to make the meta appear to be only partially updated
-      HTable metaTable = new HTable(TableName.META_TABLE_NAME, ct.getConnection());
+      HTable metaTable = new HTable(TableName.META_TABLE_NAME, admin.getConnection());
       for (byte[] row : tableRows) {
         Delete deleteOneReplicaLocation = new Delete(row);
-        deleteOneReplicaLocation.deleteColumns(HConstants.CATALOG_FAMILY, MetaReader.getServerColumn(1));
-        deleteOneReplicaLocation.deleteColumns(HConstants.CATALOG_FAMILY, MetaReader.getSeqNumColumn(1));
-        deleteOneReplicaLocation.deleteColumns(HConstants.CATALOG_FAMILY, MetaReader.getStartCodeColumn(1));
+        deleteOneReplicaLocation.deleteColumns(HConstants.CATALOG_FAMILY,
+          MetaTableAccessor.getServerColumn(1));
+        deleteOneReplicaLocation.deleteColumns(HConstants.CATALOG_FAMILY,
+          MetaTableAccessor.getSeqNumColumn(1));
+        deleteOneReplicaLocation.deleteColumns(HConstants.CATALOG_FAMILY,
+          MetaTableAccessor.getStartCodeColumn(1));
         metaTable.delete(deleteOneReplicaLocation);
       }
       metaTable.close();
@@ -275,8 +285,8 @@ public class TestMasterOperationsForRegionReplicas {
     return strBuf.toString();
   }
 
-  private void validateNumberOfRowsInMeta(final TableName table, int numRegions, CatalogTracker ct)
-      throws IOException {
+  private void validateNumberOfRowsInMeta(final TableName table, int numRegions,
+      HConnection hConnection) throws IOException {
     assert(admin.tableExists(table));
     final AtomicInteger count = new AtomicInteger();
     Visitor visitor = new Visitor() {
@@ -286,13 +296,14 @@ public class TestMasterOperationsForRegionReplicas {
         return true;
       }
     };
-    MetaReader.fullScan(ct, visitor);
+    MetaTableAccessor.fullScan(hConnection, visitor);
     assert(count.get() == numRegions);
   }
 
-  private void validateFromSnapshotFromMeta(HBaseTestingUtility util, TableName table, int numRegions,
-      int numReplica, CatalogTracker ct) throws IOException {
-    SnapshotOfRegionAssignmentFromMeta snapshot = new SnapshotOfRegionAssignmentFromMeta(ct);
+  private void validateFromSnapshotFromMeta(HBaseTestingUtility util, TableName table,
+      int numRegions, int numReplica, HConnection hConnection) throws IOException {
+    SnapshotOfRegionAssignmentFromMeta snapshot = new SnapshotOfRegionAssignmentFromMeta(
+      hConnection);
     snapshot.initialize();
     Map<HRegionInfo, ServerName> regionToServerMap = snapshot.getRegionToRegionServerMap();
     assert(regionToServerMap.size() == numRegions * numReplica + 1); //'1' for the namespace
@@ -316,9 +327,10 @@ public class TestMasterOperationsForRegionReplicas {
     }
   }
 
-  private void validateSingleRegionServerAssignment(CatalogTracker ct, int numRegions,
+  private void validateSingleRegionServerAssignment(HConnection hConnection, int numRegions,
       int numReplica) throws IOException {
-    SnapshotOfRegionAssignmentFromMeta snapshot = new SnapshotOfRegionAssignmentFromMeta(ct);
+    SnapshotOfRegionAssignmentFromMeta snapshot = new SnapshotOfRegionAssignmentFromMeta(
+      hConnection);
     snapshot.initialize();
     Map<HRegionInfo, ServerName>  regionToServerMap = snapshot.getRegionToRegionServerMap();
     assertEquals(regionToServerMap.size(), numRegions * numReplica + 1); //'1' for the namespace

http://git-wip-us.apache.org/repos/asf/hbase/blob/ea085c63/hbase-server/src/test/java/org/apache/hadoop/hbase/master/TestRestartCluster.java
----------------------------------------------------------------------
diff --git a/hbase-server/src/test/java/org/apache/hadoop/hbase/master/TestRestartCluster.java b/hbase-server/src/test/java/org/apache/hadoop/hbase/master/TestRestartCluster.java
index 7fe1d23..c5ed9e9 100644
--- a/hbase-server/src/test/java/org/apache/hadoop/hbase/master/TestRestartCluster.java
+++ b/hbase-server/src/test/java/org/apache/hadoop/hbase/master/TestRestartCluster.java
@@ -29,7 +29,6 @@ import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
 import org.apache.hadoop.conf.Configuration;
 import org.apache.hadoop.hbase.*;
-import org.apache.hadoop.hbase.catalog.CatalogTracker;
 import org.apache.hadoop.hbase.client.MetaScanner;
 import org.apache.hadoop.hbase.executor.EventType;
 import org.apache.hadoop.hbase.util.Bytes;
@@ -159,8 +158,8 @@ public class TestRestartCluster {
 
     // We don't have to use SnapshotOfRegionAssignmentFromMeta.
     // We use it here because AM used to use it to load all user region placements
-    CatalogTracker ct = new CatalogTracker(UTIL.getConfiguration());
-    SnapshotOfRegionAssignmentFromMeta snapshot = new SnapshotOfRegionAssignmentFromMeta(ct);
+    SnapshotOfRegionAssignmentFromMeta snapshot = new SnapshotOfRegionAssignmentFromMeta(
+      master.getShortCircuitConnection());
     snapshot.initialize();
     Map<HRegionInfo, ServerName> regionToRegionServerMap
       = snapshot.getRegionToRegionServerMap();
@@ -226,8 +225,7 @@ public class TestRestartCluster {
       Threads.sleep(100);
     }
 
-    ct = new CatalogTracker(UTIL.getConfiguration());
-    snapshot =new SnapshotOfRegionAssignmentFromMeta(ct);
+    snapshot =new SnapshotOfRegionAssignmentFromMeta(master.getShortCircuitConnection());
     snapshot.initialize();
     Map<HRegionInfo, ServerName> newRegionToRegionServerMap =
       snapshot.getRegionToRegionServerMap();

http://git-wip-us.apache.org/repos/asf/hbase/blob/ea085c63/hbase-server/src/test/java/org/apache/hadoop/hbase/master/cleaner/TestHFileCleaner.java
----------------------------------------------------------------------
diff --git a/hbase-server/src/test/java/org/apache/hadoop/hbase/master/cleaner/TestHFileCleaner.java b/hbase-server/src/test/java/org/apache/hadoop/hbase/master/cleaner/TestHFileCleaner.java
index 8f62ec0..000734c 100644
--- a/hbase-server/src/test/java/org/apache/hadoop/hbase/master/cleaner/TestHFileCleaner.java
+++ b/hbase-server/src/test/java/org/apache/hadoop/hbase/master/cleaner/TestHFileCleaner.java
@@ -35,9 +35,10 @@ import org.apache.hadoop.hbase.HConstants;
 import org.apache.hadoop.hbase.MediumTests;
 import org.apache.hadoop.hbase.Server;
 import org.apache.hadoop.hbase.ServerName;
-import org.apache.hadoop.hbase.catalog.CatalogTracker;
+import org.apache.hadoop.hbase.client.HConnection;
 import org.apache.hadoop.hbase.util.EnvironmentEdge;
 import org.apache.hadoop.hbase.util.EnvironmentEdgeManager;
+import org.apache.hadoop.hbase.zookeeper.MetaTableLocator;
 import org.apache.hadoop.hbase.zookeeper.ZooKeeperWatcher;
 import org.junit.AfterClass;
 import org.junit.BeforeClass;
@@ -215,7 +216,12 @@ public class TestHFileCleaner {
     }
 
     @Override
-    public CatalogTracker getCatalogTracker() {
+    public HConnection getShortCircuitConnection() {
+      return null;
+    }
+
+    @Override
+    public MetaTableLocator getMetaTableLocator() {
       return null;
     }
 

http://git-wip-us.apache.org/repos/asf/hbase/blob/ea085c63/hbase-server/src/test/java/org/apache/hadoop/hbase/master/cleaner/TestHFileLinkCleaner.java
----------------------------------------------------------------------
diff --git a/hbase-server/src/test/java/org/apache/hadoop/hbase/master/cleaner/TestHFileLinkCleaner.java b/hbase-server/src/test/java/org/apache/hadoop/hbase/master/cleaner/TestHFileLinkCleaner.java
index e4a26f0..dc63528 100644
--- a/hbase-server/src/test/java/org/apache/hadoop/hbase/master/cleaner/TestHFileLinkCleaner.java
+++ b/hbase-server/src/test/java/org/apache/hadoop/hbase/master/cleaner/TestHFileLinkCleaner.java
@@ -32,12 +32,13 @@ import org.apache.hadoop.hbase.HBaseTestingUtility;
 import org.apache.hadoop.hbase.Server;
 import org.apache.hadoop.hbase.ServerName;
 import org.apache.hadoop.hbase.SmallTests;
-import org.apache.hadoop.hbase.catalog.CatalogTracker;
 import org.apache.hadoop.hbase.HRegionInfo;
 import org.apache.hadoop.hbase.CoordinatedStateManager;
+import org.apache.hadoop.hbase.client.HConnection;
 import org.apache.hadoop.hbase.io.HFileLink;
 import org.apache.hadoop.hbase.util.FSUtils;
 import org.apache.hadoop.hbase.util.HFileArchiveUtil;
+import org.apache.hadoop.hbase.zookeeper.MetaTableLocator;
 import org.apache.hadoop.hbase.zookeeper.ZooKeeperWatcher;
 import org.junit.Test;
 import org.junit.experimental.categories.Category;
@@ -151,7 +152,12 @@ public class TestHFileLinkCleaner {
     }
 
     @Override
-    public CatalogTracker getCatalogTracker() {
+    public HConnection getShortCircuitConnection() {
+      return null;
+    }
+
+    @Override
+    public MetaTableLocator getMetaTableLocator() {
       return null;
     }
 

http://git-wip-us.apache.org/repos/asf/hbase/blob/ea085c63/hbase-server/src/test/java/org/apache/hadoop/hbase/master/cleaner/TestLogsCleaner.java
----------------------------------------------------------------------
diff --git a/hbase-server/src/test/java/org/apache/hadoop/hbase/master/cleaner/TestLogsCleaner.java b/hbase-server/src/test/java/org/apache/hadoop/hbase/master/cleaner/TestLogsCleaner.java
index d26d354..c460518 100644
--- a/hbase-server/src/test/java/org/apache/hadoop/hbase/master/cleaner/TestLogsCleaner.java
+++ b/hbase-server/src/test/java/org/apache/hadoop/hbase/master/cleaner/TestLogsCleaner.java
@@ -27,11 +27,12 @@ import org.apache.hadoop.fs.FileStatus;
 import org.apache.hadoop.fs.FileSystem;
 import org.apache.hadoop.fs.Path;
 import org.apache.hadoop.hbase.*;
-import org.apache.hadoop.hbase.catalog.CatalogTracker;
 import org.apache.hadoop.hbase.CoordinatedStateManager;
+import org.apache.hadoop.hbase.client.HConnection;
 import org.apache.hadoop.hbase.replication.ReplicationFactory;
 import org.apache.hadoop.hbase.replication.ReplicationQueues;
 import org.apache.hadoop.hbase.replication.regionserver.Replication;
+import org.apache.hadoop.hbase.zookeeper.MetaTableLocator;
 import org.apache.hadoop.hbase.zookeeper.ZooKeeperWatcher;
 import org.junit.AfterClass;
 import org.junit.BeforeClass;
@@ -157,7 +158,12 @@ public class TestLogsCleaner {
     }
 
     @Override
-    public CatalogTracker getCatalogTracker() {
+    public HConnection getShortCircuitConnection() {
+      return null;
+    }
+
+    @Override
+    public MetaTableLocator getMetaTableLocator() {
       return null;
     }
 

http://git-wip-us.apache.org/repos/asf/hbase/blob/ea085c63/hbase-server/src/test/java/org/apache/hadoop/hbase/regionserver/TestEndToEndSplitTransaction.java
----------------------------------------------------------------------
diff --git a/hbase-server/src/test/java/org/apache/hadoop/hbase/regionserver/TestEndToEndSplitTransaction.java b/hbase-server/src/test/java/org/apache/hadoop/hbase/regionserver/TestEndToEndSplitTransaction.java
index afab1e0..e77b129 100644
--- a/hbase-server/src/test/java/org/apache/hadoop/hbase/regionserver/TestEndToEndSplitTransaction.java
+++ b/hbase-server/src/test/java/org/apache/hadoop/hbase/regionserver/TestEndToEndSplitTransaction.java
@@ -125,7 +125,7 @@ public class TestEndToEndSplitTransaction {
     // 3. finish phase II
     // note that this replicates some code from SplitTransaction
     // 2nd daughter first
-    server.postOpenDeployTasks(regions.getSecond(), server.getCatalogTracker());
+    server.postOpenDeployTasks(regions.getSecond());
     // Add to online regions
     server.addToOnlineRegions(regions.getSecond());
     // THIS is the crucial point:
@@ -135,7 +135,7 @@ public class TestEndToEndSplitTransaction {
     assertTrue(test(con, tableName, lastRow, server));
 
     // first daughter second
-    server.postOpenDeployTasks(regions.getFirst(), server.getCatalogTracker());
+    server.postOpenDeployTasks(regions.getFirst());
     // Add to online regions
     server.addToOnlineRegions(regions.getFirst());
     assertTrue(test(con, tableName, firstRow, server));
@@ -293,7 +293,7 @@ public class TestEndToEndSplitTransaction {
   }
 
   /**
-   * Checks regions using MetaScanner, MetaReader and HTable methods
+   * Checks regions using MetaScanner, MetaTableAccessor and HTable methods
    */
   static class RegionChecker extends Chore {
     Configuration conf;

http://git-wip-us.apache.org/repos/asf/hbase/blob/ea085c63/hbase-server/src/test/java/org/apache/hadoop/hbase/regionserver/TestGetClosestAtOrBefore.java
----------------------------------------------------------------------
diff --git a/hbase-server/src/test/java/org/apache/hadoop/hbase/regionserver/TestGetClosestAtOrBefore.java b/hbase-server/src/test/java/org/apache/hadoop/hbase/regionserver/TestGetClosestAtOrBefore.java
index 8a5fbfe..cd97f6b 100644
--- a/hbase-server/src/test/java/org/apache/hadoop/hbase/regionserver/TestGetClosestAtOrBefore.java
+++ b/hbase-server/src/test/java/org/apache/hadoop/hbase/regionserver/TestGetClosestAtOrBefore.java
@@ -35,7 +35,7 @@ import org.apache.hadoop.hbase.HTableDescriptor;
 import org.apache.hadoop.hbase.KeyValue;
 import org.apache.hadoop.hbase.MediumTests;
 import org.apache.hadoop.hbase.TableName;
-import org.apache.hadoop.hbase.catalog.MetaEditor;
+import org.apache.hadoop.hbase.MetaTableAccessor;
 import org.apache.hadoop.hbase.client.Delete;
 import org.apache.hadoop.hbase.client.Durability;
 import org.apache.hadoop.hbase.client.Put;
@@ -83,7 +83,7 @@ public class TestGetClosestAtOrBefore extends HBaseTestCase {
           i == 0? HConstants.EMPTY_BYTE_ARRAY: Bytes.toBytes((byte)i),
           i == last? HConstants.EMPTY_BYTE_ARRAY: Bytes.toBytes((byte)i + interval));
 
-        Put put = MetaEditor.makePutFromRegionInfo(hri);
+        Put put = MetaTableAccessor.makePutFromRegionInfo(hri);
         put.setDurability(Durability.SKIP_WAL);
         mr.put(put);
       }

http://git-wip-us.apache.org/repos/asf/hbase/blob/ea085c63/hbase-server/src/test/java/org/apache/hadoop/hbase/regionserver/TestHeapMemoryManager.java
----------------------------------------------------------------------
diff --git a/hbase-server/src/test/java/org/apache/hadoop/hbase/regionserver/TestHeapMemoryManager.java b/hbase-server/src/test/java/org/apache/hadoop/hbase/regionserver/TestHeapMemoryManager.java
index 9f9d9b7..1d06a0e 100644
--- a/hbase-server/src/test/java/org/apache/hadoop/hbase/regionserver/TestHeapMemoryManager.java
+++ b/hbase-server/src/test/java/org/apache/hadoop/hbase/regionserver/TestHeapMemoryManager.java
@@ -32,8 +32,8 @@ import org.apache.hadoop.hbase.HBaseConfiguration;
 import org.apache.hadoop.hbase.Server;
 import org.apache.hadoop.hbase.ServerName;
 import org.apache.hadoop.hbase.SmallTests;
-import org.apache.hadoop.hbase.catalog.CatalogTracker;
 import org.apache.hadoop.hbase.io.hfile.BlockCache;
+import org.apache.hadoop.hbase.client.HConnection;
 import org.apache.hadoop.hbase.io.hfile.BlockCacheKey;
 import org.apache.hadoop.hbase.io.hfile.CacheStats;
 import org.apache.hadoop.hbase.io.hfile.Cacheable;
@@ -41,6 +41,7 @@ import org.apache.hadoop.hbase.io.hfile.CachedBlock;
 import org.apache.hadoop.hbase.io.hfile.ResizableBlockCache;
 import org.apache.hadoop.hbase.regionserver.HeapMemoryManager.TunerContext;
 import org.apache.hadoop.hbase.regionserver.HeapMemoryManager.TunerResult;
+import org.apache.hadoop.hbase.zookeeper.MetaTableLocator;
 import org.apache.hadoop.hbase.zookeeper.ZooKeeperWatcher;
 import org.junit.Test;
 import org.junit.experimental.categories.Category;
@@ -425,7 +426,12 @@ public class TestHeapMemoryManager {
     }
 
     @Override
-    public CatalogTracker getCatalogTracker() {
+    public HConnection getShortCircuitConnection() {
+      return null;
+    }
+
+    @Override
+    public MetaTableLocator getMetaTableLocator() {
       return null;
     }