[
https://issues.apache.org/jira/browse/HBASE-11018?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]
Jerry He updated HBASE-11018:
-----------------------------
Attachment: HBASE-11018-trunk.patch
> 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.96.1, 0.98.1
> Reporter: Jerry He
> Assignee: Jerry He
> Priority: Minor
> Attachments: HBASE-11018-trunk.patch
>
>
> 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)