You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@hbase.apache.org by mb...@apache.org on 2012/08/28 22:55:19 UTC
svn commit: r1378332 - in
/hbase/branches/0.89-fb/src/main/java/org/apache/hadoop/hbase:
master/RegionManager.java zookeeper/LegacyRootZNodeUpdater.java
Author: mbautin
Date: Tue Aug 28 20:55:18 2012
New Revision: 1378332
URL: http://svn.apache.org/viewvc?rev=1378332&view=rev
Log:
[master] [89-fb] HMaster shouldn't read /hbase/root-region-server-complete every second
Author: avf
Summary:
After the new master failover design, LegacyRootZNodeUpdater in
HMaster would read /hbase/root-region-server-complete every
second. This is not necessary, as the only place where it is updated
is in RegionManager: simply reading it once at start and then waking
the LegacyRootZNodeUpdater thread up only if RegionManager updates
/hbase/root-region-server-complete should suffice.
Test Plan:
Unit test, test master failover
Revert Plan:
Reviewers: kannan, kranganathan, mbautin, pkhemani
Reviewed By: kannan
CC: hbase-eng@, aaiyer
Differential Revision: https://phabricator.fb.com/D549793
Task ID: 1383655
Modified:
hbase/branches/0.89-fb/src/main/java/org/apache/hadoop/hbase/master/RegionManager.java
hbase/branches/0.89-fb/src/main/java/org/apache/hadoop/hbase/zookeeper/LegacyRootZNodeUpdater.java
Modified: hbase/branches/0.89-fb/src/main/java/org/apache/hadoop/hbase/master/RegionManager.java
URL: http://svn.apache.org/viewvc/hbase/branches/0.89-fb/src/main/java/org/apache/hadoop/hbase/master/RegionManager.java?rev=1378332&r1=1378331&r2=1378332&view=diff
==============================================================================
--- hbase/branches/0.89-fb/src/main/java/org/apache/hadoop/hbase/master/RegionManager.java (original)
+++ hbase/branches/0.89-fb/src/main/java/org/apache/hadoop/hbase/master/RegionManager.java Tue Aug 28 20:55:18 2012
@@ -69,7 +69,7 @@ import org.apache.hadoop.io.Text;
public class RegionManager {
protected static final Log LOG = LogFactory.getLog(RegionManager.class);
- private AtomicReference<HServerInfo> rootRegionLocation =
+ private final AtomicReference<HServerInfo> rootRegionLocation =
new AtomicReference<HServerInfo>(null);
private final RootScanner rootScannerThread;
@@ -226,7 +226,10 @@ public class RegionManager {
void unsetRootRegion() {
synchronized (regionsInTransition) {
- rootRegionLocation.set(null);
+ synchronized (rootRegionLocation) {
+ rootRegionLocation.set(null);
+ rootRegionLocation.notifyAll();
+ }
regionsInTransition.remove(
HRegionInfo.ROOT_REGIONINFO.getRegionNameAsString());
LOG.info("-ROOT- region unset (but not set to be reassigned)");
Modified: hbase/branches/0.89-fb/src/main/java/org/apache/hadoop/hbase/zookeeper/LegacyRootZNodeUpdater.java
URL: http://svn.apache.org/viewvc/hbase/branches/0.89-fb/src/main/java/org/apache/hadoop/hbase/zookeeper/LegacyRootZNodeUpdater.java?rev=1378332&r1=1378331&r2=1378332&view=diff
==============================================================================
--- hbase/branches/0.89-fb/src/main/java/org/apache/hadoop/hbase/zookeeper/LegacyRootZNodeUpdater.java (original)
+++ hbase/branches/0.89-fb/src/main/java/org/apache/hadoop/hbase/zookeeper/LegacyRootZNodeUpdater.java Tue Aug 28 20:55:18 2012
@@ -20,22 +20,24 @@ import org.apache.hadoop.hbase.HServerIn
import org.apache.hadoop.hbase.StopStatus;
import org.apache.hadoop.hbase.util.HasThread;
+import java.util.concurrent.atomic.AtomicReference;
+
/**
- * A background thread that wakes up frequently and writes the legacy root region location znode
- * (host:port only, no server start code).
+ * A background thread that wakes up frequently and writes the legacy root
+ * region location znode (host:port only, no server start code).
*/
public class LegacyRootZNodeUpdater extends HasThread {
private static final int WAIT_MS = 1000;
-
+
private ZooKeeperWrapper zkw;
private StopStatus stopped;
- private Object waitOn;
+ private final AtomicReference<HServerInfo> rootRegionServerInfo;
public LegacyRootZNodeUpdater(ZooKeeperWrapper zkw, StopStatus stopped,
- Object waitOn) {
+ AtomicReference<HServerInfo> rootRegionServerInfo) {
this.zkw = zkw;
- this.waitOn = waitOn;
+ this.rootRegionServerInfo = rootRegionServerInfo;
this.stopped = stopped;
}
@@ -44,8 +46,8 @@ public class LegacyRootZNodeUpdater exte
Thread.currentThread().setName(LegacyRootZNodeUpdater.class.getName());
HServerInfo prevRootLocation = null;
boolean firstUpdate = true;
- while (!stopped.isStopped()) {
- HServerInfo rootLocation = zkw.readRootRegionServerInfo();
+ while (!stopped.isStopped()) {
+ HServerInfo rootLocation = rootRegionServerInfo.get();
if (firstUpdate ||
(prevRootLocation != rootLocation && // check that they are not both null
(rootLocation == null || // this means prevRootLocation != null, so they are different
@@ -53,11 +55,11 @@ public class LegacyRootZNodeUpdater exte
zkw.writeLegacyRootRegionLocation(rootLocation);
prevRootLocation = rootLocation;
}
- try {
- synchronized (waitOn) {
- waitOn.wait(WAIT_MS);
- }
- } catch (InterruptedException ex) {
+ try {
+ synchronized (rootRegionServerInfo) {
+ rootRegionServerInfo.wait(WAIT_MS);
+ }
+ } catch (InterruptedException ex) {
// Ignore. We will only stop if the master is shutting down.
}
firstUpdate = false;