You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@hbase.apache.org by jx...@apache.org on 2014/09/11 22:52:58 UTC

git commit: HBASE-11604 Disable co-locating meta/master by default

Repository: hbase
Updated Branches:
  refs/heads/branch-1 d3bccd9b9 -> d283818c5


HBASE-11604 Disable co-locating meta/master by default


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

Branch: refs/heads/branch-1
Commit: d283818c51d8e69a77972c880369fdbd45b3297d
Parents: d3bccd9
Author: Jimmy Xiang <jx...@cloudera.com>
Authored: Mon Jul 28 14:34:46 2014 -0700
Committer: Jimmy Xiang <jx...@cloudera.com>
Committed: Thu Sep 11 13:43:40 2014 -0700

----------------------------------------------------------------------
 .../hadoop/hbase/master/ServerManager.java      | 12 ++++-
 .../hbase/master/balancer/BaseLoadBalancer.java | 17 ++-----
 .../master/balancer/StochasticLoadBalancer.java |  1 +
 .../hadoop/hbase/client/TestScannerTimeout.java |  2 +
 .../hadoop/hbase/fs/TestBlockReorder.java       |  2 +-
 .../master/TestAssignmentManagerOnCluster.java  |  4 +-
 .../master/TestDistributedLogSplitting.java     |  1 +
 .../hadoop/hbase/master/TestMasterFailover.java | 51 ++++++--------------
 .../hadoop/hbase/master/TestMasterMetrics.java  |  4 +-
 .../TestMasterOperationsForRegionReplicas.java  |  4 +-
 .../hbase/master/TestZKLessAMOnCluster.java     |  2 +
 .../master/balancer/TestBaseLoadBalancer.java   | 26 +---------
 .../TestRSKilledWhenInitializing.java           |  2 +-
 .../regionserver/TestRegionServerMetrics.java   |  5 ++
 .../regionserver/TestRegionServerNoMaster.java  | 19 --------
 .../TestSplitTransactionOnCluster.java          |  6 +--
 ...isibilityLabelsWithDistributedLogReplay.java |  2 +
 src/main/docbkx/getting_started.xml             | 13 +----
 18 files changed, 56 insertions(+), 117 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/hbase/blob/d283818c/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 6204206..ca14571 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
@@ -898,8 +898,18 @@ public class ServerManager {
       getLong(WAIT_ON_REGIONSERVERS_INTERVAL, 1500);
     final long timeout = this.master.getConfiguration().
       getLong(WAIT_ON_REGIONSERVERS_TIMEOUT, 4500);
+    String[] tablesOnMaster = this.master.getConfiguration().
+      getStrings("hbase.balancer.tablesOnMaster");
+    int defaultMinToStart = 1;
+    if (tablesOnMaster != null && tablesOnMaster.length > 0) {
+      // If we assign regions to master, we'd like to start
+      // at least another region server so that we don't
+      // assign all regions to master if that region server
+      // doesn't come up in time.
+      defaultMinToStart = 2;
+    }
     int minToStart = this.master.getConfiguration().
-      getInt(WAIT_ON_REGIONSERVERS_MINTOSTART, 2);
+      getInt(WAIT_ON_REGIONSERVERS_MINTOSTART, defaultMinToStart);
     if (minToStart < 1) {
       LOG.warn(String.format(
         "The value of '%s' (%d) can not be less than 1, ignoring.",

http://git-wip-us.apache.org/repos/asf/hbase/blob/d283818c/hbase-server/src/main/java/org/apache/hadoop/hbase/master/balancer/BaseLoadBalancer.java
----------------------------------------------------------------------
diff --git a/hbase-server/src/main/java/org/apache/hadoop/hbase/master/balancer/BaseLoadBalancer.java b/hbase-server/src/main/java/org/apache/hadoop/hbase/master/balancer/BaseLoadBalancer.java
index d0c0a92..8af5c88 100644
--- a/hbase-server/src/main/java/org/apache/hadoop/hbase/master/balancer/BaseLoadBalancer.java
+++ b/hbase-server/src/main/java/org/apache/hadoop/hbase/master/balancer/BaseLoadBalancer.java
@@ -43,12 +43,10 @@ import org.apache.hadoop.hbase.HBaseIOException;
 import org.apache.hadoop.hbase.HRegionInfo;
 import org.apache.hadoop.hbase.RegionLoad;
 import org.apache.hadoop.hbase.ServerName;
-import org.apache.hadoop.hbase.TableName;
 import org.apache.hadoop.hbase.master.AssignmentManager;
 import org.apache.hadoop.hbase.master.LoadBalancer;
 import org.apache.hadoop.hbase.master.MasterServices;
 import org.apache.hadoop.hbase.master.RegionPlan;
-import org.apache.hadoop.hbase.security.access.AccessControlLists;
 import org.apache.hadoop.hbase.client.RegionReplicaUtil;
 import org.apache.hadoop.hbase.master.RackManager;
 import org.apache.hadoop.hbase.master.balancer.BaseLoadBalancer.Cluster.Action.Type;
@@ -863,18 +861,12 @@ public abstract class BaseLoadBalancer implements LoadBalancer {
   // That's why the default activeMasterWeight is high.
   public static final String BACKUP_MASTER_WEIGHT_KEY =
     "hbase.balancer.backupMasterWeight";
-  public static final int DEFAULT_BACKUP_MASTER_WEIGHT = 1;
+  public static final int DEFAULT_BACKUP_MASTER_WEIGHT = 0;
 
   private static final String ACTIVE_MASTER_WEIGHT_KEY =
     "hbase.balancer.activeMasterWeight";
   private static final int DEFAULT_ACTIVE_MASTER_WEIGHT = 200;
 
-  // Regions of these tables are put on the master by default.
-  private static final String[] DEFAULT_TABLES_ON_MASTER =
-    new String[] {AccessControlLists.ACL_TABLE_NAME.getNameAsString(),
-      TableName.NAMESPACE_TABLE_NAME.getNameAsString(),
-      TableName.META_TABLE_NAME.getNameAsString()};
-
   protected int activeMasterWeight;
   protected int backupMasterWeight;
 
@@ -906,8 +898,7 @@ public abstract class BaseLoadBalancer implements LoadBalancer {
         + BACKUP_MASTER_WEIGHT_KEY + " is " + backupMasterWeight
         + "(<1)");
     }
-    String[] tables = conf.getStrings(
-      "hbase.balancer.tablesOnMaster", DEFAULT_TABLES_ON_MASTER);
+    String[] tables = conf.getStrings("hbase.balancer.tablesOnMaster");
     if (tables != null) {
       for (String table: tables) {
         tablesOnMaster.add(table);
@@ -1139,8 +1130,8 @@ public abstract class BaseLoadBalancer implements LoadBalancer {
     int total = regions.size();
     // Get the number of regions to be assigned
     // to backup masters based on the weight
-    int numRegions = total * numBackupMasters
-      / (numServers * backupMasterWeight + numBackupMasters);
+    int numRegions = usingBackupMasters ? total * numBackupMasters
+      / (numServers * backupMasterWeight + numBackupMasters) : 0;
     if (numRegions > 0) {
       // backupMasters can't be null, according to the formula, numBackupMasters != 0
       roundRobinAssignment(cluster, regions, unassignedRegions, 0,

http://git-wip-us.apache.org/repos/asf/hbase/blob/d283818c/hbase-server/src/main/java/org/apache/hadoop/hbase/master/balancer/StochasticLoadBalancer.java
----------------------------------------------------------------------
diff --git a/hbase-server/src/main/java/org/apache/hadoop/hbase/master/balancer/StochasticLoadBalancer.java b/hbase-server/src/main/java/org/apache/hadoop/hbase/master/balancer/StochasticLoadBalancer.java
index 52db329..d32094d 100644
--- a/hbase-server/src/main/java/org/apache/hadoop/hbase/master/balancer/StochasticLoadBalancer.java
+++ b/hbase-server/src/main/java/org/apache/hadoop/hbase/master/balancer/StochasticLoadBalancer.java
@@ -329,6 +329,7 @@ public class StochasticLoadBalancer extends BaseLoadBalancer {
     loads = new HashMap<String, Deque<RegionLoad>>();
 
     for (ServerName sn : clusterStatus.getServers()) {
+      if (excludedServers.contains(sn)) continue;
       ServerLoad sl = clusterStatus.getLoad(sn);
       if (sl == null) {
         continue;

http://git-wip-us.apache.org/repos/asf/hbase/blob/d283818c/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 402f798..e220058 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
@@ -63,6 +63,8 @@ public class TestScannerTimeout {
     Configuration c = TEST_UTIL.getConfiguration();
     c.setInt(HConstants.HBASE_CLIENT_SCANNER_TIMEOUT_PERIOD, SCANNER_TIMEOUT);
     c.setInt(HConstants.THREAD_WAKE_FREQUENCY, THREAD_WAKE_FREQUENCY);
+    // Put meta on master to avoid meta server shutdown handling
+    c.set("hbase.balancer.tablesOnMaster", "hbase:meta");
     // We need more than one region server for this test
     TEST_UTIL.startMiniCluster(2);
     Table table = TEST_UTIL.createTable(TABLE_NAME, SOME_BYTES);

http://git-wip-us.apache.org/repos/asf/hbase/blob/d283818c/hbase-server/src/test/java/org/apache/hadoop/hbase/fs/TestBlockReorder.java
----------------------------------------------------------------------
diff --git a/hbase-server/src/test/java/org/apache/hadoop/hbase/fs/TestBlockReorder.java b/hbase-server/src/test/java/org/apache/hadoop/hbase/fs/TestBlockReorder.java
index f83fbf3..b822a3d 100644
--- a/hbase-server/src/test/java/org/apache/hadoop/hbase/fs/TestBlockReorder.java
+++ b/hbase-server/src/test/java/org/apache/hadoop/hbase/fs/TestBlockReorder.java
@@ -243,7 +243,7 @@ public class TestBlockReorder {
     byte[] sb = "sb".getBytes();
     htu.startMiniZKCluster();
 
-    MiniHBaseCluster hbm = htu.startMiniHBaseCluster(1, 0);
+    MiniHBaseCluster hbm = htu.startMiniHBaseCluster(1, 1);
     hbm.waitForActiveAndReadyMaster();
     HRegionServer targetRs = hbm.getMaster();
 

http://git-wip-us.apache.org/repos/asf/hbase/blob/d283818c/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 2208bf2..1c156a3 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
@@ -70,7 +70,6 @@ import org.apache.hadoop.hbase.util.ConfigUtil;
 import org.apache.hadoop.hbase.util.EnvironmentEdgeManager;
 import org.apache.hadoop.hbase.util.FSUtils;
 import org.apache.hadoop.hbase.util.JVMClusterUtil;
-import org.apache.hadoop.hbase.util.Threads;
 import org.apache.hadoop.hbase.zookeeper.ZKAssign;
 import org.apache.hadoop.hbase.zookeeper.ZooKeeperWatcher;
 import org.apache.zookeeper.KeeperException;
@@ -126,7 +125,8 @@ public class TestAssignmentManagerOnCluster {
       RegionStates regionStates = master.getAssignmentManager().getRegionStates();
       ServerName metaServerName = regionStates.getRegionServerOfRegion(
         HRegionInfo.FIRST_META_REGIONINFO);
-      if (master.getServerName().equals(metaServerName)) {
+      if (master.getServerName().equals(metaServerName) || metaServerName == null
+          || !metaServerName.equals(cluster.getServerHoldingMeta())) {
         // Move meta off master
         metaServerName = cluster.getLiveRegionServerThreads()
           .get(0).getRegionServer().getServerName();

http://git-wip-us.apache.org/repos/asf/hbase/blob/d283818c/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 b5400b2..5bdd4d1 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
@@ -885,6 +885,7 @@ public class TestDistributedLogSplitting {
       List<HRegionInfo> regions = ProtobufUtil.getOnlineRegions(hrs.getRSRpcServices());
       if (regions.isEmpty()) continue;
       region = regions.get(0);
+      if (region.isMetaRegion()) continue;
       regionSet.add(region);
       dstRS = rsts.get((i+1) % NUM_RS).getRegionServer();
       break;

http://git-wip-us.apache.org/repos/asf/hbase/blob/d283818c/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 48e2f6f..6ca7d52 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
@@ -68,7 +68,6 @@ 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.MetaTableLocator;
 import org.apache.hadoop.hbase.zookeeper.ZKAssign;
 import org.apache.hadoop.hbase.zookeeper.ZKTableStateManager;
 import org.apache.hadoop.hbase.zookeeper.ZooKeeperWatcher;
@@ -293,22 +292,6 @@ public class TestMasterFailover {
      * javadoc.
      */
 
-    // Master is down, so is the meta. We need to assign it somewhere
-    // so that regions can be assigned during the mocking phase.
-    ZKAssign.createNodeOffline(
-      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 = mtl.getMetaRegionLocation(zkw);
-      if (sn != null && sn.equals(hrs.getServerName())) {
-        break;
-      }
-      Thread.sleep(100);
-    }
-
     List<HRegionInfo> regionsThatShouldBeOnline = new ArrayList<HRegionInfo>();
     List<HRegionInfo> regionsThatShouldBeOffline = new ArrayList<HRegionInfo>();
 
@@ -686,22 +669,6 @@ public class TestMasterFailover {
      * javadoc.
      */
 
-    // Master is down, so is the meta. We need to assign it somewhere
-    // so that regions can be assigned during the mocking phase.
-    ZKAssign.createNodeOffline(
-      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 = mtl.getMetaRegionLocation(zkw);
-      if (sn != null && sn.equals(hrs.getServerName())) {
-        break;
-      }
-      Thread.sleep(100);
-    }
-
     List<HRegionInfo> regionsThatShouldBeOnline = new ArrayList<HRegionInfo>();
     List<HRegionInfo> regionsThatShouldBeOffline = new ArrayList<HRegionInfo>();
 
@@ -988,16 +955,26 @@ public class TestMasterFailover {
     MiniHBaseCluster cluster = TEST_UTIL.getHBaseCluster();
 
     // Find regionserver carrying meta.
-    HRegionServer regionServer = cluster.getMaster();
-    HRegion metaRegion = regionServer.getOnlineRegion(
-      HRegionInfo.FIRST_META_REGIONINFO.getRegionName());
+    List<RegionServerThread> regionServerThreads =
+      cluster.getRegionServerThreads();
+    HRegion metaRegion = null;
+    HRegionServer metaRegionServer = null;
+    for (RegionServerThread regionServerThread : regionServerThreads) {
+      HRegionServer regionServer = regionServerThread.getRegionServer();
+      metaRegion = regionServer.getOnlineRegion(HRegionInfo.FIRST_META_REGIONINFO.getRegionName());
+      regionServer.abort("");
+      if (null != metaRegion) {
+        metaRegionServer = regionServer;
+        break;
+      }
+    }
 
     TEST_UTIL.shutdownMiniHBaseCluster();
 
     // Create a ZKW to use in the test
     ZooKeeperWatcher zkw =
       HBaseTestingUtility.createAndForceNodeToOpenedState(TEST_UTIL,
-          metaRegion, regionServer.getServerName());
+          metaRegion, metaRegionServer.getServerName());
 
     LOG.info("Staring cluster for second time");
     TEST_UTIL.startMiniHBaseCluster(NUM_MASTERS, NUM_RS);

http://git-wip-us.apache.org/repos/asf/hbase/blob/d283818c/hbase-server/src/test/java/org/apache/hadoop/hbase/master/TestMasterMetrics.java
----------------------------------------------------------------------
diff --git a/hbase-server/src/test/java/org/apache/hadoop/hbase/master/TestMasterMetrics.java b/hbase-server/src/test/java/org/apache/hadoop/hbase/master/TestMasterMetrics.java
index 2bae847..2ee7d51 100644
--- a/hbase-server/src/test/java/org/apache/hadoop/hbase/master/TestMasterMetrics.java
+++ b/hbase-server/src/test/java/org/apache/hadoop/hbase/master/TestMasterMetrics.java
@@ -66,7 +66,7 @@ public class TestMasterMetrics {
   public static void startCluster() throws Exception {
     LOG.info("Starting cluster");
     TEST_UTIL = new HBaseTestingUtility();
-    TEST_UTIL.startMiniCluster(1, 0, 1, null, MyMaster.class, null);
+    TEST_UTIL.startMiniCluster(1, 1, 1, null, MyMaster.class, null);
     cluster = TEST_UTIL.getHBaseCluster();
     LOG.info("Waiting for active/ready master");
     cluster.waitForActiveAndReadyMaster();
@@ -116,7 +116,7 @@ public class TestMasterMetrics {
   @Test
   public void testDefaultMasterMetrics() throws Exception {
     MetricsMasterSource masterSource = master.getMasterMetrics().getMetricsSource();
-    metricsHelper.assertGauge( "numRegionServers", 1, masterSource);
+    metricsHelper.assertGauge( "numRegionServers", 2, masterSource);
     metricsHelper.assertGauge( "averageLoad", 2, masterSource);
     metricsHelper.assertGauge( "numDeadRegionServers", 0, masterSource);
 

http://git-wip-us.apache.org/repos/asf/hbase/blob/d283818c/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 5f409fe..34cc199 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
@@ -337,12 +337,12 @@ public class TestMasterOperationsForRegionReplicas {
     Map<HRegionInfo, ServerName>  regionToServerMap = snapshot.getRegionToRegionServerMap();
     assertEquals(regionToServerMap.size(), numRegions * numReplica + 1); //'1' for the namespace
     Map<ServerName, List<HRegionInfo>> serverToRegionMap = snapshot.getRegionServerToRegionMap();
-    assertEquals(serverToRegionMap.keySet().size(), 2); // 1 rs + 1 master
+    assertEquals(serverToRegionMap.keySet().size(), 1); // master by default not used
     for (Map.Entry<ServerName, List<HRegionInfo>> entry : serverToRegionMap.entrySet()) {
       if (entry.getKey().equals(TEST_UTIL.getHBaseCluster().getMaster().getServerName())) {
         continue;
       }
-      assertEquals(entry.getValue().size(), numRegions * numReplica);
+      assertEquals(entry.getValue().size(), numRegions * numReplica + 1); //'1' for the namespace
     }
   }
 }

http://git-wip-us.apache.org/repos/asf/hbase/blob/d283818c/hbase-server/src/test/java/org/apache/hadoop/hbase/master/TestZKLessAMOnCluster.java
----------------------------------------------------------------------
diff --git a/hbase-server/src/test/java/org/apache/hadoop/hbase/master/TestZKLessAMOnCluster.java b/hbase-server/src/test/java/org/apache/hadoop/hbase/master/TestZKLessAMOnCluster.java
index 83d33c5..6eb273a 100644
--- a/hbase-server/src/test/java/org/apache/hadoop/hbase/master/TestZKLessAMOnCluster.java
+++ b/hbase-server/src/test/java/org/apache/hadoop/hbase/master/TestZKLessAMOnCluster.java
@@ -30,6 +30,8 @@ public class TestZKLessAMOnCluster extends TestAssignmentManagerOnCluster {
 
   @BeforeClass
   public static void setUpBeforeClass() throws Exception {
+    // Put meta on master to avoid meta server shutdown handling
+    conf.set("hbase.balancer.tablesOnMaster", "hbase:meta");
     // Don't use ZK for region assignment
     conf.setBoolean("hbase.assignment.usezk", false);
     setupOnce();

http://git-wip-us.apache.org/repos/asf/hbase/blob/d283818c/hbase-server/src/test/java/org/apache/hadoop/hbase/master/balancer/TestBaseLoadBalancer.java
----------------------------------------------------------------------
diff --git a/hbase-server/src/test/java/org/apache/hadoop/hbase/master/balancer/TestBaseLoadBalancer.java b/hbase-server/src/test/java/org/apache/hadoop/hbase/master/balancer/TestBaseLoadBalancer.java
index 0507e26..625486d 100644
--- a/hbase-server/src/test/java/org/apache/hadoop/hbase/master/balancer/TestBaseLoadBalancer.java
+++ b/hbase-server/src/test/java/org/apache/hadoop/hbase/master/balancer/TestBaseLoadBalancer.java
@@ -18,7 +18,6 @@
 package org.apache.hadoop.hbase.master.balancer;
 
 import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertNotEquals;
 import static org.junit.Assert.assertNull;
 import static org.junit.Assert.assertTrue;
 import static org.mockito.Mockito.mock;
@@ -118,17 +117,6 @@ public class TestBaseLoadBalancer extends BalancerTestBase {
    */
   @Test
   public void testImmediateAssignment() throws Exception {
-    List<ServerName> tmp = getListOfServerNames(randomServers(1, 0));
-    tmp.add(master);
-    ServerName sn = loadBalancer.randomAssignment(HRegionInfo.FIRST_META_REGIONINFO, tmp);
-    assertEquals(master, sn);
-    HRegionInfo hri = randomRegions(1, -1).get(0);
-    sn = loadBalancer.randomAssignment(hri, tmp);
-    assertNotEquals(master, sn);
-    tmp = new ArrayList<ServerName>();
-    tmp.add(master);
-    sn = loadBalancer.randomAssignment(hri, tmp);
-    assertEquals(master, sn);
     for (int[] mock : regionsAndServersMocks) {
       LOG.debug("testImmediateAssignment with " + mock[0] + " regions and " + mock[1] + " servers");
       List<HRegionInfo> regions = randomRegions(mock[0]);
@@ -164,18 +152,6 @@ public class TestBaseLoadBalancer extends BalancerTestBase {
    */
   @Test
   public void testBulkAssignment() throws Exception {
-    List<ServerName> tmp = getListOfServerNames(randomServers(5, 0));
-    List<HRegionInfo> hris = randomRegions(20);
-    hris.add(HRegionInfo.FIRST_META_REGIONINFO);
-    tmp.add(master);
-    Map<ServerName, List<HRegionInfo>> plans = loadBalancer.roundRobinAssignment(hris, tmp);
-    assertTrue(plans.get(master).contains(HRegionInfo.FIRST_META_REGIONINFO));
-    assertEquals(1, plans.get(master).size());
-    int totalRegion = 0;
-    for (List<HRegionInfo> regions: plans.values()) {
-      totalRegion += regions.size();
-    }
-    assertEquals(hris.size(), totalRegion);
     for (int[] mock : regionsAndServersMocks) {
       LOG.debug("testBulkAssignment with " + mock[0] + " regions and " + mock[1] + " servers");
       List<HRegionInfo> regions = randomRegions(mock[0]);
@@ -533,7 +509,7 @@ public class TestBaseLoadBalancer extends BalancerTestBase {
     balancer.usingBackupMasters = false;
     Mockito.when(st.getBackupMasters()).thenReturn(backupMasters);
     loadBalancer.setClusterStatus(st);
-    assertEquals(1, balancer.excludedServers.size());
+    assertEquals(backupMasters.size(), balancer.excludedServers.size());
     assertTrue(balancer.excludedServers.contains(backupMaster));
 
     // Round robin assignment

http://git-wip-us.apache.org/repos/asf/hbase/blob/d283818c/hbase-server/src/test/java/org/apache/hadoop/hbase/regionserver/TestRSKilledWhenInitializing.java
----------------------------------------------------------------------
diff --git a/hbase-server/src/test/java/org/apache/hadoop/hbase/regionserver/TestRSKilledWhenInitializing.java b/hbase-server/src/test/java/org/apache/hadoop/hbase/regionserver/TestRSKilledWhenInitializing.java
index 16c8681..87311a0 100644
--- a/hbase-server/src/test/java/org/apache/hadoop/hbase/regionserver/TestRSKilledWhenInitializing.java
+++ b/hbase-server/src/test/java/org/apache/hadoop/hbase/regionserver/TestRSKilledWhenInitializing.java
@@ -76,7 +76,7 @@ public class TestRSKilledWhenInitializing {
     master.start();
     try {
       long startTime = System.currentTimeMillis();
-      while (!master.getMaster().isInitialized()) {
+      while (!master.getMaster().isActiveMaster()) {
         try {
           Thread.sleep(100);
         } catch (InterruptedException ignored) {

http://git-wip-us.apache.org/repos/asf/hbase/blob/d283818c/hbase-server/src/test/java/org/apache/hadoop/hbase/regionserver/TestRegionServerMetrics.java
----------------------------------------------------------------------
diff --git a/hbase-server/src/test/java/org/apache/hadoop/hbase/regionserver/TestRegionServerMetrics.java b/hbase-server/src/test/java/org/apache/hadoop/hbase/regionserver/TestRegionServerMetrics.java
index 7ae0b5b..ee5c4db 100644
--- a/hbase-server/src/test/java/org/apache/hadoop/hbase/regionserver/TestRegionServerMetrics.java
+++ b/hbase-server/src/test/java/org/apache/hadoop/hbase/regionserver/TestRegionServerMetrics.java
@@ -158,6 +158,11 @@ public class TestRegionServerMetrics {
     }
     table.get(gets);
 
+    // By default, master doesn't host meta now.
+    // Adding some meta related requests
+    requests += 3;
+    readRequests ++;
+
     metricsRegionServer.getRegionServerWrapper().forceRecompute();
     metricsHelper.assertCounter("totalRequestCount", requests + 50, serverSource);
     metricsHelper.assertCounter("readRequestCount", readRequests + 20, serverSource);

http://git-wip-us.apache.org/repos/asf/hbase/blob/d283818c/hbase-server/src/test/java/org/apache/hadoop/hbase/regionserver/TestRegionServerNoMaster.java
----------------------------------------------------------------------
diff --git a/hbase-server/src/test/java/org/apache/hadoop/hbase/regionserver/TestRegionServerNoMaster.java b/hbase-server/src/test/java/org/apache/hadoop/hbase/regionserver/TestRegionServerNoMaster.java
index 0843abe..4291590 100644
--- a/hbase-server/src/test/java/org/apache/hadoop/hbase/regionserver/TestRegionServerNoMaster.java
+++ b/hbase-server/src/test/java/org/apache/hadoop/hbase/regionserver/TestRegionServerNoMaster.java
@@ -35,7 +35,6 @@ import org.apache.hadoop.hbase.coordination.BaseCoordinatedStateManager;
 import org.apache.hadoop.hbase.coordination.ZkCoordinatedStateManager;
 import org.apache.hadoop.hbase.coordination.ZkOpenRegionCoordination;
 import org.apache.hadoop.hbase.executor.EventType;
-import org.apache.hadoop.hbase.protobuf.ProtobufUtil;
 import org.apache.hadoop.hbase.protobuf.RequestConverter;
 import org.apache.hadoop.hbase.protobuf.generated.AdminProtos;
 import org.apache.hadoop.hbase.protobuf.generated.AdminProtos.CloseRegionRequest;
@@ -43,9 +42,7 @@ import org.apache.hadoop.hbase.regionserver.handler.OpenRegionHandler;
 import org.apache.hadoop.hbase.util.Bytes;
 import org.apache.hadoop.hbase.util.Threads;
 import org.apache.hadoop.hbase.util.JVMClusterUtil.RegionServerThread;
-import org.apache.hadoop.hbase.zookeeper.MetaTableLocator;
 import org.apache.hadoop.hbase.zookeeper.ZKAssign;
-import org.apache.hadoop.hbase.zookeeper.ZooKeeperWatcher;
 import org.apache.zookeeper.KeeperException;
 import org.apache.zookeeper.KeeperException.NodeExistsException;
 import org.junit.After;
@@ -103,22 +100,6 @@ public class TestRegionServerNoMaster {
         && HTU.getHBaseCluster().getMasterThread().isAlive()) {
       Threads.sleep(100);
     }
-    // Master is down, so is the meta. We need to assign it somewhere
-    // so that regions can be assigned during the mocking phase.
-    HRegionServer hrs = HTU.getHBaseCluster().getRegionServer(0);
-    ZooKeeperWatcher zkw = hrs.getZooKeeper();
-    ZKAssign.createNodeOffline(
-      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 = mtl.getMetaRegionLocation(zkw);
-      if (sn != null && sn.equals(hrs.getServerName())) {
-        break;
-      }
-      Thread.sleep(100);
-    }
   }
 
   /** Flush the given region in the mini cluster. Since no master, we cannot use HBaseAdmin.flush() */

http://git-wip-us.apache.org/repos/asf/hbase/blob/d283818c/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 edbdd64..20cc8e5 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
@@ -131,7 +131,7 @@ public class TestSplitTransactionOnCluster {
   static void setupOnce() throws Exception {
     TESTING_UTIL.getConfiguration().setInt("hbase.balancer.period", 60000);
     useZKForAssignment = TESTING_UTIL.getConfiguration().getBoolean(
-      "hbase.assignment.usezk", false);
+      "hbase.assignment.usezk", true);
     TESTING_UTIL.startMiniCluster(NB_SERVERS);
   }
 
@@ -1270,8 +1270,8 @@ public class TestSplitTransactionOnCluster {
     // hbase:meta  We don't want hbase:meta replay polluting our test when we later crash
     // the table region serving server.
     int metaServerIndex = cluster.getServerWithMeta();
-    assertTrue(metaServerIndex == -1); // meta is on master now
-    HRegionServer metaRegionServer = cluster.getMaster();
+    assertTrue(metaServerIndex != -1);
+    HRegionServer metaRegionServer = cluster.getRegionServer(metaServerIndex);
     int tableRegionIndex = cluster.getServerWith(hri.getRegionName());
     assertTrue(tableRegionIndex != -1);
     HRegionServer tableRegionServer = cluster.getRegionServer(tableRegionIndex);

http://git-wip-us.apache.org/repos/asf/hbase/blob/d283818c/hbase-server/src/test/java/org/apache/hadoop/hbase/security/visibility/TestVisibilityLabelsWithDistributedLogReplay.java
----------------------------------------------------------------------
diff --git a/hbase-server/src/test/java/org/apache/hadoop/hbase/security/visibility/TestVisibilityLabelsWithDistributedLogReplay.java b/hbase-server/src/test/java/org/apache/hadoop/hbase/security/visibility/TestVisibilityLabelsWithDistributedLogReplay.java
index 11a830c..3696a04 100644
--- a/hbase-server/src/test/java/org/apache/hadoop/hbase/security/visibility/TestVisibilityLabelsWithDistributedLogReplay.java
+++ b/hbase-server/src/test/java/org/apache/hadoop/hbase/security/visibility/TestVisibilityLabelsWithDistributedLogReplay.java
@@ -42,6 +42,8 @@ public class TestVisibilityLabelsWithDistributedLogReplay extends
     conf.setClass(VisibilityUtils.VISIBILITY_LABEL_GENERATOR_CLASS, SimpleScanLabelGenerator.class,
         ScanLabelGenerator.class);
     conf.set("hbase.superuser", "admin");
+    // Put meta on master to avoid meta server shutdown handling
+    conf.set("hbase.balancer.tablesOnMaster", "hbase:meta");
     TEST_UTIL.startMiniCluster(2);
     SUPERUSER = User.createUserForTesting(conf, "admin", new String[] { "supergroup" });
     USER1 = User.createUserForTesting(conf, "user1", new String[] {});

http://git-wip-us.apache.org/repos/asf/hbase/blob/d283818c/src/main/docbkx/getting_started.xml
----------------------------------------------------------------------
diff --git a/src/main/docbkx/getting_started.xml b/src/main/docbkx/getting_started.xml
index b4e9911..9ea9f11 100644
--- a/src/main/docbkx/getting_started.xml
+++ b/src/main/docbkx/getting_started.xml
@@ -327,23 +327,14 @@ $
           <title>Configure HBase.</title>
           <para>
             Edit the <filename>hbase-site.xml</filename> configuration. First, add the following
-            properties. Property <code>hbase.cluster.distributed</code> is set to <code>true</code>
-            (Its default is <code>false</code>), which directs HBase to run in distributed mode,
-            with one JVM instance per daemon. Since HBase version 1.0.0, a HMaster is also a
-            RegionServer. So in pseudo-distributed mode, just one HMaster (also a RegionServer)
-            instance is started by default. Because there is just one RegionServer (the HMaster),
-            property <code>hbase.master.wait.on.regionservers.mintostart</code> should be set to
-            <code>1</code> (Its default is changed to <code>2</code> since version 1.0.0).
+            property, which directs HBase to run in distributed mode, with one JVM instance per
+            daemon.
           </para>
           <programlisting><![CDATA[
 <property>
   <name>hbase.cluster.distributed</name>
   <value>true</value>
 </property>
-<property>
-  <name>hbase.master.wait.on.regionservers.mintostart</name>
-  <value>1</value>
-</property>
             ]]></programlisting>
           <para>Next, change the <code>hbase.rootdir</code> from the local filesystem to the address
             of your HDFS instance, using the <code>hdfs:////</code> URI syntax. In this example,