Repository: hbase Updated Branches: refs/heads/branch-1.3 39a79d50f -> 728f58ad5
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/728f58ad Tree: http://git-wip-us.apache.org/repos/asf/hbase/tree/728f58ad Diff: http://git-wip-us.apache.org/repos/asf/hbase/diff/728f58ad Branch: refs/heads/branch-1.3 Commit: 728f58ad5f1e52264df58161fcbcea4ce8527a9d Parents: 39a79d5 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:05:24 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/728f58ad/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 be5bf6e..c13e212 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 @@ -553,17 +553,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/728f58ad/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 d89041d..f5fa0b7 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 @@ -481,9 +481,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; }