You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@hbase.apache.org by ra...@apache.org on 2013/03/14 04:08:26 UTC

svn commit: r1456310 - in /hbase/branches/0.94/src/main/java/org/apache/hadoop/hbase: master/AssignmentManager.java regionserver/handler/OpenRegionHandler.java

Author: ramkrishna
Date: Thu Mar 14 03:08:25 2013
New Revision: 1456310

URL: http://svn.apache.org/r1456310
Log:
HBASE-8040 - Race condition in AM after HBASE-7521 (only 0.94) (Ram)


Modified:
    hbase/branches/0.94/src/main/java/org/apache/hadoop/hbase/master/AssignmentManager.java
    hbase/branches/0.94/src/main/java/org/apache/hadoop/hbase/regionserver/handler/OpenRegionHandler.java

Modified: hbase/branches/0.94/src/main/java/org/apache/hadoop/hbase/master/AssignmentManager.java
URL: http://svn.apache.org/viewvc/hbase/branches/0.94/src/main/java/org/apache/hadoop/hbase/master/AssignmentManager.java?rev=1456310&r1=1456309&r2=1456310&view=diff
==============================================================================
--- hbase/branches/0.94/src/main/java/org/apache/hadoop/hbase/master/AssignmentManager.java (original)
+++ hbase/branches/0.94/src/main/java/org/apache/hadoop/hbase/master/AssignmentManager.java Thu Mar 14 03:08:25 2013
@@ -1693,10 +1693,16 @@ public class AssignmentManager extends Z
       try {
         LOG.debug("Assigning region " + state.getRegion().getRegionNameAsString() +
           " to " + plan.getDestination().toString());
+        long currentOfflineTimeStamp = state.getStamp();
         RegionOpeningState regionOpenState = serverManager.sendRegionOpen(plan.getDestination(),
             state.getRegion(), versionOfOfflineNode);
         if (regionOpenState == RegionOpeningState.OPENED) {
           // Transition RegionState to PENDING_OPEN
+          // Check if already the offline state has been updated due to a
+          // failure in prev assign
+          if (state.isOffline() && currentOfflineTimeStamp != state.getStamp()) {
+            return;
+          }
           if (state.isOffline() && !state.isOpening()) {
             state.update(RegionState.State.PENDING_OPEN,
                 System.currentTimeMillis(), plan.getDestination());

Modified: hbase/branches/0.94/src/main/java/org/apache/hadoop/hbase/regionserver/handler/OpenRegionHandler.java
URL: http://svn.apache.org/viewvc/hbase/branches/0.94/src/main/java/org/apache/hadoop/hbase/regionserver/handler/OpenRegionHandler.java?rev=1456310&r1=1456309&r2=1456310&view=diff
==============================================================================
--- hbase/branches/0.94/src/main/java/org/apache/hadoop/hbase/regionserver/handler/OpenRegionHandler.java (original)
+++ hbase/branches/0.94/src/main/java/org/apache/hadoop/hbase/regionserver/handler/OpenRegionHandler.java Thu Mar 14 03:08:25 2013
@@ -100,6 +100,7 @@ public class OpenRegionHandler extends E
       region = openRegion();
       if (region == null) {
         tryTransitionToFailedOpen(regionInfo);
+        transitionToFailedOpen = true;
         return;
       }
       boolean failed = true;