You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@hbase.apache.org by jx...@apache.org on 2013/10/16 04:47:25 UTC

svn commit: r1532634 - in /hbase/branches/0.96/hbase-server/src: main/java/org/apache/hadoop/hbase/master/AssignmentManager.java test/java/org/apache/hadoop/hbase/master/TestAssignmentManagerOnCluster.java

Author: jxiang
Date: Wed Oct 16 02:47:25 2013
New Revision: 1532634

URL: http://svn.apache.org/r1532634
Log:
HBASE-9773 Master aborted when hbck asked the master to assign a region that was already online

Modified:
    hbase/branches/0.96/hbase-server/src/main/java/org/apache/hadoop/hbase/master/AssignmentManager.java
    hbase/branches/0.96/hbase-server/src/test/java/org/apache/hadoop/hbase/master/TestAssignmentManagerOnCluster.java

Modified: hbase/branches/0.96/hbase-server/src/main/java/org/apache/hadoop/hbase/master/AssignmentManager.java
URL: http://svn.apache.org/viewvc/hbase/branches/0.96/hbase-server/src/main/java/org/apache/hadoop/hbase/master/AssignmentManager.java?rev=1532634&r1=1532633&r2=1532634&view=diff
==============================================================================
--- hbase/branches/0.96/hbase-server/src/main/java/org/apache/hadoop/hbase/master/AssignmentManager.java (original)
+++ hbase/branches/0.96/hbase-server/src/main/java/org/apache/hadoop/hbase/master/AssignmentManager.java Wed Oct 16 02:47:25 2013
@@ -1684,6 +1684,9 @@ public class AssignmentManager extends Z
           versionOfClosingNode, dest, transitionInZK)) {
           LOG.debug("Sent CLOSE to " + server + " for region " +
             region.getRegionNameAsString());
+          if (!transitionInZK && state != null) {
+            regionOffline(region);
+          }
           return;
         }
         // This never happens. Currently regionserver close always return true.

Modified: hbase/branches/0.96/hbase-server/src/test/java/org/apache/hadoop/hbase/master/TestAssignmentManagerOnCluster.java
URL: http://svn.apache.org/viewvc/hbase/branches/0.96/hbase-server/src/test/java/org/apache/hadoop/hbase/master/TestAssignmentManagerOnCluster.java?rev=1532634&r1=1532633&r2=1532634&view=diff
==============================================================================
--- hbase/branches/0.96/hbase-server/src/test/java/org/apache/hadoop/hbase/master/TestAssignmentManagerOnCluster.java (original)
+++ hbase/branches/0.96/hbase-server/src/test/java/org/apache/hadoop/hbase/master/TestAssignmentManagerOnCluster.java Wed Oct 16 02:47:25 2013
@@ -112,11 +112,21 @@ public class TestAssignmentManagerOnClus
 
       HMaster master = TEST_UTIL.getHBaseCluster().getMaster();
       master.assignRegion(hri);
-      master.getAssignmentManager().waitForAssignment(hri);
+      AssignmentManager am = master.getAssignmentManager();
+      am.waitForAssignment(hri);
 
-      ServerName serverName = master.getAssignmentManager().
-        getRegionStates().getRegionServerOfRegion(hri);
+      RegionStates regionStates = am.getRegionStates();
+      ServerName serverName = regionStates.getRegionServerOfRegion(hri);
       TEST_UTIL.assertRegionOnServer(hri, serverName, 200);
+
+      // Region is assigned now. Let's assign it again.
+      // Master should not abort, and region should be assigned.
+      RegionState oldState = regionStates.getRegionState(hri);
+      TEST_UTIL.getHBaseAdmin().assign(hri.getRegionName());
+      master.getAssignmentManager().waitForAssignment(hri);
+      RegionState newState = regionStates.getRegionState(hri);
+      assertTrue(newState.isOpened()
+        && newState.getStamp() != oldState.getStamp());
     } finally {
       TEST_UTIL.deleteTable(Bytes.toBytes(table));
     }