You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@hbase.apache.org by ap...@apache.org on 2015/09/26 03:20:19 UTC
[4/5] hbase git commit: HBASE-14407 NotServingRegion: hbase region
closed forever (Shuaifeng Zhou)
HBASE-14407 NotServingRegion: hbase region closed forever (Shuaifeng Zhou)
Project: http://git-wip-us.apache.org/repos/asf/hbase/repo
Commit: http://git-wip-us.apache.org/repos/asf/hbase/commit/0dd57174
Tree: http://git-wip-us.apache.org/repos/asf/hbase/tree/0dd57174
Diff: http://git-wip-us.apache.org/repos/asf/hbase/diff/0dd57174
Branch: refs/heads/branch-1
Commit: 0dd57174fa218598e7877ea172aa46f82e5d7ded
Parents: 286edd8
Author: Andrew Purtell <ap...@apache.org>
Authored: Fri Sep 25 17:56:42 2015 -0700
Committer: Andrew Purtell <ap...@apache.org>
Committed: Fri Sep 25 17:57:56 2015 -0700
----------------------------------------------------------------------
.../hadoop/hbase/master/AssignmentManager.java | 28 +++++++++++++++++++-
1 file changed, 27 insertions(+), 1 deletion(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/hbase/blob/0dd57174/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 7d9c5a0..f76bbf0 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
@@ -2295,7 +2295,33 @@ public class AssignmentManager extends ZooKeeperListener {
LOG.debug("ALREADY_OPENED " + region.getRegionNameAsString()
+ " to " + sn);
String encodedName = region.getEncodedName();
- deleteNodeInStates(encodedName, "offline", sn, EventType.M_ZK_REGION_OFFLINE);
+
+ //If use ZkForAssignment, region already Opened event should not be handled,
+ //leave it to zk event. See HBase-14407.
+ if(useZKForAssignment){
+ String node = ZKAssign.getNodeName(watcher, encodedName);
+ Stat stat = new Stat();
+ try {
+ byte[] existingBytes = ZKUtil.getDataNoWatch(watcher, node, stat);
+ if(existingBytes!=null){
+ RegionTransition rt= RegionTransition.parseFrom(existingBytes);
+ EventType et = rt.getEventType();
+ if (et.equals(EventType.RS_ZK_REGION_OPENED)) {
+ LOG.debug("ALREADY_OPENED " + region.getRegionNameAsString()
+ + " and node in "+et+" state");
+ return;
+ }
+ }
+ } catch (KeeperException ke) {
+ LOG.warn("Unexpected ZK exception getData " + node
+ + " node for the region " + encodedName, ke);
+ } catch (DeserializationException e) {
+ LOG.warn("Get RegionTransition from zk deserialization failed! ", e);
+ }
+
+ deleteNodeInStates(encodedName, "offline", sn, EventType.M_ZK_REGION_OFFLINE);
+ }
+
regionStates.regionOnline(region, sn);
}