Author: ramkrishna Date: Thu Jan 12 17:31:24 2012 New Revision: 1230653 URL: http://svn.apache.org/viewvc?rev=1230653&view=rev Log: HBASE-5156 Backport HBASE-4899 - Region would be assigned twice easily with continually killing server and moving region in testing environment(Ram)
Modified: hbase/branches/0.90/CHANGES.txt hbase/branches/0.90/src/main/java/org/apache/hadoop/hbase/master/AssignmentManager.java hbase/branches/0.90/src/main/java/org/apache/hadoop/hbase/master/handler/ServerShutdownHandler.java Modified: hbase/branches/0.90/CHANGES.txt URL: http://svn.apache.org/viewvc/hbase/branches/0.90/CHANGES.txt?rev=1230653&r1=1230652&r2=1230653&view=diff ============================================================================== --- hbase/branches/0.90/CHANGES.txt (original) +++ hbase/branches/0.90/CHANGES.txt Thu Jan 12 17:31:24 2012 @@ -153,6 +153,8 @@ Release 0.90.5 - Dec 22, 2011 HBASE-4944 Optionally verify bulk loaded HFiles HBASE-4982 graceful_stop.sh does not pass on the --config its passed to its internal invocations of other hbase scripts + HBASE-5156 Backport HBASE-4899 - Region would be assigned twice easily with + continually killing server and moving region in testing environment(Ram) NEW FEATURE HBASE-4377 [hbck] Offline rebuild .META. from fs data only Modified: hbase/branches/0.90/src/main/java/org/apache/hadoop/hbase/master/AssignmentManager.java URL: http://svn.apache.org/viewvc/hbase/branches/0.90/src/main/java/org/apache/hadoop/hbase/master/AssignmentManager.java?rev=1230653&r1=1230652&r2=1230653&view=diff ============================================================================== --- hbase/branches/0.90/src/main/java/org/apache/hadoop/hbase/master/AssignmentManager.java (original) +++ hbase/branches/0.90/src/main/java/org/apache/hadoop/hbase/master/AssignmentManager.java Thu Jan 12 17:31:24 2012 @@ -2107,7 +2107,8 @@ public class AssignmentManager extends Z * @return Null or a {@link Pair} instance that holds the full {@link HRegionInfo} * and the hosting servers {@link HServerInfo}. */ - Pair<HRegionInfo, HServerInfo> getAssignment(final byte [] encodedRegionName) { + public Pair<HRegionInfo, HServerInfo> getAssignment( + final byte[] encodedRegionName) { String name = Bytes.toString(encodedRegionName); synchronized(this.regions) { for (Map.Entry<HRegionInfo, HServerInfo> e: this.regions.entrySet()) { Modified: hbase/branches/0.90/src/main/java/org/apache/hadoop/hbase/master/handler/ServerShutdownHandler.java URL: http://svn.apache.org/viewvc/hbase/branches/0.90/src/main/java/org/apache/hadoop/hbase/master/handler/ServerShutdownHandler.java?rev=1230653&r1=1230652&r2=1230653&view=diff ============================================================================== --- hbase/branches/0.90/src/main/java/org/apache/hadoop/hbase/master/handler/ServerShutdownHandler.java (original) +++ hbase/branches/0.90/src/main/java/org/apache/hadoop/hbase/master/handler/ServerShutdownHandler.java Thu Jan 12 17:31:24 2012 @@ -41,6 +41,7 @@ import org.apache.hadoop.hbase.master.De import org.apache.hadoop.hbase.master.MasterServices; import org.apache.hadoop.hbase.master.ServerManager; import org.apache.hadoop.hbase.util.Bytes; +import org.apache.hadoop.hbase.util.Pair; import org.apache.hadoop.hbase.util.Writables; import org.apache.zookeeper.KeeperException; @@ -205,11 +206,30 @@ public class ServerShutdownHandler exten " regions(s) that are already in transition)"); // Iterate regions that were on this server and assign them - for (Map.Entry<HRegionInfo, Result> e: hris.entrySet()) { + for (Map.Entry<HRegionInfo, Result> e : hris.entrySet()) { if (processDeadRegion(e.getKey(), e.getValue(), this.services.getAssignmentManager(), this.server.getCatalogTracker())) { - this.services.getAssignmentManager().assign(e.getKey(), true); + RegionState rit = this.services.getAssignmentManager() + .isRegionInTransition(e.getKey()); + Pair<HRegionInfo, HServerInfo> p = + this.services + .getAssignmentManager().getAssignment( + e.getKey().getEncodedNameAsBytes()); + + if (rit != null && !rit.isClosing() && !rit.isPendingClose()) { + // Skip regions that were in transition unless CLOSING or + // PENDING_CLOSE + LOG.info("Skip assigning region " + rit.toString()); + } else if ((p != null) && (p.getSecond() != null) + && (p.getSecond().equals(this.hsi))) { + LOG.debug("Skip assigning region " + + e.getKey().getRegionNameAsString() + + " because it has been opened in " + + p.getSecond()); + } else { + this.services.getAssignmentManager().assign(e.getKey(), true); + } } } } finally {