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)