You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@hbase.apache.org by se...@apache.org on 2013/04/05 19:42:30 UTC

svn commit: r1465063 - in /hbase/branches/0.94/src: main/java/org/apache/hadoop/hbase/regionserver/ test/java/org/apache/hadoop/hbase/master/ test/java/org/apache/hadoop/hbase/regionserver/handler/

Author: sershe
Date: Fri Apr  5 17:42:30 2013
New Revision: 1465063

URL: http://svn.apache.org/r1465063
Log:
HBASE-8150 server should not produce RAITE for already-opening region in 0.94 (because master retry logic handles this case poorly)

Modified:
    hbase/branches/0.94/src/main/java/org/apache/hadoop/hbase/regionserver/HRegionServer.java
    hbase/branches/0.94/src/test/java/org/apache/hadoop/hbase/master/TestZKBasedOpenCloseRegion.java
    hbase/branches/0.94/src/test/java/org/apache/hadoop/hbase/regionserver/handler/TestOpenRegionHandler.java

Modified: hbase/branches/0.94/src/main/java/org/apache/hadoop/hbase/regionserver/HRegionServer.java
URL: http://svn.apache.org/viewvc/hbase/branches/0.94/src/main/java/org/apache/hadoop/hbase/regionserver/HRegionServer.java?rev=1465063&r1=1465062&r2=1465063&view=diff
==============================================================================
--- hbase/branches/0.94/src/main/java/org/apache/hadoop/hbase/regionserver/HRegionServer.java (original)
+++ hbase/branches/0.94/src/main/java/org/apache/hadoop/hbase/regionserver/HRegionServer.java Fri Apr  5 17:42:30 2013
@@ -2942,7 +2942,14 @@ public class HRegionServer implements HR
     }
     // Added to in-memory RS RIT that we are trying to open this region.
     // Clear it if we fail queuing an open executor.
-    addRegionsInTransition(region, OPEN);
+    boolean isNewRit = addRegionsInTransition(region, OPEN);
+    if (!isNewRit) {
+      // An open is in progress. This is supported, but let's log this.
+      LOG.info("Receiving OPEN for the region:" +
+          region.getRegionNameAsString() + " , which we are already trying to OPEN" +
+          " - ignoring this new request for this region.");
+      return RegionOpeningState.OPENED;
+    }
     try {
       LOG.info("Received request to open region: " +
         region.getRegionNameAsString());
@@ -3026,16 +3033,19 @@ public class HRegionServer implements HR
     *          Whether OPEN or CLOSE.
     * @throws RegionAlreadyInTransitionException
     */
-   protected void addRegionsInTransition(final HRegionInfo region, final String currentAction)
+   protected boolean addRegionsInTransition(final HRegionInfo region, final String currentAction)
        throws RegionAlreadyInTransitionException {
-     Boolean action = this.regionsInTransitionInRS.putIfAbsent(region.getEncodedNameAsBytes(),
-         currentAction.equals(OPEN));
-     if (action != null) {
-       // The below exception message will be used in master.
-       throw new RegionAlreadyInTransitionException("Received:" + currentAction + " for the region:"
-           + region.getRegionNameAsString() + " for the region:" + region.getRegionNameAsString()
-           + ", which we are already trying to " + (action ? OPEN : CLOSE) + ".");
+     boolean isOpen = currentAction.equals(OPEN);
+     Boolean action = this.regionsInTransitionInRS.putIfAbsent(
+         region.getEncodedNameAsBytes(), isOpen);
+     if (action == null) return true;
+     if (isOpen && action.booleanValue()) {
+       return false;
      }
+     // The below exception message will be used in master.
+     throw new RegionAlreadyInTransitionException("Received:" + currentAction
+         + " for the region:" + region.getRegionNameAsString()
+         + ", which we are already trying to " + (action ? OPEN : CLOSE) + ".");
    }
 
   @Override

Modified: hbase/branches/0.94/src/test/java/org/apache/hadoop/hbase/master/TestZKBasedOpenCloseRegion.java
URL: http://svn.apache.org/viewvc/hbase/branches/0.94/src/test/java/org/apache/hadoop/hbase/master/TestZKBasedOpenCloseRegion.java?rev=1465063&r1=1465062&r2=1465063&view=diff
==============================================================================
--- hbase/branches/0.94/src/test/java/org/apache/hadoop/hbase/master/TestZKBasedOpenCloseRegion.java (original)
+++ hbase/branches/0.94/src/test/java/org/apache/hadoop/hbase/master/TestZKBasedOpenCloseRegion.java Fri Apr  5 17:42:30 2013
@@ -107,9 +107,9 @@ public class TestZKBasedOpenCloseRegion 
       super(conf);
     }
     @Override
-    public void addRegionsInTransition(HRegionInfo region,
+    public boolean addRegionsInTransition(HRegionInfo region,
         String currentAction) throws RegionAlreadyInTransitionException {
-      super.addRegionsInTransition(region, currentAction);
+      return super.addRegionsInTransition(region, currentAction);
     }
   }
 

Modified: hbase/branches/0.94/src/test/java/org/apache/hadoop/hbase/regionserver/handler/TestOpenRegionHandler.java
URL: http://svn.apache.org/viewvc/hbase/branches/0.94/src/test/java/org/apache/hadoop/hbase/regionserver/handler/TestOpenRegionHandler.java?rev=1465063&r1=1465062&r2=1465063&view=diff
==============================================================================
--- hbase/branches/0.94/src/test/java/org/apache/hadoop/hbase/regionserver/handler/TestOpenRegionHandler.java (original)
+++ hbase/branches/0.94/src/test/java/org/apache/hadoop/hbase/regionserver/handler/TestOpenRegionHandler.java Fri Apr  5 17:42:30 2013
@@ -202,9 +202,9 @@ public class TestOpenRegionHandler {
       super(conf);
     }
     @Override
-    public void addRegionsInTransition(HRegionInfo region,
+    public boolean addRegionsInTransition(HRegionInfo region,
         String currentAction) throws RegionAlreadyInTransitionException {
-      super.addRegionsInTransition(region, currentAction);
+      return super.addRegionsInTransition(region, currentAction);
     }
   }