You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@hbase.apache.org by sy...@apache.org on 2016/12/10 23:06:48 UTC
hbase git commit: HBASE-17023 Region left unassigned due to AM and
SSH each thinking others would do the assignment work (Stephen Yuan Jiang)
Repository: hbase
Updated Branches:
refs/heads/branch-1 c2801a2ea -> e51584381
HBASE-17023 Region left unassigned due to AM and SSH each thinking others would do the assignment work (Stephen Yuan Jiang)
Project: http://git-wip-us.apache.org/repos/asf/hbase/repo
Commit: http://git-wip-us.apache.org/repos/asf/hbase/commit/e5158438
Tree: http://git-wip-us.apache.org/repos/asf/hbase/tree/e5158438
Diff: http://git-wip-us.apache.org/repos/asf/hbase/diff/e5158438
Branch: refs/heads/branch-1
Commit: e51584381ab9e5571c788870f6766b7e7f9b5976
Parents: c2801a2
Author: Stephen Yuan Jiang <sy...@gmail.com>
Authored: Sat Dec 10 15:05:00 2016 -0800
Committer: Stephen Yuan Jiang <sy...@gmail.com>
Committed: Sat Dec 10 15:05:00 2016 -0800
----------------------------------------------------------------------
.../hadoop/hbase/master/AssignmentManager.java | 3 +--
.../hadoop/hbase/master/RegionStates.java | 25 ++++++++++++++++++++
.../master/handler/ClosedRegionHandler.java | 3 +--
3 files changed, 27 insertions(+), 4 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/hbase/blob/e5158438/hbase-server/src/main/java/org/apache/hadoop/hbase/master/AssignmentManager.java
----------------------------------------------------------------------
diff --git a/hbase-server/src/main/java/org/apache/hadoop/hbase/master/AssignmentManager.java b/hbase-server/src/main/java/org/apache/hadoop/hbase/master/AssignmentManager.java
index 502b63f..2035f6a 100644
--- a/hbase-server/src/main/java/org/apache/hadoop/hbase/master/AssignmentManager.java
+++ b/hbase-server/src/main/java/org/apache/hadoop/hbase/master/AssignmentManager.java
@@ -864,8 +864,7 @@ public class AssignmentManager extends ZooKeeperListener {
case RS_ZK_REGION_CLOSED:
case RS_ZK_REGION_FAILED_OPEN:
// Region is closed, insert into RIT and handle it
- regionStates.setLastRegionServerOfRegion(sn, encodedName);
- regionStates.updateRegionState(regionInfo, State.CLOSED, sn);
+ regionStates.setRegionStateTOCLOSED(regionInfo, sn);
if (!replicasToClose.contains(regionInfo)) {
invokeAssign(regionInfo);
} else {
http://git-wip-us.apache.org/repos/asf/hbase/blob/e5158438/hbase-server/src/main/java/org/apache/hadoop/hbase/master/RegionStates.java
----------------------------------------------------------------------
diff --git a/hbase-server/src/main/java/org/apache/hadoop/hbase/master/RegionStates.java b/hbase-server/src/main/java/org/apache/hadoop/hbase/master/RegionStates.java
index d80784e..c2c45d2 100644
--- a/hbase-server/src/main/java/org/apache/hadoop/hbase/master/RegionStates.java
+++ b/hbase-server/src/main/java/org/apache/hadoop/hbase/master/RegionStates.java
@@ -420,6 +420,31 @@ public class RegionStates {
}
/**
+ * Set the region state to CLOSED
+ */
+ public RegionState setRegionStateTOCLOSED(
+ final HRegionInfo regionInfo,
+ final ServerName serverName) {
+ ServerName sn = serverName;
+ if (sn == null) {
+ RegionState regionState = getRegionState(regionInfo.getEncodedName());
+ if (regionState != null) {
+ sn = regionState.getServerName();
+ }
+ // TODO: if sn is null, should we dig into
+ // lastAssignments.get(regionInfo.getEncodedName() to get the server name?
+ // For now, I just keep the same logic that works in the past
+ }
+ // We have to make sure that the last region server is set to be the same as the
+ // current RS. If we don't do that, we could run into situation that both AM and SSH
+ // think other would do the assignment work; at the end, neither does the work and
+ // region remains RIT.
+ // See HBASE-13330 and HBASE-17023
+ setLastRegionServerOfRegion(sn, regionInfo.getEncodedName());
+ return updateRegionState(regionInfo, State.CLOSED, sn);
+ }
+
+ /**
* Update a region state. It will be put in transition if not already there.
*/
public RegionState updateRegionState(
http://git-wip-us.apache.org/repos/asf/hbase/blob/e5158438/hbase-server/src/main/java/org/apache/hadoop/hbase/master/handler/ClosedRegionHandler.java
----------------------------------------------------------------------
diff --git a/hbase-server/src/main/java/org/apache/hadoop/hbase/master/handler/ClosedRegionHandler.java b/hbase-server/src/main/java/org/apache/hadoop/hbase/master/handler/ClosedRegionHandler.java
index 277ad64..389a738 100644
--- a/hbase-server/src/main/java/org/apache/hadoop/hbase/master/handler/ClosedRegionHandler.java
+++ b/hbase-server/src/main/java/org/apache/hadoop/hbase/master/handler/ClosedRegionHandler.java
@@ -99,8 +99,7 @@ public class ClosedRegionHandler extends EventHandler implements TotesHRegionInf
return;
}
// ZK Node is in CLOSED state, assign it.
- assignmentManager.getRegionStates().updateRegionState(
- regionInfo, RegionState.State.CLOSED);
+ assignmentManager.getRegionStates().setRegionStateTOCLOSED(regionInfo, null);
// This below has to do w/ online enable/disable of a table
assignmentManager.removeClosedRegion(regionInfo);
assignmentManager.invokeAssign(regionInfo, false);