hbase-commits mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From st...@apache.org
Subject hbase git commit: Two SPLIT requests came in on top of each other; the second failed because it saw parent region was SPLIT. I 'fixed' this before but my fix was in the wrong place
Date Mon, 15 May 2017 16:49:34 GMT
Repository: hbase
Updated Branches:
  refs/heads/HBASE-14614 50511ad24 -> 9460eaf1b


Two SPLIT requests came in on top of each other; the second failed because it saw parent region
was SPLIT. I 'fixed' this before but my fix was in the wrong place


Project: http://git-wip-us.apache.org/repos/asf/hbase/repo
Commit: http://git-wip-us.apache.org/repos/asf/hbase/commit/9460eaf1
Tree: http://git-wip-us.apache.org/repos/asf/hbase/tree/9460eaf1
Diff: http://git-wip-us.apache.org/repos/asf/hbase/diff/9460eaf1

Branch: refs/heads/HBASE-14614
Commit: 9460eaf1bfd04b74bc7e4da7405c1601bd02b791
Parents: 50511ad2
Author: Michael Stack <stack@apache.org>
Authored: Mon May 15 09:49:30 2017 -0700
Committer: Michael Stack <stack@apache.org>
Committed: Mon May 15 09:49:30 2017 -0700

----------------------------------------------------------------------
 .../hbase/procedure2/ProcedureExecutor.java     |  2 +-
 .../assignment/SplitTableRegionProcedure.java   | 20 ++++++++++++--------
 .../hadoop/hbase/regionserver/HRegion.java      |  5 +++++
 3 files changed, 18 insertions(+), 9 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/hbase/blob/9460eaf1/hbase-procedure/src/main/java/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.java
----------------------------------------------------------------------
diff --git a/hbase-procedure/src/main/java/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.java
b/hbase-procedure/src/main/java/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.java
index 258e268..bc73453 100644
--- a/hbase-procedure/src/main/java/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.java
+++ b/hbase-procedure/src/main/java/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.java
@@ -1147,7 +1147,7 @@ public class ProcedureExecutor<TEnvironment> {
           scheduler.yield(proc);
           break;
         case LOCK_EVENT_WAIT:
-          // someone will wake us up when the lock is available
+          // Someone will wake us up when the lock is available
           LOG.debug(lockState + " " + proc);
           break;
         default:

http://git-wip-us.apache.org/repos/asf/hbase/blob/9460eaf1/hbase-server/src/main/java/org/apache/hadoop/hbase/master/assignment/SplitTableRegionProcedure.java
----------------------------------------------------------------------
diff --git a/hbase-server/src/main/java/org/apache/hadoop/hbase/master/assignment/SplitTableRegionProcedure.java
b/hbase-server/src/main/java/org/apache/hadoop/hbase/master/assignment/SplitTableRegionProcedure.java
index 6815e9f..7ebe769 100644
--- a/hbase-server/src/main/java/org/apache/hadoop/hbase/master/assignment/SplitTableRegionProcedure.java
+++ b/hbase-server/src/main/java/org/apache/hadoop/hbase/master/assignment/SplitTableRegionProcedure.java
@@ -341,6 +341,15 @@ public class SplitTableRegionProcedure
     if (node != null) {
       parentHRI = node.getRegionInfo();
 
+      // Lookup the parent HRI state from the AM, which has the latest updated info.
+      // Protect against the case where concurrent SPLIT requests came in. Check a SPLIT
+      // did not just run.
+      if (parentHRI.isSplit() || parentHRI.isOffline()) {
+        setFailure(new IOException("Split " + parentHRI.getRegionNameAsString() + " FAILED
because " +
+            "offline/split already."));
+        return false;
+      }
+
       // expected parent to be online or closed
       if (!node.isInState(EXPECTED_SPLIT_STATES)) {
         // We may have SPLIT already?
@@ -350,13 +359,6 @@ public class SplitTableRegionProcedure
         return false;
       }
 
-      // lookup the parent HRI state from the AM, which has the latest updated info.
-      if (parentHRI.isSplit() || parentHRI.isOffline()) {
-        setFailure(new IOException("Split " + parentHRI.getRegionNameAsString() + " FAILED
because " +
-            "offline/split already."));
-        return false;
-      }
-
       // Ask the remote regionserver if this region is splittable. If we get an IOE, report
it
       // along w/ the failure so can see why we are not splittable at this time.
       IOException splittableCheckIOE = null;
@@ -365,7 +367,9 @@ public class SplitTableRegionProcedure
         GetRegionInfoResponse response =
             Util.getRegionInfoResponse(env, node.getRegionLocation(), node.getRegionInfo());
         splittable = response.hasSplittable() && response.getSplittable();
-        LOG.info("REMOVE splittable " + splittable + " " + this + " " + node);
+        if (LOG.isDebugEnabled()) {
+          LOG.debug("Splittable=" + splittable + " " + this + " " + node.toShortString());
+        }
       } catch (IOException e) {
         splittableCheckIOE = e;
       }

http://git-wip-us.apache.org/repos/asf/hbase/blob/9460eaf1/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/HRegion.java
----------------------------------------------------------------------
diff --git a/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/HRegion.java
b/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/HRegion.java
index b06e226..d9ef1f0 100644
--- a/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/HRegion.java
+++ b/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/HRegion.java
@@ -7790,6 +7790,11 @@ public class HRegion implements HeapSize, PropagatingConfigurationObserver,
Regi
       return null;
     }
 
+    // Can't split a region that is closing.
+    if (this.isClosing()) {
+      return null;
+    }
+
     if (!splitPolicy.shouldSplit()) {
       return null;
     }


Mime
View raw message