Repository: hbase Updated Branches: refs/heads/0.98 9e1cd30c2 -> eb4b143b9 refs/heads/branch-1 286edd8b5 -> 0dd57174f refs/heads/branch-1.0 d35d03c0a -> 013987396 refs/heads/branch-1.1 0c1647664 -> b33b7f44f refs/heads/branch-1.2 7146b369e -> 8b9e70529
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/8b9e7052 Tree: http://git-wip-us.apache.org/repos/asf/hbase/tree/8b9e7052 Diff: http://git-wip-us.apache.org/repos/asf/hbase/diff/8b9e7052 Branch: refs/heads/branch-1.2 Commit: 8b9e705290af2456e3815d9409d3ebf3dba9c48e Parents: 7146b36 Author: Andrew Purtell <[email protected]> Authored: Fri Sep 25 17:56:42 2015 -0700 Committer: Andrew Purtell <[email protected]> Committed: Fri Sep 25 17:56:42 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/8b9e7052/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); }
