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);
}
/**