Return-Path: X-Original-To: archive-asf-public-internal@cust-asf2.ponee.io Delivered-To: archive-asf-public-internal@cust-asf2.ponee.io Received: from cust-asf.ponee.io (cust-asf.ponee.io [163.172.22.183]) by cust-asf2.ponee.io (Postfix) with ESMTP id 93559200C67 for ; Mon, 15 May 2017 18:49:36 +0200 (CEST) Received: by cust-asf.ponee.io (Postfix) id 91D68160BC2; Mon, 15 May 2017 16:49:36 +0000 (UTC) Delivered-To: archive-asf-public@cust-asf.ponee.io Received: from mail.apache.org (hermes.apache.org [140.211.11.3]) by cust-asf.ponee.io (Postfix) with SMTP id D8AB3160BA9 for ; Mon, 15 May 2017 18:49:35 +0200 (CEST) Received: (qmail 12385 invoked by uid 500); 15 May 2017 16:49:35 -0000 Mailing-List: contact commits-help@hbase.apache.org; run by ezmlm Precedence: bulk List-Help: List-Unsubscribe: List-Post: List-Id: Reply-To: dev@hbase.apache.org Delivered-To: mailing list commits@hbase.apache.org Received: (qmail 12376 invoked by uid 99); 15 May 2017 16:49:35 -0000 Received: from git1-us-west.apache.org (HELO git1-us-west.apache.org) (140.211.11.23) by apache.org (qpsmtpd/0.29) with ESMTP; Mon, 15 May 2017 16:49:35 +0000 Received: by git1-us-west.apache.org (ASF Mail Server at git1-us-west.apache.org, from userid 33) id EAEFDDFBC8; Mon, 15 May 2017 16:49:34 +0000 (UTC) Content-Type: text/plain; charset="us-ascii" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit From: stack@apache.org To: commits@hbase.apache.org Message-Id: <80b3247b7b504250ac37b14c5d544c5c@git.apache.org> X-Mailer: ASF-Git Admin Mailer 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 +0000 (UTC) archived-at: Mon, 15 May 2017 16:49:36 -0000 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 Authored: Mon May 15 09:49:30 2017 -0700 Committer: Michael Stack 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 { 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; }