Return-Path: X-Original-To: apmail-hbase-commits-archive@www.apache.org Delivered-To: apmail-hbase-commits-archive@www.apache.org Received: from mail.apache.org (hermes.apache.org [140.211.11.3]) by minotaur.apache.org (Postfix) with SMTP id 43E1EE30A for ; Mon, 18 Mar 2013 19:37:34 +0000 (UTC) Received: (qmail 55582 invoked by uid 500); 18 Mar 2013 19:37:33 -0000 Delivered-To: apmail-hbase-commits-archive@hbase.apache.org Received: (qmail 55530 invoked by uid 500); 18 Mar 2013 19:37:33 -0000 Mailing-List: contact commits-help@hbase.apache.org; run by ezmlm Precedence: bulk List-Help: List-Unsubscribe: List-Post: List-Id: Reply-To: dev@hbase.apache.org Delivered-To: mailing list commits@hbase.apache.org Received: (qmail 55522 invoked by uid 99); 18 Mar 2013 19:37:33 -0000 Received: from athena.apache.org (HELO athena.apache.org) (140.211.11.136) by apache.org (qpsmtpd/0.29) with ESMTP; Mon, 18 Mar 2013 19:37:33 +0000 X-ASF-Spam-Status: No, hits=-2000.0 required=5.0 tests=ALL_TRUSTED X-Spam-Check-By: apache.org Received: from [140.211.11.4] (HELO eris.apache.org) (140.211.11.4) by apache.org (qpsmtpd/0.29) with ESMTP; Mon, 18 Mar 2013 19:37:32 +0000 Received: from eris.apache.org (localhost [127.0.0.1]) by eris.apache.org (Postfix) with ESMTP id 0FDA92388994; Mon, 18 Mar 2013 19:37:12 +0000 (UTC) Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Subject: svn commit: r1457932 - in /hbase/trunk/hbase-server/src/main/java/org/apache/hadoop/hbase/master: DeadServer.java ServerManager.java handler/MetaServerShutdownHandler.java Date: Mon, 18 Mar 2013 19:37:11 -0000 To: commits@hbase.apache.org From: tedyu@apache.org X-Mailer: svnmailer-1.0.8-patched Message-Id: <20130318193712.0FDA92388994@eris.apache.org> X-Virus-Checked: Checked by ClamAV on apache.org Author: tedyu Date: Mon Mar 18 19:37:11 2013 New Revision: 1457932 URL: http://svn.apache.org/r1457932 Log: HBASE-8097 MetaServerShutdownHandler may potentially keep bumping up DeadServer.numProcessing (Jeffrey Zhong) Modified: hbase/trunk/hbase-server/src/main/java/org/apache/hadoop/hbase/master/DeadServer.java hbase/trunk/hbase-server/src/main/java/org/apache/hadoop/hbase/master/ServerManager.java hbase/trunk/hbase-server/src/main/java/org/apache/hadoop/hbase/master/handler/MetaServerShutdownHandler.java Modified: hbase/trunk/hbase-server/src/main/java/org/apache/hadoop/hbase/master/DeadServer.java URL: http://svn.apache.org/viewvc/hbase/trunk/hbase-server/src/main/java/org/apache/hadoop/hbase/master/DeadServer.java?rev=1457932&r1=1457931&r2=1457932&view=diff ============================================================================== --- hbase/trunk/hbase-server/src/main/java/org/apache/hadoop/hbase/master/DeadServer.java (original) +++ hbase/trunk/hbase-server/src/main/java/org/apache/hadoop/hbase/master/DeadServer.java Mon Mar 18 19:37:11 2013 @@ -98,9 +98,15 @@ public class DeadServer { return clone; } - public synchronized boolean add(ServerName e) { + /** + * Adds the server to the dead server list if it's not there already. + * @param sn the server name + */ + public synchronized void add(ServerName sn) { this.numProcessing++; - return deadServers.put(e, EnvironmentEdgeManager.currentTimeMillis()) != null; + if (!deadServers.containsKey(sn)){ + deadServers.put(sn, EnvironmentEdgeManager.currentTimeMillis()); + } } @SuppressWarnings("UnusedParameters") Modified: hbase/trunk/hbase-server/src/main/java/org/apache/hadoop/hbase/master/ServerManager.java URL: http://svn.apache.org/viewvc/hbase/trunk/hbase-server/src/main/java/org/apache/hadoop/hbase/master/ServerManager.java?rev=1457932&r1=1457931&r2=1457932&view=diff ============================================================================== --- hbase/trunk/hbase-server/src/main/java/org/apache/hadoop/hbase/master/ServerManager.java (original) +++ hbase/trunk/hbase-server/src/main/java/org/apache/hadoop/hbase/master/ServerManager.java Mon Mar 18 19:37:11 2013 @@ -487,7 +487,7 @@ public class ServerManager { boolean carryingMeta = services.getAssignmentManager().isCarryingMeta(serverName); if (carryingMeta) { this.services.getExecutorService().submit(new MetaServerShutdownHandler(this.master, - this.services, this.deadservers, serverName, carryingMeta)); + this.services, this.deadservers, serverName)); } else { this.services.getExecutorService().submit(new ServerShutdownHandler(this.master, this.services, this.deadservers, serverName, true)); Modified: hbase/trunk/hbase-server/src/main/java/org/apache/hadoop/hbase/master/handler/MetaServerShutdownHandler.java URL: http://svn.apache.org/viewvc/hbase/trunk/hbase-server/src/main/java/org/apache/hadoop/hbase/master/handler/MetaServerShutdownHandler.java?rev=1457932&r1=1457931&r2=1457932&view=diff ============================================================================== --- hbase/trunk/hbase-server/src/main/java/org/apache/hadoop/hbase/master/handler/MetaServerShutdownHandler.java (original) +++ hbase/trunk/hbase-server/src/main/java/org/apache/hadoop/hbase/master/handler/MetaServerShutdownHandler.java Mon Mar 18 19:37:11 2013 @@ -32,49 +32,51 @@ import org.apache.hadoop.hbase.master.Ma import org.apache.zookeeper.KeeperException; /** - * Shutdown handler for the server hosting -ROOT-, - * .META., or both. + * Shutdown handler for the server hosting .META. */ @InterfaceAudience.Private public class MetaServerShutdownHandler extends ServerShutdownHandler { - private final boolean carryingMeta; private static final Log LOG = LogFactory.getLog(MetaServerShutdownHandler.class); public MetaServerShutdownHandler(final Server server, final MasterServices services, - final DeadServer deadServers, final ServerName serverName, - final boolean carryingMeta) { + final DeadServer deadServers, final ServerName serverName) { super(server, services, deadServers, serverName, EventType.M_META_SERVER_SHUTDOWN, true); - this.carryingMeta = carryingMeta; } @Override public void process() throws IOException { - try { - LOG.info("Splitting META logs for " + serverName); - if (this.shouldSplitHlog) { - this.services.getMasterFileSystem().splitMetaLog(serverName); + boolean gotException = true; + try{ + try { + LOG.info("Splitting META logs for " + serverName); + if (this.shouldSplitHlog) { + this.services.getMasterFileSystem().splitMetaLog(serverName); + } + } catch (IOException ioe) { + this.services.getExecutorService().submit(this); + this.deadServers.add(serverName); + throw new IOException("failed log splitting for " + + serverName + ", will retry", ioe); } - } catch (IOException ioe) { - this.services.getExecutorService().submit(this); - this.deadServers.add(serverName); - throw new IOException("failed log splitting for " + - serverName + ", will retry", ioe); - } - - // Assign root and meta if we were carrying them. - if (isCarryingMeta()) { // .META. + + // Assign meta if we were carrying it. // 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); + LOG.info("Server " + serverName + " was carrying META. Trying to assign."); + this.services.getAssignmentManager().regionOffline(HRegionInfo.FIRST_META_REGIONINFO); verifyAndAssignMetaWithRetries(); } else { LOG.info("META has been assigned to otherwhere, skip assigning."); } + + gotException = false; + } finally { + if (gotException){ + // If we had an exception, this.deadServers.finish will be skipped in super.process() + this.deadServers.finish(serverName); + } } super.process(); } @@ -97,10 +99,10 @@ public class MetaServerShutdownHandler e if (!this.server.getCatalogTracker().verifyMetaRegionLocation(timeout)) { this.services.getAssignmentManager().assignMeta(); } else if (serverName.equals(server.getCatalogTracker().getMetaLocation())) { - throw new IOException("-ROOT- is onlined on the dead server " + throw new IOException(".META. is onlined on the dead server " + serverName); } else { - LOG.info("Skip assigning -ROOT-, because it is online on the " + LOG.info("Skip assigning .META., because it is online on the " + server.getCatalogTracker().getMetaLocation()); } } @@ -142,10 +144,6 @@ public class MetaServerShutdownHandler e } } - boolean isCarryingMeta() { - return this.carryingMeta; - } - @Override public String toString() { String name = "UnknownServerName";