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