You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@hbase.apache.org by te...@apache.org on 2017/04/17 13:50:53 UTC
hbase git commit: HBASE-17902 Backport HBASE-16367 "Race between
master and region server initialization may lead to premature server abort"
to 1.3
Repository: hbase
Updated Branches:
refs/heads/branch-1.3 e46cbedfa -> 0e95c8156
HBASE-17902 Backport HBASE-16367 "Race between master and region server initialization may lead to premature server abort" to 1.3
Project: http://git-wip-us.apache.org/repos/asf/hbase/repo
Commit: http://git-wip-us.apache.org/repos/asf/hbase/commit/0e95c815
Tree: http://git-wip-us.apache.org/repos/asf/hbase/tree/0e95c815
Diff: http://git-wip-us.apache.org/repos/asf/hbase/diff/0e95c815
Branch: refs/heads/branch-1.3
Commit: 0e95c8156ac5ac507827ff5eb4504a42fa22b454
Parents: e46cbed
Author: tedyu <yu...@gmail.com>
Authored: Mon Apr 17 06:50:44 2017 -0700
Committer: tedyu <yu...@gmail.com>
Committed: Mon Apr 17 06:50:44 2017 -0700
----------------------------------------------------------------------
.../java/org/apache/hadoop/hbase/master/HMaster.java | 3 +++
.../apache/hadoop/hbase/regionserver/HRegionServer.java | 12 ++++++++++++
2 files changed, 15 insertions(+)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/hbase/blob/0e95c815/hbase-server/src/main/java/org/apache/hadoop/hbase/master/HMaster.java
----------------------------------------------------------------------
diff --git a/hbase-server/src/main/java/org/apache/hadoop/hbase/master/HMaster.java b/hbase-server/src/main/java/org/apache/hadoop/hbase/master/HMaster.java
index aed79ee..3df5342 100644
--- a/hbase-server/src/main/java/org/apache/hadoop/hbase/master/HMaster.java
+++ b/hbase-server/src/main/java/org/apache/hadoop/hbase/master/HMaster.java
@@ -35,6 +35,7 @@ import java.util.List;
import java.util.Map;
import java.util.Map.Entry;
import java.util.Set;
+import java.util.concurrent.CountDownLatch;
import java.util.concurrent.TimeUnit;
import java.util.concurrent.atomic.AtomicReference;
import java.util.regex.Pattern;
@@ -475,6 +476,7 @@ public class HMaster extends HRegionServer implements MasterServices, Server {
// Some unit tests don't need a cluster, so no zookeeper at all
if (!conf.getBoolean("hbase.testing.nocluster", false)) {
+ setInitLatch(new CountDownLatch(1));
activeMasterManager = new ActiveMasterManager(zooKeeper, this.serverName, this);
int infoPort = putUpJettyServer();
startActiveMasterManager(infoPort);
@@ -727,6 +729,7 @@ public class HMaster extends HRegionServer implements MasterServices, Server {
// publish cluster ID
status.setStatus("Publishing Cluster ID in ZooKeeper");
ZKClusterId.setClusterId(this.zooKeeper, fileSystemManager.getClusterId());
+ this.initLatch.countDown();
this.serverManager = createServerManager(this, this);
setupClusterConnection();
http://git-wip-us.apache.org/repos/asf/hbase/blob/0e95c815/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/HRegionServer.java
----------------------------------------------------------------------
diff --git a/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/HRegionServer.java b/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/HRegionServer.java
index 1ae55c9..dd8bb5b 100644
--- a/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/HRegionServer.java
+++ b/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/HRegionServer.java
@@ -44,6 +44,8 @@ import java.util.TreeSet;
import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.ConcurrentMap;
import java.util.concurrent.ConcurrentSkipListMap;
+import java.util.concurrent.CountDownLatch;
+import java.util.concurrent.TimeUnit;
import java.util.concurrent.atomic.AtomicBoolean;
import java.util.concurrent.atomic.AtomicReference;
import java.util.concurrent.locks.ReentrantReadWriteLock;
@@ -227,6 +229,7 @@ public class HRegionServer extends HasThread implements
protected MemStoreFlusher cacheFlusher;
protected HeapMemoryManager hMemManager;
+ protected CountDownLatch initLatch = null;
/**
* Cluster connection to be shared by services.
@@ -636,6 +639,10 @@ public class HRegionServer extends HasThread implements
choreService.scheduleChore(compactedFileDischarger);
}
+ protected void setInitLatch(CountDownLatch latch) {
+ this.initLatch = latch;
+ }
+
/*
* Returns true if configured hostname should be used
*/
@@ -782,6 +789,8 @@ public class HRegionServer extends HasThread implements
* @throws IOException
* @throws InterruptedException
*/
+ @edu.umd.cs.findbugs.annotations.SuppressWarnings(value="RV_RETURN_VALUE_IGNORED_BAD_PRACTICE",
+ justification="cluster Id znode read would give us correct response")
private void initializeZooKeeper() throws IOException, InterruptedException {
// Create the master address tracker, register with zk, and start it. Then
// block until a master is available. No point in starting up if no master
@@ -792,6 +801,9 @@ public class HRegionServer extends HasThread implements
// when ready.
blockAndCheckIfStopped(this.clusterStatusTracker);
+ if (this.initLatch != null) {
+ this.initLatch.await(20, TimeUnit.SECONDS);
+ }
// Retrieve clusterId
// Since cluster status is now up
// ID should have already been set by HMaster