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 2012/07/27 18:34:34 UTC

svn commit: r1366438 [3/3] - in /hbase/trunk/hbase-server/src: main/jamon/org/apache/hadoop/hbase/tmpl/master/ main/java/org/apache/hadoop/hbase/ main/java/org/apache/hadoop/hbase/client/ main/java/org/apache/hadoop/hbase/master/ main/java/org/apache/h...

Modified: hbase/trunk/hbase-server/src/test/java/org/apache/hadoop/hbase/master/TestAssignmentManager.java
URL: http://svn.apache.org/viewvc/hbase/trunk/hbase-server/src/test/java/org/apache/hadoop/hbase/master/TestAssignmentManager.java?rev=1366438&r1=1366437&r2=1366438&view=diff
==============================================================================
--- hbase/trunk/hbase-server/src/test/java/org/apache/hadoop/hbase/master/TestAssignmentManager.java (original)
+++ hbase/trunk/hbase-server/src/test/java/org/apache/hadoop/hbase/master/TestAssignmentManager.java Fri Jul 27 16:34:32 2012
@@ -36,6 +36,7 @@ import org.apache.hadoop.hbase.HBaseTest
 import org.apache.hadoop.hbase.HConstants;
 import org.apache.hadoop.hbase.HRegionInfo;
 import org.apache.hadoop.hbase.MediumTests;
+import org.apache.hadoop.hbase.RegionException;
 import org.apache.hadoop.hbase.RegionTransition;
 import org.apache.hadoop.hbase.Server;
 import org.apache.hadoop.hbase.ServerLoad;
@@ -49,8 +50,7 @@ import org.apache.hadoop.hbase.client.Re
 import org.apache.hadoop.hbase.executor.EventHandler.EventType;
 import org.apache.hadoop.hbase.executor.ExecutorService;
 import org.apache.hadoop.hbase.executor.ExecutorService.ExecutorType;
-import org.apache.hadoop.hbase.master.AssignmentManager.RegionState;
-import org.apache.hadoop.hbase.master.AssignmentManager.RegionState.State;
+import org.apache.hadoop.hbase.master.RegionState.State;
 import org.apache.hadoop.hbase.master.balancer.DefaultLoadBalancer;
 import org.apache.hadoop.hbase.master.balancer.LoadBalancerFactory;
 import org.apache.hadoop.hbase.master.handler.ServerShutdownHandler;
@@ -102,6 +102,7 @@ public class TestAssignmentManager {
   private ServerManager serverManager;
   private ZooKeeperWatcher watcher;
   private LoadBalancer balancer;
+  private HMaster master;
 
   @BeforeClass
   public static void beforeClass() throws Exception {
@@ -155,7 +156,10 @@ public class TestAssignmentManager {
     Mockito.when(this.serverManager.sendRegionOpen(SERVERNAME_A, REGIONINFO, -1)).
       thenReturn(RegionOpeningState.OPENED);
     Mockito.when(this.serverManager.sendRegionOpen(SERVERNAME_B, REGIONINFO, -1)).
-    thenReturn(RegionOpeningState.OPENED);
+      thenReturn(RegionOpeningState.OPENED);
+    this.master = Mockito.mock(HMaster.class);
+
+    Mockito.when(this.master.getServerManager()).thenReturn(serverManager);
   }
 
   @After
@@ -299,8 +303,9 @@ public class TestAssignmentManager {
     }
   }
 
-  private void createRegionPlanAndBalance(final AssignmentManager am,
-      final ServerName from, final ServerName to, final HRegionInfo hri) {
+  private void createRegionPlanAndBalance(
+      final AssignmentManager am, final ServerName from,
+      final ServerName to, final HRegionInfo hri) throws RegionException {
     // Call the balance function but fake the region being online first at
     // servername from.
     am.regionOnline(hri, from);
@@ -330,7 +335,7 @@ public class TestAssignmentManager {
         .getConfiguration());
     // Create an AM.
     AssignmentManager am = new AssignmentManager(this.server,
-        this.serverManager, ct, balancer, executor, null);
+      this.serverManager, ct, balancer, executor, null);
     try {
       // Make sure our new AM gets callbacks; once registered, can't unregister.
       // Thats ok because we make a new zk watcher for each test.
@@ -370,7 +375,7 @@ public class TestAssignmentManager {
         ZKAssign.transitionNodeOpened(this.watcher, REGIONINFO, SERVERNAME_B, versionid);
       assertNotSame(-1, versionid);
       // Wait on the handler removing the OPENED znode.
-      while(am.isRegionInTransition(REGIONINFO) != null) Threads.sleep(1);
+      while(am.getRegionStates().isRegionInTransition(REGIONINFO)) Threads.sleep(1);
     } finally {
       executor.shutdown();
       am.shutdown();
@@ -397,7 +402,7 @@ public class TestAssignmentManager {
         .getConfiguration());
     // Create an AM.
     AssignmentManager am = new AssignmentManager(this.server,
-        this.serverManager, ct, balancer, executor, null);
+      this.serverManager, ct, balancer, executor, null);
     try {
       processServerShutdownHandler(ct, am, false);
     } finally {
@@ -448,15 +453,14 @@ public class TestAssignmentManager {
 
     // We need a mocked catalog tracker.
     CatalogTracker ct = Mockito.mock(CatalogTracker.class);
-    LoadBalancer balancer = LoadBalancerFactory.getLoadBalancer(server.getConfiguration());
     // Create an AM.
-    AssignmentManagerWithExtrasForTesting am = setUpMockedAssignmentManager(this.server,
-        this.serverManager);
+    AssignmentManagerWithExtrasForTesting am = setUpMockedAssignmentManager(
+      this.server, this.serverManager);
     // adding region to regions and servers maps.
     am.regionOnline(REGIONINFO, SERVERNAME_A);
     // adding region in pending close.
-    am.regionsInTransition.put(REGIONINFO.getEncodedName(), new RegionState(REGIONINFO,
-        State.SPLITTING, System.currentTimeMillis(), SERVERNAME_A));
+    am.getRegionStates().updateRegionState(
+      REGIONINFO, State.SPLITTING, SERVERNAME_A);
     am.getZKTable().setEnabledTable(REGIONINFO.getTableNameAsString());
     RegionTransition data = RegionTransition.createRegionTransition(EventType.RS_ZK_REGION_SPLITTING,
         REGIONINFO.getRegionName(), SERVERNAME_A);
@@ -470,8 +474,8 @@ public class TestAssignmentManager {
       // In both cases the znode should be deleted.
 
       if (regionSplitDone) {
-        assertTrue("Region state of region in SPLITTING should be removed from rit.",
-            am.regionsInTransition.isEmpty());
+        assertFalse("Region state of region in SPLITTING should be removed from rit.",
+            am.getRegionStates().isRegionsInTransition());
       } else {
         while (!am.assignInvoked) {
           Thread.sleep(1);
@@ -497,13 +501,12 @@ public class TestAssignmentManager {
     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);
+    AssignmentManager am = new AssignmentManager(this.server,
+      this.serverManager, ct, balancer, executor, null);
     // adding region to regions and servers maps.
     am.regionOnline(REGIONINFO, SERVERNAME_A);
     // adding region in pending close.
-    am.regionsInTransition.put(REGIONINFO.getEncodedName(), new RegionState(REGIONINFO,
-        State.PENDING_CLOSE));
+    am.getRegionStates().updateRegionState(REGIONINFO, State.PENDING_CLOSE);
     if (state == Table.State.DISABLING) {
       am.getZKTable().setDisablingTable(REGIONINFO.getTableNameAsString());
     } else {
@@ -526,8 +529,8 @@ public class TestAssignmentManager {
       // assert will be true but the piece of code added for HBASE-5927 will not
       // do that.
       if (state == Table.State.DISABLED) {
-        assertTrue("Region state of region in pending close should be removed from rit.",
-            am.regionsInTransition.isEmpty());
+        assertFalse("Region state of region in pending close should be removed from rit.",
+            am.getRegionStates().isRegionsInTransition());
       }
     } finally {
       am.setEnabledTable(REGIONINFO.getTableNameAsString());
@@ -618,7 +621,7 @@ public class TestAssignmentManager {
         .getConfiguration());
     // Create an AM.
     AssignmentManager am = new AssignmentManager(this.server,
-        this.serverManager, ct, balancer, null, null);
+      this.serverManager, ct, balancer, null, null);
     try {
       // First make sure my mock up basically works.  Unassign a region.
       unassign(am, SERVERNAME_A, hri);
@@ -636,7 +639,7 @@ public class TestAssignmentManager {
       // This transition should fail if the znode has been messed with.
       ZKAssign.transitionNode(this.watcher, hri, SERVERNAME_A,
         EventType.RS_ZK_REGION_SPLITTING, EventType.RS_ZK_REGION_SPLITTING, version);
-      assertTrue(am.isRegionInTransition(hri) == null);
+      assertFalse(am.getRegionStates().isRegionInTransition(hri));
     } finally {
       am.shutdown();
     }
@@ -654,7 +657,7 @@ public class TestAssignmentManager {
     final RecoverableZooKeeper recoverableZk = Mockito
         .mock(RecoverableZooKeeper.class);
     AssignmentManagerWithExtrasForTesting am = setUpMockedAssignmentManager(
-        this.server, this.serverManager);
+      this.server, this.serverManager);
     Watcher zkw = new ZooKeeperWatcher(HBaseConfiguration.create(), "unittest",
         null) {
       public RecoverableZooKeeper getRecoverableZooKeeper() {
@@ -666,7 +669,7 @@ public class TestAssignmentManager {
         .getChildren("/hbase/unassigned", zkw);
     am.setWatcher((ZooKeeperWatcher) zkw);
     try {
-      am.processDeadServersAndRegionsInTransition();
+      am.processDeadServersAndRegionsInTransition(null);
       fail("Expected to abort");
     } catch (NullPointerException e) {
       fail("Should not throw NPE");
@@ -678,7 +681,7 @@ public class TestAssignmentManager {
    * TestCase verifies that the regionPlan is updated whenever a region fails to open 
    * and the master tries to process RS_ZK_FAILED_OPEN state.(HBASE-5546).
    */
-  @Test
+  @Test(timeout = 5000)
   public void testRegionPlanIsUpdatedWhenRegionFailsToOpen() throws IOException, KeeperException,
       ServiceException, InterruptedException {
     this.server.getConfiguration().setClass(
@@ -700,9 +703,8 @@ public class TestAssignmentManager {
           EventType.M_ZK_REGION_OFFLINE, EventType.RS_ZK_REGION_FAILED_OPEN, v);
       String path = ZKAssign.getNodeName(this.watcher, REGIONINFO
           .getEncodedName());
-      RegionState state = new RegionState(REGIONINFO, State.OPENING, System
-          .currentTimeMillis(), SERVERNAME_A);
-      am.regionsInTransition.put(REGIONINFO.getEncodedName(), state);
+      am.getRegionStates().updateRegionState(
+        REGIONINFO, State.OPENING, SERVERNAME_A);
       // a dummy plan inserted into the regionPlans. This plan is cleared and
       // new one is formed
       am.regionPlans.put(REGIONINFO.getEncodedName(), new RegionPlan(
@@ -777,11 +779,11 @@ public class TestAssignmentManager {
    * region which is in Opening state on a dead RS. Master should immediately
    * assign the region and not wait for Timeout Monitor.(Hbase-5882).
    */
-  @Test
+  @Test(timeout = 5000)
   public void testRegionInOpeningStateOnDeadRSWhileMasterFailover() throws IOException,
       KeeperException, ServiceException, InterruptedException {
-    AssignmentManagerWithExtrasForTesting am = setUpMockedAssignmentManager(this.server,
-        this.serverManager);
+    AssignmentManagerWithExtrasForTesting am = setUpMockedAssignmentManager(
+      this.server, this.serverManager);
     ZKAssign.createNodeOffline(this.watcher, REGIONINFO, SERVERNAME_A);
     int version = ZKAssign.getVersion(this.watcher, REGIONINFO);
     ZKAssign.transitionNode(this.watcher, REGIONINFO, SERVERNAME_A, EventType.M_ZK_REGION_OFFLINE,
@@ -810,7 +812,7 @@ public class TestAssignmentManager {
    * @throws IOException
    * @throws Exception
    */
-  @Test
+  @Test(timeout = 5000)
   public void testDisablingTableRegionsAssignmentDuringCleanClusterStartup()
       throws KeeperException, IOException, Exception {
     this.server.getConfiguration().setClass(HConstants.HBASE_MASTER_LOADBALANCER_CLASS,
@@ -888,7 +890,7 @@ public class TestAssignmentManager {
   }
 
   private void unassign(final AssignmentManager am, final ServerName sn,
-      final HRegionInfo hri) {
+      final HRegionInfo hri) throws RegionException {
     // Before I can unassign a region, I need to set it online.
     am.regionOnline(hri, sn);
     // Unassign region.
@@ -905,8 +907,7 @@ public class TestAssignmentManager {
    * @throws KeeperException
    */
   private AssignmentManagerWithExtrasForTesting setUpMockedAssignmentManager(final Server server,
-      final ServerManager manager)
-  throws IOException, KeeperException, ServiceException {
+      final ServerManager manager) throws IOException, KeeperException, ServiceException {
     // 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
@@ -938,7 +939,7 @@ public class TestAssignmentManager {
     ExecutorService executor = startupMasterExecutor("mockedAMExecutor");
     this.balancer = LoadBalancerFactory.getLoadBalancer(server.getConfiguration());
     AssignmentManagerWithExtrasForTesting am = new AssignmentManagerWithExtrasForTesting(
-        server, manager, ct, this.balancer, executor);
+      server, manager, ct, this.balancer, executor);
     return am;
   }
 
@@ -954,10 +955,10 @@ public class TestAssignmentManager {
     boolean assignInvoked = false;
     AtomicBoolean gate = new AtomicBoolean(true);
 
-    public AssignmentManagerWithExtrasForTesting(final Server master,
-        final ServerManager serverManager, final CatalogTracker catalogTracker,
-        final LoadBalancer balancer, final ExecutorService service)
-    throws KeeperException, IOException {
+    public AssignmentManagerWithExtrasForTesting(
+        final Server master, final ServerManager serverManager,
+        final CatalogTracker catalogTracker, final LoadBalancer balancer,
+        final ExecutorService service) throws KeeperException, IOException {
       super(master, serverManager, catalogTracker, balancer, service, null);
       this.es = service;
       this.ct = catalogTracker;
@@ -987,12 +988,7 @@ public class TestAssignmentManager {
       super.assign(region, setOfflineInZK, forceNewPlan, hijack);
       this.gate.set(true);
     }
-    
-    @Override
-    public ServerName getRegionServerOfRegion(HRegionInfo hri) {
-      return SERVERNAME_A;
-    }
-    
+
     @Override
     public void assign(java.util.List<HRegionInfo> regions, java.util.List<ServerName> servers) 
     {
@@ -1037,7 +1033,7 @@ public class TestAssignmentManager {
         // the RIT region to our RIT Map in AM at processRegionsInTransition.
         // First clear any inmemory state from AM so it acts like a new master
         // coming on line.
-        am.regionsInTransition.clear();
+        am.getRegionStates().regionsInTransition.clear();
         am.regionPlans.clear();
         try {
           am.joinCluster();

Added: hbase/trunk/hbase-server/src/test/java/org/apache/hadoop/hbase/master/TestAssignmentManagerOnCluster.java
URL: http://svn.apache.org/viewvc/hbase/trunk/hbase-server/src/test/java/org/apache/hadoop/hbase/master/TestAssignmentManagerOnCluster.java?rev=1366438&view=auto
==============================================================================
--- hbase/trunk/hbase-server/src/test/java/org/apache/hadoop/hbase/master/TestAssignmentManagerOnCluster.java (added)
+++ hbase/trunk/hbase-server/src/test/java/org/apache/hadoop/hbase/master/TestAssignmentManagerOnCluster.java Fri Jul 27 16:34:32 2012
@@ -0,0 +1,201 @@
+/**
+ * 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.master;
+
+import static org.junit.Assert.assertTrue;
+import static org.junit.Assert.fail;
+
+import java.io.IOException;
+import java.util.List;
+
+import org.apache.hadoop.conf.Configuration;
+import org.apache.hadoop.hbase.HBaseTestingUtility;
+import org.apache.hadoop.hbase.HColumnDescriptor;
+import org.apache.hadoop.hbase.HConstants;
+import org.apache.hadoop.hbase.HRegionInfo;
+import org.apache.hadoop.hbase.HTableDescriptor;
+import org.apache.hadoop.hbase.MediumTests;
+import org.apache.hadoop.hbase.ServerName;
+import org.apache.hadoop.hbase.client.HBaseAdmin;
+import org.apache.hadoop.hbase.client.HTable;
+import org.apache.hadoop.hbase.client.Put;
+import org.apache.hadoop.hbase.regionserver.HRegionServer;
+import org.apache.hadoop.hbase.util.Bytes;
+import org.apache.hadoop.hbase.util.Writables;
+import org.junit.AfterClass;
+import org.junit.BeforeClass;
+import org.junit.Test;
+import org.junit.experimental.categories.Category;
+
+/**
+ * This tests AssignmentManager with a testing cluster.
+ */
+@Category(MediumTests.class)
+public class TestAssignmentManagerOnCluster {
+  private final static byte[] FAMILY = Bytes.toBytes("FAMILY");
+  private final static HBaseTestingUtility TEST_UTIL = new HBaseTestingUtility();
+  private final static Configuration conf = TEST_UTIL.getConfiguration();
+  private static HBaseAdmin admin;
+
+  @BeforeClass
+  public static void setUpBeforeClass() throws Exception {
+    TEST_UTIL.startMiniCluster(3);
+    admin = TEST_UTIL.getHBaseAdmin();
+  }
+
+  @AfterClass
+  public static void tearDownAfterClass() throws Exception {
+    TEST_UTIL.shutdownMiniCluster();
+  }
+
+  /**
+   * This tests region assignment
+   */
+  @Test
+  public void testAssignRegion() throws Exception {
+    String table = "testAssignRegion";
+    try {
+      HTableDescriptor desc = new HTableDescriptor(table);
+      desc.addFamily(new HColumnDescriptor(FAMILY));
+      admin.createTable(desc);
+
+      HTable meta = new HTable(conf, HConstants.META_TABLE_NAME);
+      HRegionInfo hri = new HRegionInfo(
+        desc.getName(), Bytes.toBytes("A"), Bytes.toBytes("Z"));
+      Put put = new Put(hri.getRegionName());
+      put.add(HConstants.CATALOG_FAMILY, HConstants.REGIONINFO_QUALIFIER,
+          Writables.getBytes(hri));
+      meta.put(put);
+
+      HMaster master = TEST_UTIL.getHBaseCluster().getMaster();
+      master.assignRegion(hri);
+      master.getAssignmentManager().waitForAssignment(hri);
+
+      ServerName serverName = master.getAssignmentManager().
+        getRegionStates().getRegionServerOfRegion(hri);
+      TEST_UTIL.assertRegionOnServer(hri, serverName, 200);
+    } finally {
+      TEST_UTIL.deleteTable(Bytes.toBytes(table));
+    }
+  }
+
+  /**
+   * This tests offlining a region
+   */
+  @Test
+  public void testOfflineRegion() throws Exception {
+    String table = "testOfflineRegion";
+    try {
+      HRegionInfo hri = createTableAndGetOneRegion(table);
+
+      RegionStates regionStates = TEST_UTIL.getHBaseCluster().
+        getMaster().getAssignmentManager().getRegionStates();
+      ServerName serverName = regionStates.getRegionServerOfRegion(hri);
+      TEST_UTIL.assertRegionOnServer(hri, serverName, 200);
+      admin.offline(hri.getRegionName());
+
+      long timeoutTime = System.currentTimeMillis() + 800;
+      while (true) {
+        List<HRegionInfo> regions =
+          regionStates.getRegionsOfTable(Bytes.toBytes(table));
+        if (!regions.contains(hri)) break;
+        long now = System.currentTimeMillis();
+        if (now > timeoutTime) {
+          fail("Failed to offline the region in time");
+          break;
+        }
+        Thread.sleep(10);
+      }
+      RegionState regionState = regionStates.getRegionState(hri);
+      assertTrue(regionState.isOffline());
+    } finally {
+      TEST_UTIL.deleteTable(Bytes.toBytes(table));
+    }
+  }
+
+  /**
+   * This tests moving a region
+   */
+  @Test
+  public void testMoveRegion() throws Exception {
+    String table = "testMoveRegion";
+    try {
+      HRegionInfo hri = createTableAndGetOneRegion(table);
+
+      RegionStates regionStates = TEST_UTIL.getHBaseCluster().
+        getMaster().getAssignmentManager().getRegionStates();
+      ServerName serverName = regionStates.getRegionServerOfRegion(hri);
+      ServerName destServerName = null;
+      for (int i = 0; i < 3; i++) {
+        HRegionServer destServer = TEST_UTIL.getHBaseCluster().getRegionServer(i);
+        if (!destServer.getServerName().equals(serverName)) {
+          destServerName = destServer.getServerName();
+          break;
+        }
+      }
+      assertTrue(destServerName != null
+        && !destServerName.equals(serverName));
+      TEST_UTIL.getHBaseAdmin().move(hri.getEncodedNameAsBytes(),
+        Bytes.toBytes(destServerName.getServerName()));
+
+      long timeoutTime = System.currentTimeMillis() + 800;
+      while (true) {
+        ServerName sn = regionStates.getRegionServerOfRegion(hri);
+        if (sn != null && sn.equals(destServerName)) {
+          TEST_UTIL.assertRegionOnServer(hri, sn, 200);
+          break;
+        }
+        long now = System.currentTimeMillis();
+        if (now > timeoutTime) {
+          fail("Failed to move the region in time");
+        }
+        regionStates.waitForUpdate(50);
+      }
+
+    } finally {
+      TEST_UTIL.deleteTable(Bytes.toBytes(table));
+    }
+  }
+
+  HRegionInfo createTableAndGetOneRegion(
+      final String tableName) throws IOException, InterruptedException {
+    HTableDescriptor desc = new HTableDescriptor(tableName);
+    desc.addFamily(new HColumnDescriptor(FAMILY));
+    admin.createTable(desc, Bytes.toBytes("A"), Bytes.toBytes("Z"), 5);
+
+    // wait till the table is assigned
+    HMaster master = TEST_UTIL.getHBaseCluster().getMaster();
+    long timeoutTime = System.currentTimeMillis() + 100;
+    while (true) {
+      List<HRegionInfo> regions = master.getAssignmentManager().
+        getRegionStates().getRegionsOfTable(Bytes.toBytes(tableName));
+      if (regions.size() > 3) {
+        return regions.get(2);
+      }
+      long now = System.currentTimeMillis();
+      if (now > timeoutTime) {
+        fail("Could not find an online region");
+      }
+      Thread.sleep(10);
+    }
+  }
+
+  @org.junit.Rule
+  public org.apache.hadoop.hbase.ResourceCheckerJUnitRule cu =
+    new org.apache.hadoop.hbase.ResourceCheckerJUnitRule();
+}

Propchange: hbase/trunk/hbase-server/src/test/java/org/apache/hadoop/hbase/master/TestAssignmentManagerOnCluster.java
------------------------------------------------------------------------------
    svn:eol-style = native

Modified: hbase/trunk/hbase-server/src/test/java/org/apache/hadoop/hbase/master/TestMXBean.java
URL: http://svn.apache.org/viewvc/hbase/trunk/hbase-server/src/test/java/org/apache/hadoop/hbase/master/TestMXBean.java?rev=1366438&r1=1366437&r2=1366438&view=diff
==============================================================================
--- hbase/trunk/hbase-server/src/test/java/org/apache/hadoop/hbase/master/TestMXBean.java (original)
+++ hbase/trunk/hbase-server/src/test/java/org/apache/hadoop/hbase/master/TestMXBean.java Fri Jul 27 16:34:32 2012
@@ -78,7 +78,7 @@ public class TestMXBean {
         info.getCoprocessors().length);
     Assert.assertEquals(master.getServerManager().getOnlineServersList().size(),
         info.getRegionServers().size());
-    Assert.assertEquals(master.getAssignmentManager().isRegionsInTransition(),
+    Assert.assertEquals(master.getAssignmentManager().getRegionStates().isRegionsInTransition(),
         info.getRegionsInTransition().length > 0);
     Assert.assertTrue(info.getRegionServers().size() == 4);
 

Modified: hbase/trunk/hbase-server/src/test/java/org/apache/hadoop/hbase/master/TestMasterFailover.java
URL: http://svn.apache.org/viewvc/hbase/trunk/hbase-server/src/test/java/org/apache/hadoop/hbase/master/TestMasterFailover.java?rev=1366438&r1=1366437&r2=1366438&view=diff
==============================================================================
--- hbase/trunk/hbase-server/src/test/java/org/apache/hadoop/hbase/master/TestMasterFailover.java (original)
+++ hbase/trunk/hbase-server/src/test/java/org/apache/hadoop/hbase/master/TestMasterFailover.java Fri Jul 27 16:34:32 2012
@@ -37,7 +37,6 @@ import org.apache.hadoop.fs.FileSystem;
 import org.apache.hadoop.fs.Path;
 import org.apache.hadoop.hbase.*;
 import org.apache.hadoop.hbase.executor.EventHandler.EventType;
-import org.apache.hadoop.hbase.master.AssignmentManager.RegionState;
 import org.apache.hadoop.hbase.protobuf.ProtobufUtil;
 import org.apache.hadoop.hbase.regionserver.HRegion;
 import org.apache.hadoop.hbase.regionserver.HRegionServer;
@@ -770,14 +769,14 @@ public class TestMasterFailover {
     // PENDING_OPEN and enabled
     region = enabledRegions.remove(0);
     regionsThatShouldBeOnline.add(region);
-    master.assignmentManager.regionsInTransition.put(region.getEncodedName(),
-        new RegionState(region, RegionState.State.PENDING_OPEN, 0, null));
+    master.getAssignmentManager().getRegionStates().updateRegionState(
+      region, RegionState.State.PENDING_OPEN, null);
     ZKAssign.createNodeOffline(zkw, region, master.getServerName());
     // PENDING_OPEN and disabled
     region = disabledRegions.remove(0);
     regionsThatShouldBeOffline.add(region);
-    master.assignmentManager.regionsInTransition.put(region.getEncodedName(),
-        new RegionState(region, RegionState.State.PENDING_OPEN, 0, null));
+    master.getAssignmentManager().getRegionStates().updateRegionState(
+      region, RegionState.State.PENDING_OPEN, null);
     ZKAssign.createNodeOffline(zkw, region, master.getServerName());
     // This test is bad.  It puts up a PENDING_CLOSE but doesn't say what
     // server we were PENDING_CLOSE against -- i.e. an entry in
@@ -808,7 +807,7 @@ public class TestMasterFailover {
     final long maxTime = 120000;
     boolean done = master.assignmentManager.waitUntilNoRegionsInTransition(maxTime);
     if (!done) {
-      LOG.info("rit=" + master.assignmentManager.copyRegionsInTransition());
+      LOG.info("rit=" + master.getAssignmentManager().getRegionStates().getRegionsInTransition());
     }
     long elapsed = System.currentTimeMillis() - now;
     assertTrue("Elapsed=" + elapsed + ", maxTime=" + maxTime + ", done=" + done,

Modified: hbase/trunk/hbase-server/src/test/java/org/apache/hadoop/hbase/master/TestMasterStatusServlet.java
URL: http://svn.apache.org/viewvc/hbase/trunk/hbase-server/src/test/java/org/apache/hadoop/hbase/master/TestMasterStatusServlet.java?rev=1366438&r1=1366437&r2=1366438&view=diff
==============================================================================
--- hbase/trunk/hbase-server/src/test/java/org/apache/hadoop/hbase/master/TestMasterStatusServlet.java (original)
+++ hbase/trunk/hbase-server/src/test/java/org/apache/hadoop/hbase/master/TestMasterStatusServlet.java Fri Jul 27 16:34:32 2012
@@ -33,7 +33,6 @@ import java.util.regex.Pattern;
 import org.apache.hadoop.conf.Configuration;
 import org.apache.hadoop.hbase.*;
 import org.apache.hadoop.hbase.client.HBaseAdmin;
-import org.apache.hadoop.hbase.master.AssignmentManager.RegionState;
 import org.apache.hadoop.hbase.util.Bytes;
 import org.apache.hadoop.hbase.zookeeper.ZooKeeperWatcher;
 import org.apache.hadoop.hbase.tmpl.master.AssignmentManagerStatusTmpl;
@@ -66,11 +65,11 @@ public class TestMasterStatusServlet {
   @Before
   public void setupBasicMocks() {
     conf = HBaseConfiguration.create();
-    
+
     master = Mockito.mock(HMaster.class);
     Mockito.doReturn(FAKE_HOST).when(master).getServerName();
     Mockito.doReturn(conf).when(master).getConfiguration();
-    
+
     // Fake serverManager
     ServerManager serverManager = Mockito.mock(ServerManager.class);
     Mockito.doReturn(1.0).when(serverManager).getAverageLoad();
@@ -78,13 +77,15 @@ public class TestMasterStatusServlet {
 
     // Fake AssignmentManager and RIT
     AssignmentManager am = Mockito.mock(AssignmentManager.class);
+    RegionStates rs = Mockito.mock(RegionStates.class);
     NavigableMap<String, RegionState> regionsInTransition =
       Maps.newTreeMap();
     regionsInTransition.put("r1",
-        new RegionState(FAKE_HRI, RegionState.State.CLOSING, 12345L, FAKE_HOST));
-    Mockito.doReturn(regionsInTransition).when(am).copyRegionsInTransition();
+      new RegionState(FAKE_HRI, RegionState.State.CLOSING, 12345L, FAKE_HOST));
+    Mockito.doReturn(rs).when(am).getRegionStates();
+    Mockito.doReturn(regionsInTransition).when(rs).getRegionsInTransition();
     Mockito.doReturn(am).when(master).getAssignmentManager();
-    
+
     // Fake ZKW
     ZooKeeperWatcher zkw = Mockito.mock(ZooKeeperWatcher.class);
     Mockito.doReturn("fakequorum").when(zkw).getQuorum();
@@ -93,7 +94,6 @@ public class TestMasterStatusServlet {
     // Mock admin
     admin = Mockito.mock(HBaseAdmin.class); 
   }
-  
 
   private void setupMockTables() throws IOException {
     HTableDescriptor tables[] = new HTableDescriptor[] {
@@ -153,7 +153,8 @@ public class TestMasterStatusServlet {
   @Test
   public void testAssignmentManagerTruncatedList() throws IOException {
     AssignmentManager am = Mockito.mock(AssignmentManager.class);
-    
+    RegionStates rs = Mockito.mock(RegionStates.class);
+
     // Add 100 regions as in-transition
     NavigableMap<String, RegionState> regionsInTransition =
       Maps.newTreeMap();
@@ -161,14 +162,15 @@ public class TestMasterStatusServlet {
       HRegionInfo hri = new HRegionInfo(FAKE_TABLE.getName(),
           new byte[]{i}, new byte[]{(byte) (i+1)});
       regionsInTransition.put(hri.getEncodedName(),
-          new RegionState(hri, RegionState.State.CLOSING, 12345L, FAKE_HOST));
+        new RegionState(hri, RegionState.State.CLOSING, 12345L, FAKE_HOST));
     }
     // Add META in transition as well
     regionsInTransition.put(
         HRegionInfo.FIRST_META_REGIONINFO.getEncodedName(),
         new RegionState(HRegionInfo.FIRST_META_REGIONINFO,
                         RegionState.State.CLOSING, 12345L, FAKE_HOST));
-    Mockito.doReturn(regionsInTransition).when(am).copyRegionsInTransition();
+    Mockito.doReturn(rs).when(am).getRegionStates();
+    Mockito.doReturn(regionsInTransition).when(rs).getRegionsInTransition();
 
     // Render to a string
     StringWriter sw = new StringWriter();

Modified: hbase/trunk/hbase-server/src/test/java/org/apache/hadoop/hbase/master/TestOpenedRegionHandler.java
URL: http://svn.apache.org/viewvc/hbase/trunk/hbase-server/src/test/java/org/apache/hadoop/hbase/master/TestOpenedRegionHandler.java?rev=1366438&r1=1366437&r2=1366438&view=diff
==============================================================================
--- hbase/trunk/hbase-server/src/test/java/org/apache/hadoop/hbase/master/TestOpenedRegionHandler.java (original)
+++ hbase/trunk/hbase-server/src/test/java/org/apache/hadoop/hbase/master/TestOpenedRegionHandler.java Fri Jul 27 16:34:32 2012
@@ -32,7 +32,6 @@ import org.apache.commons.logging.LogFac
 import org.apache.hadoop.conf.Configuration;
 import org.apache.hadoop.hbase.*;
 import org.apache.hadoop.hbase.executor.EventHandler.EventType;
-import org.apache.hadoop.hbase.master.AssignmentManager.RegionState;
 import org.apache.hadoop.hbase.master.handler.OpenedRegionHandler;
 import org.apache.hadoop.hbase.regionserver.HRegion;
 import org.apache.hadoop.hbase.regionserver.HRegionServer;
@@ -124,9 +123,12 @@ public class TestOpenedRegionHandler {
       region = HRegion.createHRegion(hri, TEST_UTIL.getDataTestDir(), TEST_UTIL.getConfiguration(), htd);
       assertNotNull(region);
       AssignmentManager am = Mockito.mock(AssignmentManager.class);
-      when(am.isRegionInTransition(hri)).thenReturn(
-          new RegionState(region.getRegionInfo(), RegionState.State.OPEN,
-              System.currentTimeMillis(), server.getServerName()));
+      RegionStates rsm = Mockito.mock(RegionStates.class);
+      Mockito.doReturn(rsm).when(am).getRegionStates();
+      when(rsm.isRegionInTransition(hri)).thenReturn(false);
+      when(rsm.getRegionState(hri)).thenReturn(
+        new RegionState(region.getRegionInfo(), RegionState.State.OPEN,
+          System.currentTimeMillis(), server.getServerName()));
       // create a node with OPENED state
       zkw = HBaseTestingUtility.createAndForceNodeToOpenedState(TEST_UTIL,
           region, server.getServerName());

Modified: hbase/trunk/hbase-server/src/test/java/org/apache/hadoop/hbase/regionserver/TestSplitTransactionOnCluster.java
URL: http://svn.apache.org/viewvc/hbase/trunk/hbase-server/src/test/java/org/apache/hadoop/hbase/regionserver/TestSplitTransactionOnCluster.java?rev=1366438&r1=1366437&r2=1366438&view=diff
==============================================================================
--- hbase/trunk/hbase-server/src/test/java/org/apache/hadoop/hbase/regionserver/TestSplitTransactionOnCluster.java (original)
+++ hbase/trunk/hbase-server/src/test/java/org/apache/hadoop/hbase/regionserver/TestSplitTransactionOnCluster.java Fri Jul 27 16:34:32 2012
@@ -436,7 +436,7 @@ public class TestSplitTransactionOnClust
       hri.setOffline(true);
       hri.setSplit(true);
       ServerName regionServerOfRegion = master.getAssignmentManager()
-          .getRegionServerOfRegion(hri);
+        .getRegionStates().getRegionServerOfRegion(hri);
       assertTrue(regionServerOfRegion != null);
 
     } finally {
@@ -515,7 +515,7 @@ public class TestSplitTransactionOnClust
       hri.setOffline(true);
       hri.setSplit(true);
       ServerName regionServerOfRegion = master.getAssignmentManager()
-          .getRegionServerOfRegion(hri);
+        .getRegionStates().getRegionServerOfRegion(hri);
       assertTrue(regionServerOfRegion == null);
     } finally {
       // Set this flag back.

Modified: hbase/trunk/hbase-server/src/test/java/org/apache/hadoop/hbase/regionserver/wal/TestWALReplay.java
URL: http://svn.apache.org/viewvc/hbase/trunk/hbase-server/src/test/java/org/apache/hadoop/hbase/regionserver/wal/TestWALReplay.java?rev=1366438&r1=1366437&r2=1366438&view=diff
==============================================================================
--- hbase/trunk/hbase-server/src/test/java/org/apache/hadoop/hbase/regionserver/wal/TestWALReplay.java (original)
+++ hbase/trunk/hbase-server/src/test/java/org/apache/hadoop/hbase/regionserver/wal/TestWALReplay.java Fri Jul 27 16:34:32 2012
@@ -45,7 +45,6 @@ import org.apache.hadoop.hbase.client.Sc
 import org.apache.hadoop.hbase.io.hfile.HFile;
 import org.apache.hadoop.hbase.master.HMaster;
 import org.apache.hadoop.hbase.monitoring.MonitoredTask;
-import org.apache.hadoop.hbase.protobuf.RequestConverter;
 import org.apache.hadoop.hbase.regionserver.FlushRequester;
 import org.apache.hadoop.hbase.regionserver.HRegion;
 import org.apache.hadoop.hbase.regionserver.HRegionServer;
@@ -55,7 +54,6 @@ import org.apache.hadoop.hbase.util.Byte
 import org.apache.hadoop.hbase.util.EnvironmentEdge;
 import org.apache.hadoop.hbase.util.EnvironmentEdgeManager;
 import org.apache.hadoop.hbase.util.Pair;
-import org.apache.hadoop.hbase.util.Strings;
 import org.junit.After;
 import org.junit.AfterClass;
 import org.junit.Before;
@@ -212,8 +210,12 @@ public class TestWALReplay {
         Bytes.toBytes(destServer.getServerName().getServerName()));
     while (true) {
       ServerName serverName = master.getAssignmentManager()
-          .getRegionServerOfRegion(destRegion.getRegionInfo());
-      if (serverName != null && serverName.equals(destServer.getServerName())) break;
+        .getRegionStates().getRegionServerOfRegion(destRegion.getRegionInfo());
+      if (serverName != null && serverName.equals(destServer.getServerName())) {
+        TEST_UTIL.assertRegionOnServer(
+          destRegion.getRegionInfo(), serverName, 200);
+        break;
+      }
       Thread.sleep(10);
     }
   }
@@ -709,12 +711,10 @@ public class TestWALReplay {
   // Flusher used in this test.  Keep count of how often we are called and
   // actually run the flush inside here.
   class TestFlusher implements FlushRequester {
-    private int count = 0;
     private HRegion r;
 
     @Override
     public void requestFlush(HRegion region) {
-      count++;
       try {
         r.flushcache();
       } catch (IOException e) {

Modified: hbase/trunk/hbase-server/src/test/java/org/apache/hadoop/hbase/util/TestHBaseFsck.java
URL: http://svn.apache.org/viewvc/hbase/trunk/hbase-server/src/test/java/org/apache/hadoop/hbase/util/TestHBaseFsck.java?rev=1366438&r1=1366437&r2=1366438&view=diff
==============================================================================
--- hbase/trunk/hbase-server/src/test/java/org/apache/hadoop/hbase/util/TestHBaseFsck.java (original)
+++ hbase/trunk/hbase-server/src/test/java/org/apache/hadoop/hbase/util/TestHBaseFsck.java Fri Jul 27 16:34:32 2012
@@ -63,12 +63,14 @@ import org.apache.hadoop.hbase.client.Re
 import org.apache.hadoop.hbase.client.ResultScanner;
 import org.apache.hadoop.hbase.client.Scan;
 import org.apache.hadoop.hbase.executor.EventHandler.EventType;
+import org.apache.hadoop.hbase.master.AssignmentManager;
 import org.apache.hadoop.hbase.master.HMaster;
+import org.apache.hadoop.hbase.master.RegionStates;
 import org.apache.hadoop.hbase.protobuf.ProtobufUtil;
 import org.apache.hadoop.hbase.regionserver.HRegion;
 import org.apache.hadoop.hbase.regionserver.HRegionServer;
-import org.apache.hadoop.hbase.util.HBaseFsck.HbckInfo;
 import org.apache.hadoop.hbase.util.HBaseFsck.ErrorReporter.ERROR_CODE;
+import org.apache.hadoop.hbase.util.HBaseFsck.HbckInfo;
 import org.apache.hadoop.hbase.zookeeper.ZKAssign;
 import org.apache.hadoop.hbase.zookeeper.ZooKeeperWatcher;
 import org.apache.zookeeper.KeeperException;
@@ -88,7 +90,8 @@ public class TestHBaseFsck {
   private final static HBaseTestingUtility TEST_UTIL = new HBaseTestingUtility();
   private final static Configuration conf = TEST_UTIL.getConfiguration();
   private final static byte[] FAM = Bytes.toBytes("fam");
-  private final static int REGION_ONLINE_TIMEOUT = 300;
+  private final static int REGION_ONLINE_TIMEOUT = 800;
+  private static RegionStates regionStates;
 
   // for the instance, reset every test run
   private HTable tbl;
@@ -103,6 +106,10 @@ public class TestHBaseFsck {
   public static void setUpBeforeClass() throws Exception {
     TEST_UTIL.getConfiguration().setBoolean(HConstants.DISTRIBUTED_LOG_SPLITTING_KEY, false);
     TEST_UTIL.startMiniCluster(3);
+
+    AssignmentManager assignmentManager =
+      TEST_UTIL.getHBaseCluster().getMaster().getAssignmentManager();
+    regionStates = assignmentManager.getRegionStates();
   }
 
   @AfterClass
@@ -406,6 +413,8 @@ public class TestHBaseFsck {
       TEST_UTIL.getHBaseCluster().getMaster().assignRegion(hriDupe);
       TEST_UTIL.getHBaseCluster().getMaster().getAssignmentManager()
           .waitForAssignment(hriDupe);
+      ServerName server = regionStates.getRegionServerOfRegion(hriDupe);
+      TEST_UTIL.assertRegionOnServer(hriDupe, server, REGION_ONLINE_TIMEOUT);
 
       HBaseFsck hbck = doFsck(conf, false);
       assertErrors(hbck, new ERROR_CODE[] { ERROR_CODE.DUPE_STARTKEYS,
@@ -482,6 +491,8 @@ public class TestHBaseFsck {
       TEST_UTIL.getHBaseCluster().getMaster().assignRegion(hriDupe);
       TEST_UTIL.getHBaseCluster().getMaster().getAssignmentManager()
           .waitForAssignment(hriDupe);
+      ServerName server = regionStates.getRegionServerOfRegion(hriDupe);
+      TEST_UTIL.assertRegionOnServer(hriDupe, server, REGION_ONLINE_TIMEOUT);
 
       // Yikes! The assignment manager can't tell between diff between two
       // different regions with the same start/endkeys since it doesn't
@@ -531,6 +542,8 @@ public class TestHBaseFsck {
       TEST_UTIL.getHBaseCluster().getMaster().assignRegion(hriDupe);
       TEST_UTIL.getHBaseCluster().getMaster().getAssignmentManager()
           .waitForAssignment(hriDupe);
+      ServerName server = regionStates.getRegionServerOfRegion(hriDupe);
+      TEST_UTIL.assertRegionOnServer(hriDupe, server, REGION_ONLINE_TIMEOUT);
 
       HBaseFsck hbck = doFsck(conf,false);
       assertErrors(hbck, new ERROR_CODE[] { ERROR_CODE.DEGENERATE_REGION,
@@ -568,6 +581,8 @@ public class TestHBaseFsck {
       TEST_UTIL.getHBaseCluster().getMaster().assignRegion(hriOverlap);
       TEST_UTIL.getHBaseCluster().getMaster().getAssignmentManager()
           .waitForAssignment(hriOverlap);
+      ServerName server = regionStates.getRegionServerOfRegion(hriOverlap);
+      TEST_UTIL.assertRegionOnServer(hriOverlap, server, REGION_ONLINE_TIMEOUT);
 
       HBaseFsck hbck = doFsck(conf, false);
       assertErrors(hbck, new ERROR_CODE[] {
@@ -702,6 +717,8 @@ public class TestHBaseFsck {
       TEST_UTIL.getHBaseCluster().getMaster().assignRegion(hriOverlap);
       TEST_UTIL.getHBaseCluster().getMaster().getAssignmentManager()
           .waitForAssignment(hriOverlap);
+      ServerName server = regionStates.getRegionServerOfRegion(hriOverlap);
+      TEST_UTIL.assertRegionOnServer(hriOverlap, server, REGION_ONLINE_TIMEOUT);
 
       HBaseFsck hbck = doFsck(conf, false);
       assertErrors(hbck, new ERROR_CODE[] {
@@ -739,6 +756,8 @@ public class TestHBaseFsck {
       TEST_UTIL.getHBaseCluster().getMaster().assignRegion(hriOverlap);
       TEST_UTIL.getHBaseCluster().getMaster().getAssignmentManager()
           .waitForAssignment(hriOverlap);
+      ServerName server = regionStates.getRegionServerOfRegion(hriOverlap);
+      TEST_UTIL.assertRegionOnServer(hriOverlap, server, REGION_ONLINE_TIMEOUT);
 
       HBaseFsck hbck = doFsck(conf, false);
       assertErrors(hbck, new ERROR_CODE[] {
@@ -1038,9 +1057,9 @@ public class TestHBaseFsck {
 
       int iTimes = 0;
       while (true) {
-        RegionTransition rt = RegionTransition.parseFrom(ZKAssign.getData(zkw,
-            region.getEncodedName()));
-        if (rt != null && rt.getEventType() == EventType.RS_ZK_REGION_OPENED) {
+        byte[] data = ZKAssign.getData(zkw, region.getEncodedName());
+        RegionTransition rt = data == null ? null : RegionTransition.parseFrom(data);
+        if (rt == null || rt.getEventType() == EventType.RS_ZK_REGION_OPENED) {
           break;
         }
         Thread.sleep(100);