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)