From cce2f07151223323c9e1eaad0bb4f19df279aa04 Mon Sep 17 00:00:00 2001 From: zhangduo Date: Sat, 7 Mar 2015 15:31:36 +0800 Subject: [PATCH] HBASE-13136 TestSplitLogManager.testGetPreviousRecoveryMode is flakey --- .../hadoop/hbase/master/SplitLogManager.java | 23 ++++++++++++++++++---- .../apache/hadoop/hbase/zookeeper/ZKSplitLog.java | 13 ++++++++++++ 2 files changed, 32 insertions(+), 4 deletions(-) diff --git a/hbase-server/src/main/java/org/apache/hadoop/hbase/master/SplitLogManager.java b/hbase-server/src/main/java/org/apache/hadoop/hbase/master/SplitLogManager.java index c629718..28f614f 100644 --- a/hbase-server/src/main/java/org/apache/hadoop/hbase/master/SplitLogManager.java +++ b/hbase-server/src/main/java/org/apache/hadoop/hbase/master/SplitLogManager.java @@ -468,7 +468,7 @@ public class SplitLogManager extends ZooKeeperListener { ZKUtil.listChildrenNoWatch(watcher, watcher.splitLogZNode); if (tasks != null) { for (String t: tasks) { - if (!ZKSplitLog.isRescanNode(watcher, t)) { + if (!ZKSplitLog.isRescanNode(t)) { count++; } } @@ -509,7 +509,7 @@ public class SplitLogManager extends ZooKeeperListener { List tasks = ZKUtil.listChildrenNoWatch(watcher, watcher.splitLogZNode); if (tasks != null) { for (String t : tasks) { - if (!ZKSplitLog.isRescanNode(watcher, t)) { + if (!ZKSplitLog.isRescanNode(t)) { count++; } } @@ -1246,6 +1246,21 @@ public class SplitLogManager extends ZooKeeperListener { return result; } + private List listSplitLogTasks() throws KeeperException { + List taskOrRescanList = ZKUtil.listChildrenNoWatch(watcher, watcher.splitLogZNode); + if (taskOrRescanList == null || taskOrRescanList.isEmpty()) { + return Collections. emptyList(); + } + List taskList = new ArrayList(); + for (String taskOrRescan : taskOrRescanList) { + // Remove rescan nodes + if (!ZKSplitLog.isRescanNode(taskOrRescan)) { + taskList.add(taskOrRescan); + } + } + return taskList; + } + /** * This function is to set recovery mode from outstanding split log tasks from before or * current configuration setting @@ -1279,8 +1294,8 @@ public class SplitLogManager extends ZooKeeperListener { } if (previousRecoveryMode == RecoveryMode.UNKNOWN) { // Secondly check if there are outstanding split log task - List tasks = ZKUtil.listChildrenNoWatch(watcher, watcher.splitLogZNode); - if (tasks != null && !tasks.isEmpty()) { + List tasks = listSplitLogTasks(); + if (!tasks.isEmpty()) { hasSplitLogTask = true; if (isForInitialization) { // during initialization, try to get recovery mode from splitlogtask diff --git a/hbase-server/src/main/java/org/apache/hadoop/hbase/zookeeper/ZKSplitLog.java b/hbase-server/src/main/java/org/apache/hadoop/hbase/zookeeper/ZKSplitLog.java index 2d7cec9..eaf3975 100644 --- a/hbase-server/src/main/java/org/apache/hadoop/hbase/zookeeper/ZKSplitLog.java +++ b/hbase-server/src/main/java/org/apache/hadoop/hbase/zookeeper/ZKSplitLog.java @@ -74,6 +74,19 @@ public class ZKSplitLog { return ZKUtil.joinZNode(zkw.splitLogZNode, "RESCAN"); } + /** + * @param name the last part in path + * @return whether the node name represents a rescan node + */ + public static boolean isRescanNode(String name) { + return name.startsWith("RESCAN"); + } + + /** + * @param zkw + * @param path the absolute path, starts with '/' + * @return whether the path represents a rescan node + */ public static boolean isRescanNode(ZooKeeperWatcher zkw, String path) { String prefix = getRescanNode(zkw); if (path.length() <= prefix.length()) { -- 1.9.1