Return-Path: Delivered-To: apmail-hadoop-hbase-commits-archive@locus.apache.org Received: (qmail 81928 invoked from network); 11 Oct 2008 19:02:46 -0000 Received: from hermes.apache.org (HELO mail.apache.org) (140.211.11.2) by minotaur.apache.org with SMTP; 11 Oct 2008 19:02:46 -0000 Received: (qmail 19701 invoked by uid 500); 11 Oct 2008 19:02:46 -0000 Delivered-To: apmail-hadoop-hbase-commits-archive@hadoop.apache.org Received: (qmail 19686 invoked by uid 500); 11 Oct 2008 19:02:46 -0000 Mailing-List: contact hbase-commits-help@hadoop.apache.org; run by ezmlm Precedence: bulk List-Help: List-Unsubscribe: List-Post: List-Id: Reply-To: hbase-dev@hadoop.apache.org Delivered-To: mailing list hbase-commits@hadoop.apache.org Received: (qmail 19677 invoked by uid 99); 11 Oct 2008 19:02:45 -0000 Received: from athena.apache.org (HELO athena.apache.org) (140.211.11.136) by apache.org (qpsmtpd/0.29) with ESMTP; Sat, 11 Oct 2008 12:02:45 -0700 X-ASF-Spam-Status: No, hits=-2000.0 required=10.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; Sat, 11 Oct 2008 19:01:49 +0000 Received: by eris.apache.org (Postfix, from userid 65534) id 794F723888A4; Sat, 11 Oct 2008 12:01:55 -0700 (PDT) Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Subject: svn commit: r703710 - in /hadoop/hbase/branches/0.18: CHANGES.txt src/java/org/apache/hadoop/hbase/RegionHistorian.java src/java/org/apache/hadoop/hbase/master/RegionManager.java Date: Sat, 11 Oct 2008 19:01:55 -0000 To: hbase-commits@hadoop.apache.org From: jimk@apache.org X-Mailer: svnmailer-1.0.8 Message-Id: <20081011190155.794F723888A4@eris.apache.org> X-Virus-Checked: Checked by ClamAV on apache.org Author: jimk Date: Sat Oct 11 12:01:54 2008 New Revision: 703710 URL: http://svn.apache.org/viewvc?rev=703710&view=rev Log: HBASE-918 Region balancing during startup makes cluster unstable Modified: hadoop/hbase/branches/0.18/CHANGES.txt hadoop/hbase/branches/0.18/src/java/org/apache/hadoop/hbase/RegionHistorian.java hadoop/hbase/branches/0.18/src/java/org/apache/hadoop/hbase/master/RegionManager.java Modified: hadoop/hbase/branches/0.18/CHANGES.txt URL: http://svn.apache.org/viewvc/hadoop/hbase/branches/0.18/CHANGES.txt?rev=703710&r1=703709&r2=703710&view=diff ============================================================================== --- hadoop/hbase/branches/0.18/CHANGES.txt (original) +++ hadoop/hbase/branches/0.18/CHANGES.txt Sat Oct 11 12:01:54 2008 @@ -6,6 +6,7 @@ HBASE-891 HRS.validateValuesLength throws IOE, gets caught in the retries HBASE-906 [shell] Truncates output HBASE-912 PE is broken when other tables exist + HBASE-918 Region balancing during startup makes cluster unstable Release 0.18.0 - September 21st, 2008 Modified: hadoop/hbase/branches/0.18/src/java/org/apache/hadoop/hbase/RegionHistorian.java URL: http://svn.apache.org/viewvc/hadoop/hbase/branches/0.18/src/java/org/apache/hadoop/hbase/RegionHistorian.java?rev=703710&r1=703709&r2=703710&view=diff ============================================================================== --- hadoop/hbase/branches/0.18/src/java/org/apache/hadoop/hbase/RegionHistorian.java (original) +++ hadoop/hbase/branches/0.18/src/java/org/apache/hadoop/hbase/RegionHistorian.java Sat Oct 11 12:01:54 2008 @@ -86,7 +86,7 @@ * Get the RegionHistorian Singleton instance. * @return The region historian */ - public static RegionHistorian getInstance() { + public synchronized static RegionHistorian getInstance() { if (historian == null) { historian = new RegionHistorian(); } Modified: hadoop/hbase/branches/0.18/src/java/org/apache/hadoop/hbase/master/RegionManager.java URL: http://svn.apache.org/viewvc/hadoop/hbase/branches/0.18/src/java/org/apache/hadoop/hbase/master/RegionManager.java?rev=703710&r1=703709&r2=703710&view=diff ============================================================================== --- hadoop/hbase/branches/0.18/src/java/org/apache/hadoop/hbase/master/RegionManager.java (original) +++ hadoop/hbase/branches/0.18/src/java/org/apache/hadoop/hbase/master/RegionManager.java Sat Oct 11 12:01:54 2008 @@ -178,16 +178,19 @@ // worked on elsewhere. Set regionsToAssign = regionsAwaitingAssignment(); if (regionsToAssign.size() == 0) { - // There are no regions waiting to be assigned. This is an opportunity - // for us to check if this server is overloaded. - double avgLoad = master.serverManager.getAverageLoad(); - if (avgLoad > 2.0 && thisServersLoad.getNumberOfRegions() > avgLoad) { - if (LOG.isDebugEnabled()) { - LOG.debug("Server " + serverName + " is overloaded. Server load: " + - thisServersLoad.getNumberOfRegions() + " avg: " + avgLoad); + // There are no regions waiting to be assigned. + if (allRegionsAssigned()) { + // We only do load balancing once all regions are assigned. + // This prevents churn while the cluster is starting up. + double avgLoad = master.serverManager.getAverageLoad(); + if (avgLoad > 2.0 && thisServersLoad.getNumberOfRegions() > avgLoad) { + if (LOG.isDebugEnabled()) { + LOG.debug("Server " + serverName + " is overloaded. Server load: " + + thisServersLoad.getNumberOfRegions() + " avg: " + avgLoad); + } + unassignSomeRegions(thisServersLoad, avgLoad, mostLoadedRegions, + returnMsgs); } - unassignSomeRegions(thisServersLoad, avgLoad, mostLoadedRegions, - returnMsgs); } } else { // if there's only one server, just give it all the regions @@ -843,6 +846,15 @@ } /** + * @return true if the initial meta scan is complete and there are no + * unassigned or pending regions + */ + public boolean allRegionsAssigned() { + return isInitialMetaScanComplete() && unassignedRegions.size() == 0 && + pendingRegions.size() == 0; + } + + /** * Get the root region location. * @return HServerAddress describing root region server. */