Jerry He created HBASE-11018: -------------------------------- Summary: ZKUtil.getChildDataAndWatchForNewChildren() will not return null as indicated Key: HBASE-11018 URL: https://issues.apache.org/jira/browse/HBASE-11018 Project: HBase Issue Type: Bug Components: Zookeeper Affects Versions: 0.98.1, 0.96.1 Reporter: Jerry He Assignee: Jerry He Priority: Minor
While working on HBase acl, I found out that ZKUtil.getChildDataAndWatchForNewChildren() will not return null as indicated. Here is the code: {code} /** .... * Returns null if the specified node does not exist. Otherwise returns a * list of children of the specified node. If the node exists but it has no * children, an empty list will be returned. .... */ public static List<NodeAndData> getChildDataAndWatchForNewChildren( ZooKeeperWatcher zkw, String baseNode) throws KeeperException { List<String> nodes = ZKUtil.listChildrenAndWatchForNewChildren(zkw, baseNode); List<NodeAndData> newNodes = new ArrayList<NodeAndData>(); if (nodes != null) { for (String node : nodes) { String nodePath = ZKUtil.joinZNode(baseNode, node); byte[] data = ZKUtil.getDataAndWatch(zkw, nodePath); newNodes.add(new NodeAndData(nodePath, data)); } } return newNodes; } {code} We return 'newNodes' which will never be null. This is a deprecated method. But it is still used in HBase code. For example: org.apache.hadoop.hbase.security.access.ZKPermissionWatcher.start() {code} public void start() throws KeeperException { watcher.registerListener(this); if (ZKUtil.watchAndCheckExists(watcher, aclZNode)) { List<ZKUtil.NodeAndData> existing = ZKUtil.getChildDataAndWatchForNewChildren(watcher, aclZNode); if (existing != null) { refreshNodes(existing); } } } {code} We test the 'null' return from the call which becomes the problem. -- This message was sent by Atlassian JIRA (v6.2#6252)