Author: tedyu
Date: Mon Sep 19 17:21:32 2011
New Revision: 1172718

URL: http://svn.apache.org/viewvc?rev=1172718&view=rev
Log:
HBASE-4429  Provide synchronous balanceSwitch()

Modified:
    hbase/trunk/CHANGES.txt
    hbase/trunk/src/main/java/org/apache/hadoop/hbase/ipc/HMasterInterface.java
    hbase/trunk/src/main/java/org/apache/hadoop/hbase/master/HMaster.java

Modified: hbase/trunk/CHANGES.txt
URL: 
http://svn.apache.org/viewvc/hbase/trunk/CHANGES.txt?rev=1172718&r1=1172717&r2=1172718&view=diff
==============================================================================
--- hbase/trunk/CHANGES.txt (original)
+++ hbase/trunk/CHANGES.txt Mon Sep 19 17:21:32 2011
@@ -536,6 +536,7 @@ Release 0.91.0 - Unreleased
    HBASE-4296  Deprecate HTable[Interface].getRowOrBefore(...) (Lars Hofhansl)
    HBASE-2195  Support cyclic replication (Lars Hofhansl)
    HBASE-2196  Support more than one slave cluster (Lars Hofhansl)
+   HBASE-4429  Provide synchronous balanceSwitch()
 
   NEW FEATURES
    HBASE-2001  Coprocessors: Colocate user code with regions (Mingjie Lai via

Modified: 
hbase/trunk/src/main/java/org/apache/hadoop/hbase/ipc/HMasterInterface.java
URL: 
http://svn.apache.org/viewvc/hbase/trunk/src/main/java/org/apache/hadoop/hbase/ipc/HMasterInterface.java?rev=1172718&r1=1172717&r2=1172718&view=diff
==============================================================================
--- hbase/trunk/src/main/java/org/apache/hadoop/hbase/ipc/HMasterInterface.java 
(original)
+++ hbase/trunk/src/main/java/org/apache/hadoop/hbase/ipc/HMasterInterface.java 
Mon Sep 19 17:21:32 2011
@@ -231,6 +231,14 @@ public interface HMasterInterface extend
   public boolean balanceSwitch(final boolean b);
 
   /**
+   * Turn the load balancer on or off.
+   * It waits until current balance() call, if outstanding, to return.
+   * @param b If true, enable balancer. If false, disable balancer.
+   * @return Previous balancer value
+   */
+  public boolean synchronousBalanceSwitch(final boolean b);
+
+  /**
    * Get array of all HTDs.
    * @return array of HTableDescriptor
    */

Modified: hbase/trunk/src/main/java/org/apache/hadoop/hbase/master/HMaster.java
URL: 
http://svn.apache.org/viewvc/hbase/trunk/src/main/java/org/apache/hadoop/hbase/master/HMaster.java?rev=1172718&r1=1172717&r2=1172718&view=diff
==============================================================================
--- hbase/trunk/src/main/java/org/apache/hadoop/hbase/master/HMaster.java 
(original)
+++ hbase/trunk/src/main/java/org/apache/hadoop/hbase/master/HMaster.java Mon 
Sep 19 17:21:32 2011
@@ -876,23 +876,48 @@ implements HMasterInterface, HMasterRegi
     return balancerRan;
   }
 
-  @Override
-  public boolean balanceSwitch(final boolean b) {
+  enum BalanceSwitchMode {
+    SYNC,
+    ASYNC
+  }
+  /**
+   * Assigns balancer switch according to BalanceSwitchMode
+   * @param b new balancer switch
+   * @param mode BalanceSwitchMode
+   * @return old balancer switch
+   */
+  public boolean switchBalancer(final boolean b, BalanceSwitchMode mode) {
     boolean oldValue = this.balanceSwitch;
     boolean newValue = b;
     try {
       if (this.cpHost != null) {
         newValue = this.cpHost.preBalanceSwitch(newValue);
       }
-      this.balanceSwitch = newValue;
-      LOG.info("Balance=" + newValue);
+      if (mode == BalanceSwitchMode.SYNC) {
+        synchronized (this.balancer) {        
+          this.balanceSwitch = newValue;
+        }
+      } else {
+        this.balanceSwitch = newValue;        
+      }
+      LOG.info("BalanceSwitch=" + newValue);
       if (this.cpHost != null) {
         this.cpHost.postBalanceSwitch(oldValue, newValue);
       }
     } catch (IOException ioe) {
       LOG.warn("Error flipping balance switch", ioe);
     }
-    return oldValue;
+    return oldValue;    
+  }
+  
+  @Override
+  public boolean synchronousBalanceSwitch(final boolean b) {
+    return switchBalancer(b, BalanceSwitchMode.SYNC);
+  }
+  
+  @Override
+  public boolean balanceSwitch(final boolean b) {
+    return switchBalancer(b, BalanceSwitchMode.ASYNC);
   }
 
   /**


Reply via email to