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 {


Reply via email to