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 2010/08/26 09:43:48 UTC

svn commit: r989501 - in /hbase/branches/0.90_master_rewrite/src: main/java/org/apache/hadoop/hbase/catalog/ main/java/org/apache/hadoop/hbase/master/ main/java/org/apache/hadoop/hbase/master/handler/ main/java/org/apache/hadoop/hbase/regionserver/hand...

Author: stack
Date: Thu Aug 26 07:43:48 2010
New Revision: 989501

URL: http://svn.apache.org/viewvc?rev=989501&view=rev
Log:

Redid how balancer is integrated.

Fixed some more tests.

M src/test/java/org/apache/hadoop/hbase/TestMultiParallelPut.java
  Removed unused imports. Upped retries.  This is still not right
  but is passing for now.
M src/test/java/org/apache/hadoop/hbase/master/TestZKBasedOpenCloseRegion.java
  I'd fixed infinite loop in one test but second test duplicated
  the code that made for infinite loop.
M src/test/java/org/apache/hadoop/hbase/master/TestLoadBalancer.java
  LB constructor changes args.
M src/test/java/org/apache/hadoop/hbase/mapreduce/TestHFileOutputFormat.java
  Fix this test by making it use new check if table is disabled.

Modified:
    hbase/branches/0.90_master_rewrite/src/main/java/org/apache/hadoop/hbase/catalog/CatalogTracker.java
    hbase/branches/0.90_master_rewrite/src/main/java/org/apache/hadoop/hbase/master/HMaster.java
    hbase/branches/0.90_master_rewrite/src/main/java/org/apache/hadoop/hbase/master/LoadBalancer.java
    hbase/branches/0.90_master_rewrite/src/main/java/org/apache/hadoop/hbase/master/handler/ClosedRegionHandler.java
    hbase/branches/0.90_master_rewrite/src/main/java/org/apache/hadoop/hbase/master/handler/OpenedRegionHandler.java
    hbase/branches/0.90_master_rewrite/src/main/java/org/apache/hadoop/hbase/master/handler/ServerShutdownHandler.java
    hbase/branches/0.90_master_rewrite/src/main/java/org/apache/hadoop/hbase/regionserver/handler/OpenRegionHandler.java
    hbase/branches/0.90_master_rewrite/src/test/java/org/apache/hadoop/hbase/TestMultiParallelPut.java
    hbase/branches/0.90_master_rewrite/src/test/java/org/apache/hadoop/hbase/mapreduce/TestHFileOutputFormat.java
    hbase/branches/0.90_master_rewrite/src/test/java/org/apache/hadoop/hbase/master/TestLoadBalancer.java
    hbase/branches/0.90_master_rewrite/src/test/java/org/apache/hadoop/hbase/master/TestZKBasedOpenCloseRegion.java

Modified: hbase/branches/0.90_master_rewrite/src/main/java/org/apache/hadoop/hbase/catalog/CatalogTracker.java
URL: http://svn.apache.org/viewvc/hbase/branches/0.90_master_rewrite/src/main/java/org/apache/hadoop/hbase/catalog/CatalogTracker.java?rev=989501&r1=989500&r2=989501&view=diff
==============================================================================
--- hbase/branches/0.90_master_rewrite/src/main/java/org/apache/hadoop/hbase/catalog/CatalogTracker.java (original)
+++ hbase/branches/0.90_master_rewrite/src/main/java/org/apache/hadoop/hbase/catalog/CatalogTracker.java Thu Aug 26 07:43:48 2010
@@ -385,6 +385,8 @@ public class CatalogTracker {
     if (metaHsa == null) {
       LOG.info(".META. is not assigned; continuing");
     } else if (hsi.getServerAddress().equals(metaHsa)) {
+      LOG.info(hsi.getServerName() + " carrying .META.; unsetting " +
+        ".META. location");
       result.setSecond(true);
       resetMetaLocation();
     }

Modified: hbase/branches/0.90_master_rewrite/src/main/java/org/apache/hadoop/hbase/master/HMaster.java
URL: http://svn.apache.org/viewvc/hbase/branches/0.90_master_rewrite/src/main/java/org/apache/hadoop/hbase/master/HMaster.java?rev=989501&r1=989500&r2=989501&view=diff
==============================================================================
--- hbase/branches/0.90_master_rewrite/src/main/java/org/apache/hadoop/hbase/master/HMaster.java (original)
+++ hbase/branches/0.90_master_rewrite/src/main/java/org/apache/hadoop/hbase/master/HMaster.java Thu Aug 26 07:43:48 2010
@@ -26,11 +26,14 @@ import java.lang.management.RuntimeMXBea
 import java.lang.reflect.Constructor;
 import java.lang.reflect.InvocationTargetException;
 import java.net.UnknownHostException;
+import java.util.List;
+import java.util.Map;
 import java.util.concurrent.atomic.AtomicReference;
 
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
 import org.apache.hadoop.conf.Configuration;
+import org.apache.hadoop.hbase.Chore;
 import org.apache.hadoop.hbase.ClusterStatus;
 import org.apache.hadoop.hbase.HBaseConfiguration;
 import org.apache.hadoop.hbase.HColumnDescriptor;
@@ -54,10 +57,10 @@ import org.apache.hadoop.hbase.catalog.M
 import org.apache.hadoop.hbase.catalog.MetaReader;
 import org.apache.hadoop.hbase.client.HBaseAdmin;
 import org.apache.hadoop.hbase.client.MetaScanner;
-import org.apache.hadoop.hbase.client.MetaScanner.MetaScannerVisitor;
 import org.apache.hadoop.hbase.client.Result;
 import org.apache.hadoop.hbase.client.ServerConnection;
 import org.apache.hadoop.hbase.client.ServerConnectionManager;
+import org.apache.hadoop.hbase.client.MetaScanner.MetaScannerVisitor;
 import org.apache.hadoop.hbase.executor.ExecutorService;
 import org.apache.hadoop.hbase.executor.ExecutorService.ExecutorType;
 import org.apache.hadoop.hbase.ipc.HBaseRPC;
@@ -65,6 +68,7 @@ import org.apache.hadoop.hbase.ipc.HBase
 import org.apache.hadoop.hbase.ipc.HBaseServer;
 import org.apache.hadoop.hbase.ipc.HMasterInterface;
 import org.apache.hadoop.hbase.ipc.HMasterRegionInterface;
+import org.apache.hadoop.hbase.master.LoadBalancer.RegionPlan;
 import org.apache.hadoop.hbase.master.handler.DeleteTableHandler;
 import org.apache.hadoop.hbase.master.handler.DisableTableHandler;
 import org.apache.hadoop.hbase.master.handler.EnableTableHandler;
@@ -158,7 +162,8 @@ implements HMasterInterface, HMasterRegi
   // Instance of the hbase executor service.
   ExecutorService executorService;
 
-  private LoadBalancer balancer;
+  private LoadBalancer balancer = new LoadBalancer();
+  private Chore balancerChore;
 
   /**
    * Initializes the HMaster. The steps are as follows:
@@ -300,7 +305,7 @@ implements HMasterInterface, HMasterRegi
       }
     }
     this.rpcServer.stop();
-    this.balancer.interrupt();
+    if (this.balancerChore != null) this.balancerChore.interrupt();
     this.activeMasterManager.stop();
     this.zooKeeper.close();
     this.executorService.shutdown();
@@ -427,13 +432,7 @@ implements HMasterInterface, HMasterRegi
         this.infoServer.setAttribute(MASTER, this);
         this.infoServer.start();
       }
-
-      // Start up the load balancer
-      String name = getServerName() + "-loadbalancer";
-      int period = getConfiguration().getInt("hbase.balancer.period", 300000);
-      this.balancer = new LoadBalancer(name, period, this,
-        this.assignmentManager);
-      Threads.setDaemonThreadRunning(this.balancer, name);
+      this.balancerChore = getAndStartBalancerChore(this);
 
       // Start the server last so everything else is running before we start
       // receiving requests.
@@ -454,6 +453,20 @@ implements HMasterInterface, HMasterRegi
     }
   }
 
+  private static Chore getAndStartBalancerChore(final HMaster master) {
+    String name = master.getServerName() + "-balancerChore";
+    int period = master.getConfiguration().getInt("hbase.balancer.period", 600000);
+    // Start up the load balancer chore
+    Chore chore = new Chore(name, period, master) {
+      @Override
+      protected void chore() {
+        master.balance();
+      }
+    };
+    Threads.setDaemonThreadRunning(chore, name);
+    return chore;
+  }
+
   public MapWritable regionServerStartup(final HServerInfo serverInfo)
   throws IOException {
     // Set the ip into the passed in serverInfo.  Its ip is more than likely
@@ -511,6 +524,27 @@ implements HMasterInterface, HMasterRegi
     return !isStopped();
   }
 
+  /**
+   * Run the balancer.
+   */
+  public void balance() {
+    synchronized (this.balancer) {
+      // Only allow one balance run at at time.
+      if (this.assignmentManager.isRegionsInTransition()) {
+        LOG.debug("Not running balancer because regions in transition: " +
+          this.assignmentManager.getRegionsInTransition());
+        return;
+      }
+      Map<HServerInfo, List<HRegionInfo>> assignments =
+        this.assignmentManager.getAssignments();
+      List<RegionPlan> plans = this.balancer.balanceCluster(assignments);
+      if (plans == null || plans.isEmpty()) return;
+      for (RegionPlan plan: plans) {
+        this.assignmentManager.balance(plan);
+      }
+    }
+  }
+
   public void createTable(HTableDescriptor desc, byte [][] splitKeys)
   throws IOException {
     createTable(desc, splitKeys, false);

Modified: hbase/branches/0.90_master_rewrite/src/main/java/org/apache/hadoop/hbase/master/LoadBalancer.java
URL: http://svn.apache.org/viewvc/hbase/branches/0.90_master_rewrite/src/main/java/org/apache/hadoop/hbase/master/LoadBalancer.java?rev=989501&r1=989500&r2=989501&view=diff
==============================================================================
--- hbase/branches/0.90_master_rewrite/src/main/java/org/apache/hadoop/hbase/master/LoadBalancer.java (original)
+++ hbase/branches/0.90_master_rewrite/src/main/java/org/apache/hadoop/hbase/master/LoadBalancer.java Thu Aug 26 07:43:48 2010
@@ -35,10 +35,8 @@ import org.apache.hadoop.fs.BlockLocatio
 import org.apache.hadoop.fs.FileStatus;
 import org.apache.hadoop.fs.FileSystem;
 import org.apache.hadoop.fs.Path;
-import org.apache.hadoop.hbase.Chore;
 import org.apache.hadoop.hbase.HRegionInfo;
 import org.apache.hadoop.hbase.HServerInfo;
-import org.apache.hadoop.hbase.Stoppable;
 
 /**
  * Makes decisions about the placement and movement of Regions across
@@ -56,42 +54,9 @@ import org.apache.hadoop.hbase.Stoppable
  * 
  * <p>This classes produces plans for the {@link AssignmentManager} to execute.
  */
-public class LoadBalancer extends Chore {
+public class LoadBalancer {
   private static final Log LOG = LogFactory.getLog(LoadBalancer.class);
   private static final Random rand = new Random();
-  private final AssignmentManager assignmentManager;
-
-  /**
-   * Instantiate the load balancer with the specified configuration.
-   *
-   * This sets configuration parameters to be used by the balancing algorithms
-   * and launches a background thread to perform periodic load balancing.
-   * @param stoppable
-   * @param period
-   * @param name Name for this LB thread.
-   * @param assignmentManager
-   */
-  public LoadBalancer(final String name, final int period,
-      final Stoppable stoppable, final AssignmentManager assignmentManager) {
-    super(name, period, stoppable);
-    this.assignmentManager = assignmentManager;
-  }
-
-  @Override
-  protected void chore() {
-    if (this.assignmentManager.isRegionsInTransition()) {
-      LOG.debug("Not running balancer because regions in transition: " +
-        this.assignmentManager.getRegionsInTransition());
-      return;
-    }
-    Map<HServerInfo, List<HRegionInfo>> assignments =
-      this.assignmentManager.getAssignments();
-    List<RegionPlan> plans = balanceCluster(assignments);
-    if (plans == null || plans.isEmpty()) return;
-    for (RegionPlan plan: plans) {
-      this.assignmentManager.balance(plan);
-    }
-  }
 
   /**
    * Generate a global load balancing plan according to the specified map of

Modified: hbase/branches/0.90_master_rewrite/src/main/java/org/apache/hadoop/hbase/master/handler/ClosedRegionHandler.java
URL: http://svn.apache.org/viewvc/hbase/branches/0.90_master_rewrite/src/main/java/org/apache/hadoop/hbase/master/handler/ClosedRegionHandler.java?rev=989501&r1=989500&r2=989501&view=diff
==============================================================================
--- hbase/branches/0.90_master_rewrite/src/main/java/org/apache/hadoop/hbase/master/handler/ClosedRegionHandler.java (original)
+++ hbase/branches/0.90_master_rewrite/src/main/java/org/apache/hadoop/hbase/master/handler/ClosedRegionHandler.java Thu Aug 26 07:43:48 2010
@@ -88,7 +88,7 @@ public class ClosedRegionHandler extends
 
   @Override
   public void process() {
-    LOG.debug("Handling CLOSED event with data: " + data);
+    LOG.debug("Handling CLOSED event");
     // Check if this table is being disabled or not
     if (assignmentManager.isTableOfRegionDisabled(regionInfo.getRegionName())) {
       // Disabling so should not be reassigned, just delete the CLOSED node

Modified: hbase/branches/0.90_master_rewrite/src/main/java/org/apache/hadoop/hbase/master/handler/OpenedRegionHandler.java
URL: http://svn.apache.org/viewvc/hbase/branches/0.90_master_rewrite/src/main/java/org/apache/hadoop/hbase/master/handler/OpenedRegionHandler.java?rev=989501&r1=989500&r2=989501&view=diff
==============================================================================
--- hbase/branches/0.90_master_rewrite/src/main/java/org/apache/hadoop/hbase/master/handler/OpenedRegionHandler.java (original)
+++ hbase/branches/0.90_master_rewrite/src/main/java/org/apache/hadoop/hbase/master/handler/OpenedRegionHandler.java Thu Aug 26 07:43:48 2010
@@ -85,7 +85,7 @@ public class OpenedRegionHandler extends
 
   @Override
   public void process() {
-    LOG.debug("Handling OPENED event; deleting unassigned node with data: " + data);
+    LOG.debug("Handling OPENED event; deleting unassigned node");
     // TODO: should we check if this table was disabled and get it closed?
     // Remove region from in-memory transition and unassigned node from ZK
     try {

Modified: hbase/branches/0.90_master_rewrite/src/main/java/org/apache/hadoop/hbase/master/handler/ServerShutdownHandler.java
URL: http://svn.apache.org/viewvc/hbase/branches/0.90_master_rewrite/src/main/java/org/apache/hadoop/hbase/master/handler/ServerShutdownHandler.java?rev=989501&r1=989500&r2=989501&view=diff
==============================================================================
--- hbase/branches/0.90_master_rewrite/src/main/java/org/apache/hadoop/hbase/master/handler/ServerShutdownHandler.java (original)
+++ hbase/branches/0.90_master_rewrite/src/main/java/org/apache/hadoop/hbase/master/handler/ServerShutdownHandler.java Thu Aug 26 07:43:48 2010
@@ -27,7 +27,6 @@ import org.apache.commons.logging.LogFac
 import org.apache.hadoop.hbase.HRegionInfo;
 import org.apache.hadoop.hbase.HServerInfo;
 import org.apache.hadoop.hbase.Server;
-import org.apache.hadoop.hbase.catalog.CatalogTracker;
 import org.apache.hadoop.hbase.catalog.MetaReader;
 import org.apache.hadoop.hbase.executor.EventHandler;
 import org.apache.hadoop.hbase.master.DeadServer;

Modified: hbase/branches/0.90_master_rewrite/src/main/java/org/apache/hadoop/hbase/regionserver/handler/OpenRegionHandler.java
URL: http://svn.apache.org/viewvc/hbase/branches/0.90_master_rewrite/src/main/java/org/apache/hadoop/hbase/regionserver/handler/OpenRegionHandler.java?rev=989501&r1=989500&r2=989501&view=diff
==============================================================================
--- hbase/branches/0.90_master_rewrite/src/main/java/org/apache/hadoop/hbase/regionserver/handler/OpenRegionHandler.java (original)
+++ hbase/branches/0.90_master_rewrite/src/main/java/org/apache/hadoop/hbase/regionserver/handler/OpenRegionHandler.java Thu Aug 26 07:43:48 2010
@@ -27,8 +27,6 @@ import org.apache.commons.logging.LogFac
 import org.apache.hadoop.hbase.HRegionInfo;
 import org.apache.hadoop.hbase.Server;
 import org.apache.hadoop.hbase.catalog.CatalogTracker;
-import org.apache.hadoop.hbase.catalog.MetaEditor;
-import org.apache.hadoop.hbase.catalog.RootLocationEditor;
 import org.apache.hadoop.hbase.executor.EventHandler;
 import org.apache.hadoop.hbase.regionserver.HRegion;
 import org.apache.hadoop.hbase.regionserver.RegionServerServices;

Modified: hbase/branches/0.90_master_rewrite/src/test/java/org/apache/hadoop/hbase/TestMultiParallelPut.java
URL: http://svn.apache.org/viewvc/hbase/branches/0.90_master_rewrite/src/test/java/org/apache/hadoop/hbase/TestMultiParallelPut.java?rev=989501&r1=989500&r2=989501&view=diff
==============================================================================
--- hbase/branches/0.90_master_rewrite/src/test/java/org/apache/hadoop/hbase/TestMultiParallelPut.java (original)
+++ hbase/branches/0.90_master_rewrite/src/test/java/org/apache/hadoop/hbase/TestMultiParallelPut.java Thu Aug 26 07:43:48 2010
@@ -20,9 +20,11 @@
 
 package org.apache.hadoop.hbase;
 
+import java.util.ArrayList;
+import java.util.List;
+
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
-import org.apache.hadoop.conf.Configuration;
 import org.apache.hadoop.hbase.client.Get;
 import org.apache.hadoop.hbase.client.HBaseAdmin;
 import org.apache.hadoop.hbase.client.HTable;
@@ -30,9 +32,6 @@ import org.apache.hadoop.hbase.client.Pu
 import org.apache.hadoop.hbase.client.Result;
 import org.apache.hadoop.hbase.util.Bytes;
 
-import java.util.ArrayList;
-import java.util.List;
-
 public class TestMultiParallelPut extends MultiRegionTable {
   final Log LOG = LogFactory.getLog(getClass());
   private static final byte[] VALUE = Bytes.toBytes("value");
@@ -71,6 +70,7 @@ public class TestMultiParallelPut extend
   }
 
   public void doATest(boolean doAbort) throws Exception {
+    conf.setInt("hbase.client.retries.number", 10);
     HTable table = new HTable(conf, TEST_TABLE);
     table.setAutoFlush(false);
     table.setWriteBufferSize(10 * 1024 * 1024);

Modified: hbase/branches/0.90_master_rewrite/src/test/java/org/apache/hadoop/hbase/mapreduce/TestHFileOutputFormat.java
URL: http://svn.apache.org/viewvc/hbase/branches/0.90_master_rewrite/src/test/java/org/apache/hadoop/hbase/mapreduce/TestHFileOutputFormat.java?rev=989501&r1=989500&r2=989501&view=diff
==============================================================================
--- hbase/branches/0.90_master_rewrite/src/test/java/org/apache/hadoop/hbase/mapreduce/TestHFileOutputFormat.java (original)
+++ hbase/branches/0.90_master_rewrite/src/test/java/org/apache/hadoop/hbase/mapreduce/TestHFileOutputFormat.java Thu Aug 26 07:43:48 2010
@@ -242,12 +242,12 @@ public class TestHFileOutputFormat  {
     }
     return ret;
   }
-  
+
   @Test
   public void testMRIncrementalLoad() throws Exception {
     doIncrementalLoadTest(false);
   }
-  
+
   @Test
   public void testMRIncrementalLoadWithSplit() throws Exception {
     doIncrementalLoadTest(true);
@@ -303,13 +303,12 @@ public class TestHFileOutputFormat  {
             
       // Cause regions to reopen
       admin.disableTable(TABLE_NAME);
-      while (table.getRegionsInfo().size() != 0) {
+      while (!admin.isTableDisabled(TABLE_NAME)) {
         Thread.sleep(1000);
         LOG.info("Waiting for table to disable"); 
       }
       admin.enableTable(TABLE_NAME);
       util.waitTableAvailable(TABLE_NAME, 30000);
-      
       assertEquals("Data should remain after reopening of regions",
           tableDigestBefore, util.checksumRows(table));
     } finally {
@@ -317,9 +316,7 @@ public class TestHFileOutputFormat  {
       util.shutdownMiniCluster();
     }
   }
-  
-  
-  
+
   private void runIncrementalPELoad(
       Configuration conf, HTable table, Path outDir)
   throws Exception {

Modified: hbase/branches/0.90_master_rewrite/src/test/java/org/apache/hadoop/hbase/master/TestLoadBalancer.java
URL: http://svn.apache.org/viewvc/hbase/branches/0.90_master_rewrite/src/test/java/org/apache/hadoop/hbase/master/TestLoadBalancer.java?rev=989501&r1=989500&r2=989501&view=diff
==============================================================================
--- hbase/branches/0.90_master_rewrite/src/test/java/org/apache/hadoop/hbase/master/TestLoadBalancer.java (original)
+++ hbase/branches/0.90_master_rewrite/src/test/java/org/apache/hadoop/hbase/master/TestLoadBalancer.java Thu Aug 26 07:43:48 2010
@@ -39,7 +39,6 @@ import org.apache.hadoop.hbase.HRegionIn
 import org.apache.hadoop.hbase.HServerAddress;
 import org.apache.hadoop.hbase.HServerInfo;
 import org.apache.hadoop.hbase.HTableDescriptor;
-import org.apache.hadoop.hbase.Stoppable;
 import org.apache.hadoop.hbase.master.LoadBalancer.RegionPlan;
 import org.apache.hadoop.hbase.util.Bytes;
 import org.junit.BeforeClass;
@@ -54,15 +53,7 @@ public class TestLoadBalancer {
 
   @BeforeClass
   public static void beforeAllTests() throws Exception {
-    loadBalancer = new LoadBalancer("test", 1, new Stoppable() {
-      @Override
-      public void stop(String why) {
-      }
-      @Override
-      public boolean isStopped() {
-        return false;
-      }
-    }, (AssignmentManager)null);
+    loadBalancer = new LoadBalancer();
     rand = new Random();
   }
 

Modified: hbase/branches/0.90_master_rewrite/src/test/java/org/apache/hadoop/hbase/master/TestZKBasedOpenCloseRegion.java
URL: http://svn.apache.org/viewvc/hbase/branches/0.90_master_rewrite/src/test/java/org/apache/hadoop/hbase/master/TestZKBasedOpenCloseRegion.java?rev=989501&r1=989500&r2=989501&view=diff
==============================================================================
--- hbase/branches/0.90_master_rewrite/src/test/java/org/apache/hadoop/hbase/master/TestZKBasedOpenCloseRegion.java (original)
+++ hbase/branches/0.90_master_rewrite/src/test/java/org/apache/hadoop/hbase/master/TestZKBasedOpenCloseRegion.java Thu Aug 26 07:43:48 2010
@@ -99,15 +99,7 @@ public class TestZKBasedOpenCloseRegion 
     int rsIdx = 0;
     HRegionServer regionServer =
       TEST_UTIL.getHBaseCluster().getRegionServer(rsIdx);
-    Collection<HRegionInfo> regions = regionServer.getOnlineRegions();
-    HRegionInfo hri = null;
-    for (HRegionInfo i: regions) {
-      LOG.info(i.getRegionNameAsString());
-      if (!i.isMetaRegion()) {
-        hri = i;
-        break;
-      }
-    }
+    HRegionInfo hri = getNonMetaRegion(regionServer.getOnlineRegions());
     LOG.debug("Asking RS to close region " + hri.getRegionNameAsString());
 
     AtomicBoolean closeEventProcessed = new AtomicBoolean(false);
@@ -128,23 +120,27 @@ public class TestZKBasedOpenCloseRegion 
     LOG.info("Unassign " + hri.getRegionNameAsString());
     cluster.getMaster().assignmentManager.unassign(hri);
 
-    synchronized(closeEventProcessed) {
-      closeEventProcessed.wait(3*60*1000);
+    while (!closeEventProcessed.get()) {
+      Threads.sleep(100);
     }
 
-    if (!closeEventProcessed.get()) {
-      throw new Exception("Timed out, close event not called on master.");
+    while (!reopenEventProcessed.get()) {
+      Threads.sleep(100);
     }
 
-    synchronized(reopenEventProcessed) {
-      reopenEventProcessed.wait(3*60*1000);
-    }
+    LOG.info("Done with testReOpenRegion");
+  }
 
-    if(!reopenEventProcessed.get()) {
-      throw new Exception("Timed out, open event not called on master after region close.");
+  private HRegionInfo getNonMetaRegion(final Collection<HRegionInfo> regions) {
+    HRegionInfo hri = null;
+    for (HRegionInfo i: regions) {
+      LOG.info(i.getRegionNameAsString());
+      if (!i.isMetaRegion()) {
+        hri = i;
+        break;
+      }
     }
-
-    LOG.info("\n\n\nDone with test, RS informed master successfully.\n\n\n");
+    return hri;
   }
 
   public static class ReopenEventListener implements EventHandlerListener {
@@ -198,13 +194,7 @@ public class TestZKBasedOpenCloseRegion 
 
     int rsIdx = 0;
     HRegionServer regionServer = TEST_UTIL.getHBaseCluster().getRegionServer(rsIdx);
-    Collection<HRegionInfo> regions = regionServer.getOnlineRegions();
-    HRegionInfo hri;
-    while((hri = regions.iterator().next()) != null) {
-      if(!hri.isMetaRegion() && !hri.isRootRegion()) {
-        break;
-      }
-    }
+    HRegionInfo hri = getNonMetaRegion(regionServer.getOnlineRegions());
     LOG.debug("Asking RS to close region " + hri.getRegionNameAsString());
 
     AtomicBoolean closeEventProcessed = new AtomicBoolean(false);
@@ -215,16 +205,10 @@ public class TestZKBasedOpenCloseRegion 
 
     cluster.getMaster().assignmentManager.unassign(hri);
 
-    synchronized(closeEventProcessed) {
-      // wait for 3 minutes
-      closeEventProcessed.wait(3*60*1000);
-    }
-    if(!closeEventProcessed.get()) {
-      throw new Exception("Timed out, close event not called on master.");
-    }
-    else {
-      LOG.info("Done with test, RS informed master successfully.");
+    while (!closeEventProcessed.get()) {
+      Threads.sleep(100);
     }
+    LOG.info("Done with testCloseRegion");
   }
 
   public static class CloseRegionEventListener implements EventHandlerListener {
@@ -244,11 +228,11 @@ public class TestZKBasedOpenCloseRegion 
       if(event.getEventType() == EventType.RS2ZK_REGION_CLOSED) {
         LOG.info("Finished processing CLOSE REGION");
         TotesHRegionInfo hriCarrier = (TotesHRegionInfo)event;
-        if(regionToClose.equals(hriCarrier.getHRegionInfo().getRegionNameAsString())) {
+        if (regionToClose.equals(hriCarrier.getHRegionInfo().getRegionNameAsString())) {
+          LOG.info("Setting closeEventProcessed flag");
           closeEventProcessed.set(true);
-        }
-        synchronized(closeEventProcessed) {
-          closeEventProcessed.notifyAll();
+        } else {
+          LOG.info("Region to close didn't match");
         }
       }
     }