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/07/19 00:01:14 UTC
svn commit: r1363139 - in /hbase/branches/0.89-fb/src:
main/java/org/apache/hadoop/hbase/master/
test/java/org/apache/hadoop/hbase/master/
Author: mbautin
Date: Wed Jul 18 22:01:14 2012
New Revision: 1363139
URL: http://svn.apache.org/viewvc?rev=1363139&view=rev
Log:
[master] do not process ops from dead servers
Author: pkhemani
Summary:
if the master has already processed death of a region server then it should not process any other messages from that server.
The shutdown processing takes care of (hopefully) all the region specific processing.
Test Plan: running existing unit tests
Reviewers: kranganathan, mbautin
Reviewed By: mbautin
CC: hbase-eng@
Differential Revision: https://phabricator.fb.com/D522392
Task ID: 1177836
Modified:
hbase/branches/0.89-fb/src/main/java/org/apache/hadoop/hbase/master/HMaster.java
hbase/branches/0.89-fb/src/main/java/org/apache/hadoop/hbase/master/ProcessRegionClose.java
hbase/branches/0.89-fb/src/main/java/org/apache/hadoop/hbase/master/ProcessRegionOpen.java
hbase/branches/0.89-fb/src/main/java/org/apache/hadoop/hbase/master/ProcessRegionStatusChange.java
hbase/branches/0.89-fb/src/main/java/org/apache/hadoop/hbase/master/ProcessServerShutdown.java
hbase/branches/0.89-fb/src/main/java/org/apache/hadoop/hbase/master/RegionServerOperation.java
hbase/branches/0.89-fb/src/main/java/org/apache/hadoop/hbase/master/RegionServerOperationQueue.java
hbase/branches/0.89-fb/src/main/java/org/apache/hadoop/hbase/master/ServerManager.java
hbase/branches/0.89-fb/src/test/java/org/apache/hadoop/hbase/master/TestRegionServerOperationQueue.java
Modified: hbase/branches/0.89-fb/src/main/java/org/apache/hadoop/hbase/master/HMaster.java
URL: http://svn.apache.org/viewvc/hbase/branches/0.89-fb/src/main/java/org/apache/hadoop/hbase/master/HMaster.java?rev=1363139&r1=1363138&r2=1363139&view=diff
==============================================================================
--- hbase/branches/0.89-fb/src/main/java/org/apache/hadoop/hbase/master/HMaster.java (original)
+++ hbase/branches/0.89-fb/src/main/java/org/apache/hadoop/hbase/master/HMaster.java Wed Jul 18 22:01:14 2012
@@ -404,13 +404,15 @@ public class HMaster extends HasThread i
detectClusterStartup();
isActiveMaster = true;
- this.regionServerOperationQueue =
- new RegionServerOperationQueue(this.conf, getClosedStatus());
-
synchronized(this) {
serverManager = new ServerManager(this);
}
+ this.regionServerOperationQueue =
+ new RegionServerOperationQueue(this.conf, serverManager,
+ getClosedStatus());
+
+
// Start the unassigned watcher - which will create the unassigned region
// in ZK. This is needed before RegionManager() constructor tries to assign
// the root region.
Modified: hbase/branches/0.89-fb/src/main/java/org/apache/hadoop/hbase/master/ProcessRegionClose.java
URL: http://svn.apache.org/viewvc/hbase/branches/0.89-fb/src/main/java/org/apache/hadoop/hbase/master/ProcessRegionClose.java?rev=1363139&r1=1363138&r2=1363139&view=diff
==============================================================================
--- hbase/branches/0.89-fb/src/main/java/org/apache/hadoop/hbase/master/ProcessRegionClose.java (original)
+++ hbase/branches/0.89-fb/src/main/java/org/apache/hadoop/hbase/master/ProcessRegionClose.java Wed Jul 18 22:01:14 2012
@@ -42,10 +42,11 @@ public class ProcessRegionClose extends
* @param offlineRegion if true, set the region to offline in meta
* @param reassignRegion if true, region is to be reassigned
*/
- public ProcessRegionClose(HMaster master, HRegionInfo regionInfo,
+ public ProcessRegionClose(HMaster master, String serverName,
+ HRegionInfo regionInfo,
boolean offlineRegion, boolean reassignRegion) {
- super(master, regionInfo);
+ super(master, serverName, regionInfo);
this.offlineRegion = offlineRegion;
this.reassignRegion = reassignRegion;
}
@@ -53,7 +54,8 @@ public class ProcessRegionClose extends
@Override
public String toString() {
return "ProcessRegionClose of " + this.regionInfo.getRegionNameAsString() +
- ", " + this.offlineRegion + ", reassign: " + this.reassignRegion;
+ ", " + this.offlineRegion + ", reassign: " + this.reassignRegion +
+ " from server " + this.serverName;
}
@Override
Modified: hbase/branches/0.89-fb/src/main/java/org/apache/hadoop/hbase/master/ProcessRegionOpen.java
URL: http://svn.apache.org/viewvc/hbase/branches/0.89-fb/src/main/java/org/apache/hadoop/hbase/master/ProcessRegionOpen.java?rev=1363139&r1=1363138&r2=1363139&view=diff
==============================================================================
--- hbase/branches/0.89-fb/src/main/java/org/apache/hadoop/hbase/master/ProcessRegionOpen.java (original)
+++ hbase/branches/0.89-fb/src/main/java/org/apache/hadoop/hbase/master/ProcessRegionOpen.java Wed Jul 18 22:01:14 2012
@@ -45,7 +45,7 @@ public class ProcessRegionOpen extends P
*/
public ProcessRegionOpen(HMaster master, HServerInfo info,
HRegionInfo regionInfo) {
- super(master, regionInfo);
+ super(master, info.getServerName(), regionInfo);
if (info == null) {
throw new NullPointerException("HServerInfo cannot be null; " +
"hbase-958 debugging");
@@ -55,7 +55,8 @@ public class ProcessRegionOpen extends P
@Override
public String toString() {
- return "PendingOpenOperation from " + serverInfo.getServerName();
+ return "PendingOpenOperation from " + serverInfo.getServerName() +
+ " for region " + this.regionInfo.getRegionNameAsString();
}
@Override
Modified: hbase/branches/0.89-fb/src/main/java/org/apache/hadoop/hbase/master/ProcessRegionStatusChange.java
URL: http://svn.apache.org/viewvc/hbase/branches/0.89-fb/src/main/java/org/apache/hadoop/hbase/master/ProcessRegionStatusChange.java?rev=1363139&r1=1363138&r2=1363139&view=diff
==============================================================================
--- hbase/branches/0.89-fb/src/main/java/org/apache/hadoop/hbase/master/ProcessRegionStatusChange.java (original)
+++ hbase/branches/0.89-fb/src/main/java/org/apache/hadoop/hbase/master/ProcessRegionStatusChange.java Wed Jul 18 22:01:14 2012
@@ -36,8 +36,9 @@ abstract class ProcessRegionStatusChange
* @param master the master
* @param regionInfo region info
*/
- public ProcessRegionStatusChange(HMaster master, HRegionInfo regionInfo) {
- super(master);
+ public ProcessRegionStatusChange(HMaster master, String serverName,
+ HRegionInfo regionInfo) {
+ super(master, serverName);
this.regionInfo = regionInfo;
this.isMetaTable = regionInfo.isMetaTable();
}
Modified: hbase/branches/0.89-fb/src/main/java/org/apache/hadoop/hbase/master/ProcessServerShutdown.java
URL: http://svn.apache.org/viewvc/hbase/branches/0.89-fb/src/main/java/org/apache/hadoop/hbase/master/ProcessServerShutdown.java?rev=1363139&r1=1363138&r2=1363139&view=diff
==============================================================================
--- hbase/branches/0.89-fb/src/main/java/org/apache/hadoop/hbase/master/ProcessServerShutdown.java (original)
+++ hbase/branches/0.89-fb/src/main/java/org/apache/hadoop/hbase/master/ProcessServerShutdown.java Wed Jul 18 22:01:14 2012
@@ -77,7 +77,7 @@ class ProcessServerShutdown extends Regi
* @param serverInfo
*/
public ProcessServerShutdown(HMaster master, HServerInfo serverInfo) {
- super(master);
+ super(master, serverInfo.getServerName());
this.deadServer = serverInfo.getServerName();
this.deadServerAddress = serverInfo.getServerAddress();
this.rootRescanned = false;
Modified: hbase/branches/0.89-fb/src/main/java/org/apache/hadoop/hbase/master/RegionServerOperation.java
URL: http://svn.apache.org/viewvc/hbase/branches/0.89-fb/src/main/java/org/apache/hadoop/hbase/master/RegionServerOperation.java?rev=1363139&r1=1363138&r2=1363139&view=diff
==============================================================================
--- hbase/branches/0.89-fb/src/main/java/org/apache/hadoop/hbase/master/RegionServerOperation.java (original)
+++ hbase/branches/0.89-fb/src/main/java/org/apache/hadoop/hbase/master/RegionServerOperation.java Wed Jul 18 22:01:14 2012
@@ -41,12 +41,14 @@ abstract class RegionServerOperation imp
private long expire;
protected final HMaster master;
+ protected final String serverName; // server sent the message or task
/* How long we stay on queue.
*/
private int delay;
- protected RegionServerOperation(HMaster master) {
+ protected RegionServerOperation(HMaster master, String serverName) {
this.master = master;
+ this.serverName = serverName;
this.delay = this.master.getConfiguration().
getInt("hbase.server.thread.wakefrequency", 10 * 1000);
// Set the future time at which we expect to be released from the
Modified: hbase/branches/0.89-fb/src/main/java/org/apache/hadoop/hbase/master/RegionServerOperationQueue.java
URL: http://svn.apache.org/viewvc/hbase/branches/0.89-fb/src/main/java/org/apache/hadoop/hbase/master/RegionServerOperationQueue.java?rev=1363139&r1=1363138&r2=1363139&view=diff
==============================================================================
--- hbase/branches/0.89-fb/src/main/java/org/apache/hadoop/hbase/master/RegionServerOperationQueue.java (original)
+++ hbase/branches/0.89-fb/src/main/java/org/apache/hadoop/hbase/master/RegionServerOperationQueue.java Wed Jul 18 22:01:14 2012
@@ -94,9 +94,13 @@ public class RegionServerOperationQueue
new CopyOnWriteArraySet<RegionServerOperationListener>();
private final int threadWakeFrequency;
private final Sleeper sleeper;
+ private final ServerManager smgr;
- RegionServerOperationQueue(final Configuration c, StopStatus stop) {
- this.threadWakeFrequency = c.getInt(HConstants.THREAD_WAKE_FREQUENCY, 10 * 1000);
+ RegionServerOperationQueue(final Configuration c, ServerManager smgr,
+ StopStatus stop) {
+ this.threadWakeFrequency = c.getInt(HConstants.THREAD_WAKE_FREQUENCY,
+ 10 * 1000);
+ this.smgr = smgr;
this.stop = stop;
this.sleeper = new Sleeper(this.threadWakeFrequency, stop);
}
@@ -146,6 +150,12 @@ public class RegionServerOperationQueue
return ProcessingResultCode.NOOP;
}
+ if (!(op instanceof ProcessServerShutdown)) {
+ if (smgr.getServerInfo(op.serverName) == null) {
+ LOG.debug("Discarding RegionServerOperation because server is dead " +
+ op);
+ }
+ }
try {
if (LOG.isDebugEnabled()) {
LOG.debug("Processing todo: " + op.toString());
Modified: hbase/branches/0.89-fb/src/main/java/org/apache/hadoop/hbase/master/ServerManager.java
URL: http://svn.apache.org/viewvc/hbase/branches/0.89-fb/src/main/java/org/apache/hadoop/hbase/master/ServerManager.java?rev=1363139&r1=1363138&r2=1363139&view=diff
==============================================================================
--- hbase/branches/0.89-fb/src/main/java/org/apache/hadoop/hbase/master/ServerManager.java (original)
+++ hbase/branches/0.89-fb/src/main/java/org/apache/hadoop/hbase/master/ServerManager.java Wed Jul 18 22:01:14 2012
@@ -804,7 +804,8 @@ public class ServerManager {
// the region's state.
this.master.getRegionManager().setClosed(region.getRegionNameAsString());
RegionServerOperation op =
- new ProcessRegionClose(master, region, offlineRegion, reassignRegion);
+ new ProcessRegionClose(master, serverInfo.getServerName(),
+ region, offlineRegion, reassignRegion);
this.master.getRegionServerOperationQueue().put(op);
if (reassignRegion) {
Modified: hbase/branches/0.89-fb/src/test/java/org/apache/hadoop/hbase/master/TestRegionServerOperationQueue.java
URL: http://svn.apache.org/viewvc/hbase/branches/0.89-fb/src/test/java/org/apache/hadoop/hbase/master/TestRegionServerOperationQueue.java?rev=1363139&r1=1363138&r2=1363139&view=diff
==============================================================================
--- hbase/branches/0.89-fb/src/test/java/org/apache/hadoop/hbase/master/TestRegionServerOperationQueue.java (original)
+++ hbase/branches/0.89-fb/src/test/java/org/apache/hadoop/hbase/master/TestRegionServerOperationQueue.java Wed Jul 18 22:01:14 2012
@@ -45,7 +45,7 @@ public class TestRegionServerOperationQu
@Before
public void setUp() throws Exception {
this.conf = new Configuration();
- this.queue = new RegionServerOperationQueue(this.conf, stopStatus);
+ this.queue = new RegionServerOperationQueue(this.conf, null, stopStatus);
}
@After