### Eclipse Workspace Patch 1.0
#P apache-trunk
Index: hbase-server/src/test/java/org/apache/hadoop/hbase/master/TestAssignmentManager.java
===================================================================
--- hbase-server/src/test/java/org/apache/hadoop/hbase/master/TestAssignmentManager.java (revision 1430730)
+++ hbase-server/src/test/java/org/apache/hadoop/hbase/master/TestAssignmentManager.java (working copy)
@@ -608,7 +608,7 @@
Mockito.when(services.getServerManager()).thenReturn(this.serverManager);
Mockito.when(services.getZooKeeper()).thenReturn(this.watcher);
ServerShutdownHandler handler = new ServerShutdownHandler(this.server,
- services, deadServers, SERVERNAME_A, false);
+ services, deadServers, SERVERNAME_A, false, false, false);
am.failoverCleanupDone.set(true);
handler.process();
// The region in r will have been assigned. It'll be up in zk as unassigned.
Index: hbase-server/src/main/java/org/apache/hadoop/hbase/master/AssignmentManager.java
===================================================================
--- hbase-server/src/main/java/org/apache/hadoop/hbase/master/AssignmentManager.java (revision 1430730)
+++ hbase-server/src/main/java/org/apache/hadoop/hbase/master/AssignmentManager.java (working copy)
@@ -2636,11 +2636,11 @@
threadPoolExecutorService.submit(new UnAssignCallable(this, regionInfo));
}
- boolean isCarryingRoot(ServerName serverName) {
+ public boolean isCarryingRoot(ServerName serverName) {
return isCarryingRegion(serverName, HRegionInfo.ROOT_REGIONINFO);
}
- boolean isCarryingMeta(ServerName serverName) {
+ public boolean isCarryingMeta(ServerName serverName) {
return isCarryingRegion(serverName, HRegionInfo.FIRST_META_REGIONINFO);
}
Index: hbase-server/src/main/java/org/apache/hadoop/hbase/master/handler/ServerShutdownHandler.java
===================================================================
--- hbase-server/src/main/java/org/apache/hadoop/hbase/master/handler/ServerShutdownHandler.java (revision 1430730)
+++ hbase-server/src/main/java/org/apache/hadoop/hbase/master/handler/ServerShutdownHandler.java (working copy)
@@ -60,17 +60,15 @@
private final DeadServer deadServers;
private final boolean shouldSplitHlog; // whether to split HLog or not
- public ServerShutdownHandler(final Server server, final MasterServices services,
- final DeadServer deadServers, final ServerName serverName,
- final boolean shouldSplitHlog) {
- this(server, services, deadServers, serverName, EventType.M_SERVER_SHUTDOWN,
- shouldSplitHlog);
- }
+ private final boolean carryingRoot;
+ private final boolean carryingMeta;
- ServerShutdownHandler(final Server server, final MasterServices services,
- final DeadServer deadServers, final ServerName serverName, EventType type,
- final boolean shouldSplitHlog) {
- super(server, type);
+ public ServerShutdownHandler(final Server server,
+ final MasterServices services, final DeadServer deadServers,
+ final ServerName serverName, final boolean shouldSplitHlog,
+ final boolean carringRoot, final boolean carryingMeta) {
+ super(server, (carringRoot || carryingMeta) ? EventType.M_META_SERVER_SHUTDOWN
+ : EventType.M_SERVER_SHUTDOWN);
this.serverName = serverName;
this.server = server;
this.services = services;
@@ -79,6 +77,8 @@
LOG.warn(this.serverName + " is NOT in deadservers; it should be!");
}
this.shouldSplitHlog = shouldSplitHlog;
+ this.carryingRoot = carringRoot;
+ this.carryingMeta = carryingMeta;
}
@Override
@@ -151,14 +151,14 @@
* @return True if the server we are processing was carrying -ROOT-
*/
boolean isCarryingRoot() {
- return false;
+ return carryingRoot;
}
/**
* @return True if the server we are processing was carrying .META.
*/
boolean isCarryingMeta() {
- return false;
+ return carryingMeta;
}
@Override
@@ -190,20 +190,33 @@
// Assign root and meta if we were carrying them.
if (isCarryingRoot()) { // -ROOT-
- LOG.info("Server " + serverName +
- " was carrying ROOT. Trying to assign.");
- this.services.getAssignmentManager().
- regionOffline(HRegionInfo.ROOT_REGIONINFO);
- verifyAndAssignRootWithRetries();
+ // Check again: region may be assigned to other where because of RIT
+ // timeout
+ if (this.services.getAssignmentManager().isCarryingRoot(serverName)) {
+ LOG.info("Server " + serverName
+ + " was carrying ROOT. Trying to assign.");
+ this.services.getAssignmentManager().regionOffline(
+ HRegionInfo.ROOT_REGIONINFO);
+ verifyAndAssignRootWithRetries();
+ } else {
+ LOG.info("ROOT has been assigned to otherwhere, skip assigning.");
+ }
}
// Carrying meta?
if (isCarryingMeta()) {
- LOG.info("Server " + serverName +
- " was carrying META. Trying to assign.");
- this.services.getAssignmentManager().
- regionOffline(HRegionInfo.FIRST_META_REGIONINFO);
- this.services.getAssignmentManager().assignMeta();
+ // Check again: region may be assigned to other where because of RIT
+ // timeout
+ if (this.services.getAssignmentManager().isCarryingMeta(serverName)) {
+ LOG.info("Server " + serverName
+ + " was carrying META. Trying to assign.");
+ this.services.getAssignmentManager().regionOffline(
+ HRegionInfo.FIRST_META_REGIONINFO);
+ this.services.getAssignmentManager().assignMeta();
+ } else {
+ LOG.info("META has been assigned to otherwhere, skip assigning.");
+ }
+
}
// We don't want worker thread in the MetaServerShutdownHandler
Index: hbase-server/src/main/java/org/apache/hadoop/hbase/master/handler/MetaServerShutdownHandler.java
===================================================================
--- hbase-server/src/main/java/org/apache/hadoop/hbase/master/handler/MetaServerShutdownHandler.java (revision 1430730)
+++ hbase-server/src/main/java/org/apache/hadoop/hbase/master/handler/MetaServerShutdownHandler.java (working copy)
@@ -27,6 +27,7 @@
/**
* Shutdown handler for the server hosting -ROOT-,
* .META., or both.
+ * @deprecated Use {@link ServerShutdownHandler} for meta server
*/
@InterfaceAudience.Private
public class MetaServerShutdownHandler extends ServerShutdownHandler {
@@ -37,8 +38,8 @@
final MasterServices services,
final DeadServer deadServers, final ServerName serverName,
final boolean carryingRoot, final boolean carryingMeta) {
- super(server, services, deadServers, serverName,
- EventType.M_META_SERVER_SHUTDOWN, true);
+ super(server, services, deadServers, serverName, true, carryingRoot,
+ carryingMeta);
this.carryingRoot = carryingRoot;
this.carryingMeta = carryingMeta;
}
Index: hbase-server/src/main/java/org/apache/hadoop/hbase/master/ServerManager.java
===================================================================
--- hbase-server/src/main/java/org/apache/hadoop/hbase/master/ServerManager.java (revision 1430730)
+++ hbase-server/src/main/java/org/apache/hadoop/hbase/master/ServerManager.java (working copy)
@@ -486,13 +486,8 @@
boolean carryingRoot = services.getAssignmentManager().isCarryingRoot(serverName);
boolean carryingMeta = services.getAssignmentManager().isCarryingMeta(serverName);
- if (carryingRoot || carryingMeta) {
- this.services.getExecutorService().submit(new MetaServerShutdownHandler(this.master,
- this.services, this.deadservers, serverName, carryingRoot, carryingMeta));
- } else {
- this.services.getExecutorService().submit(new ServerShutdownHandler(this.master,
- this.services, this.deadservers, serverName, true));
- }
+ this.services.getExecutorService().submit(new ServerShutdownHandler(this.master,
+ this.services, this.deadservers, serverName, true, carryingRoot, carryingMeta));
LOG.debug("Added=" + serverName +
" to dead servers, submitted shutdown handler to be executed, root=" +
carryingRoot + ", meta=" + carryingMeta);
@@ -513,8 +508,9 @@
}
this.deadservers.add(serverName);
- this.services.getExecutorService().submit(new ServerShutdownHandler(
- this.master, this.services, this.deadservers, serverName, false));
+ this.services.getExecutorService().submit(
+ new ServerShutdownHandler(this.master, this.services, this.deadservers,
+ serverName, false, false, false));
}
/**