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 C11969B96 for ; Fri, 24 Feb 2012 22:48:07 +0000 (UTC) Received: (qmail 79073 invoked by uid 500); 24 Feb 2012 22:48:07 -0000 Delivered-To: apmail-hbase-commits-archive@hbase.apache.org Received: (qmail 79043 invoked by uid 500); 24 Feb 2012 22:48:07 -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 79034 invoked by uid 99); 24 Feb 2012 22:48:07 -0000 Received: from athena.apache.org (HELO athena.apache.org) (140.211.11.136) by apache.org (qpsmtpd/0.29) with ESMTP; Fri, 24 Feb 2012 22:48:07 +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; Fri, 24 Feb 2012 22:48:06 +0000 Received: from eris.apache.org (localhost [127.0.0.1]) by eris.apache.org (Postfix) with ESMTP id 931D723889BB for ; Fri, 24 Feb 2012 22:47:46 +0000 (UTC) Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Subject: svn commit: r1293466 - /hbase/branches/0.89-fb/src/main/java/org/apache/hadoop/hbase/master/RegionManager.java Date: Fri, 24 Feb 2012 22:47:46 -0000 To: commits@hbase.apache.org From: mbautin@apache.org X-Mailer: svnmailer-1.0.8-patched Message-Id: <20120224224746.931D723889BB@eris.apache.org> Author: mbautin Date: Fri Feb 24 22:47:46 2012 New Revision: 1293466 URL: http://svn.apache.org/viewvc?rev=1293466&view=rev Log: [master] Bound the number of non preferred assignment for each region server Summary: This is diff is related to task 934952. Master should assign a bounded number of non preferred assignment for each region server. https://our.intern.facebook.com/intern/tasks/?t=934952 When the master starts or failover, it will scan the dfs to compute the locality mapping. And there 3 time windows for master to assign regions. Let's set the timer starting at the time when Master successfully initialized everything, no matter this is a fresh start up time or failover time. 1) In the 1st min, the master will always assign regions to its best locality region server. If the best locality region server is not online, then the master will hold its corresponding regions. 2) In later 4 mins, the master will still try to assign regions to its best locality region server but not holding region any more. Also start to assign these hold regions to any checked-in region server. 3) Later on, assign region to any checked-in region server. No locality assignment any more. The problem today was there were lots of region serves stopped in the first time window. When the second time window came in, the master had already hold a large number unassigned regions. And assume region server A was the first RS to checked-in this time window, the master was supposed to assign all the best locality regions plus a bounded number of unassigned regions together to this region server A. Test Plan: Running all the unit and will test the failover case in titan migration002 cluster. Reviewers: kannan, gqchen, kranganathan Reviewed By: kannan CC: hbase-eng@lists Differential Revision: https://phabricator.fb.com/D412069 Task ID: 934952 Modified: hbase/branches/0.89-fb/src/main/java/org/apache/hadoop/hbase/master/RegionManager.java Modified: hbase/branches/0.89-fb/src/main/java/org/apache/hadoop/hbase/master/RegionManager.java URL: http://svn.apache.org/viewvc/hbase/branches/0.89-fb/src/main/java/org/apache/hadoop/hbase/master/RegionManager.java?rev=1293466&r1=1293465&r2=1293466&view=diff ============================================================================== --- hbase/branches/0.89-fb/src/main/java/org/apache/hadoop/hbase/master/RegionManager.java (original) +++ hbase/branches/0.89-fb/src/main/java/org/apache/hadoop/hbase/master/RegionManager.java Fri Feb 24 22:47:46 2012 @@ -546,6 +546,7 @@ public class RegionManager { // lookup hostname of addr if needed String hostName = null; RegionState rootState = null; + int nonPreferredAssignmentCount = 0; // Handle if root is unassigned... only assign root if root is offline. synchronized (this.regionsInTransition) { rootState = regionsInTransition.get(HRegionInfo.ROOT_REGIONINFO @@ -608,14 +609,21 @@ public class RegionManager { if (hostName.startsWith(preferredHost)) { LOG.debug("Doing Preferred Region Assignment for : " + name + " to the " + hostName); + // add the region to its preferred region server. + if (s.isUnassigned()) { + regionsToAssign.add(s); + } + continue; } else if (holdRegionForBestRegionserver || quickStartRegionServerSet.contains(preferredHost)) { continue; } } } - - if (s.isUnassigned()) { + // Only assign a configured number unassigned region at one time in the + // non preferred assignment case. + if (s.isUnassigned() && + (nonPreferredAssignmentCount++) < this.maxAssignInOneGo) { regionsToAssign.add(s); } }