You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@hbase.apache.org by "Jerry He (JIRA)" <ji...@apache.org> on 2014/04/17 22:39:21 UTC

[jira] [Created] (HBASE-11018) ZKUtil.getChildDataAndWatchForNewChildren() will not return null as indicated

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)