Repository: hbase Updated Branches: refs/heads/branch-1 df25ebf84 -> 5ac2776d2
HBASE-16732 Avoid possible NPE in MetaTableLocator Project: http://git-wip-us.apache.org/repos/asf/hbase/repo Commit: http://git-wip-us.apache.org/repos/asf/hbase/commit/5ac2776d Tree: http://git-wip-us.apache.org/repos/asf/hbase/tree/5ac2776d Diff: http://git-wip-us.apache.org/repos/asf/hbase/diff/5ac2776d Branch: refs/heads/branch-1 Commit: 5ac2776d2394c339f4bfee99de1150387e0d92e4 Parents: df25ebf Author: Jerry He <jerry...@apache.org> Authored: Thu Sep 29 13:44:59 2016 -0700 Committer: Jerry He <jerry...@apache.org> Committed: Thu Sep 29 14:14:01 2016 -0700 ---------------------------------------------------------------------- .../hadoop/hbase/zookeeper/MetaTableLocator.java | 13 ++++++++----- .../hadoop/hbase/zookeeper/ZooKeeperWatcher.java | 8 +++++--- 2 files changed, 13 insertions(+), 8 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/hbase/blob/5ac2776d/hbase-client/src/main/java/org/apache/hadoop/hbase/zookeeper/MetaTableLocator.java ---------------------------------------------------------------------- diff --git a/hbase-client/src/main/java/org/apache/hadoop/hbase/zookeeper/MetaTableLocator.java b/hbase-client/src/main/java/org/apache/hadoop/hbase/zookeeper/MetaTableLocator.java index 40b84cf..1630d83 100644 --- a/hbase-client/src/main/java/org/apache/hadoop/hbase/zookeeper/MetaTableLocator.java +++ b/hbase-client/src/main/java/org/apache/hadoop/hbase/zookeeper/MetaTableLocator.java @@ -554,17 +554,20 @@ public class MetaTableLocator { final long timeout, Configuration conf) throws InterruptedException { int numReplicasConfigured = 1; + + List<ServerName> servers = new ArrayList<ServerName>(); + // Make the blocking call first so that we do the wait to know + // the znodes are all in place or timeout. + ServerName server = blockUntilAvailable(zkw, timeout); + if (server == null) return null; + servers.add(server); + try { List<String> metaReplicaNodes = zkw.getMetaReplicaNodes(); numReplicasConfigured = metaReplicaNodes.size(); } catch (KeeperException e) { LOG.warn("Got ZK exception " + e); } - List<ServerName> servers = new ArrayList<ServerName>(numReplicasConfigured); - ServerName server = blockUntilAvailable(zkw, timeout); - if (server == null) return null; - servers.add(server); - for (int replicaId = 1; replicaId < numReplicasConfigured; replicaId++) { // return all replica locations for the meta servers.add(getMetaRegionLocation(zkw, replicaId)); http://git-wip-us.apache.org/repos/asf/hbase/blob/5ac2776d/hbase-client/src/main/java/org/apache/hadoop/hbase/zookeeper/ZooKeeperWatcher.java ---------------------------------------------------------------------- diff --git a/hbase-client/src/main/java/org/apache/hadoop/hbase/zookeeper/ZooKeeperWatcher.java b/hbase-client/src/main/java/org/apache/hadoop/hbase/zookeeper/ZooKeeperWatcher.java index ce209d6..f333cd5 100644 --- a/hbase-client/src/main/java/org/apache/hadoop/hbase/zookeeper/ZooKeeperWatcher.java +++ b/hbase-client/src/main/java/org/apache/hadoop/hbase/zookeeper/ZooKeeperWatcher.java @@ -496,9 +496,11 @@ public class ZooKeeperWatcher implements Watcher, Abortable, Closeable { public List<String> getMetaReplicaNodes() throws KeeperException { List<String> childrenOfBaseNode = ZKUtil.listChildrenNoWatch(this, baseZNode); List<String> metaReplicaNodes = new ArrayList<String>(2); - String pattern = conf.get("zookeeper.znode.metaserver","meta-region-server"); - for (String child : childrenOfBaseNode) { - if (child.startsWith(pattern)) metaReplicaNodes.add(child); + if (childrenOfBaseNode != null) { + String pattern = conf.get("zookeeper.znode.metaserver","meta-region-server"); + for (String child : childrenOfBaseNode) { + if (child.startsWith(pattern)) metaReplicaNodes.add(child); + } } return metaReplicaNodes; }