[
https://issues.apache.org/jira/browse/ZOOKEEPER-2680?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel=15842908#comment-15842908
]
Edward Ribeiro commented on ZOOKEEPER-2680:
---
A few comments:
{code}
private static Set EMPTY_SET = Collections.unmodifiableSet(new
HashSet(0));
{code}
is lacking the *final* modifier. Also, it can be:
{code}
private static final Set EMPTY_SET = Collections.emptySet();
{code}
About {{DataNode.setChildren()}} (would love the comments of [~breed] and
[~fpj], as I can be about to write something utterly stupid :o) ):
{code}
public synchronized void setChildren(HashSet children) {
this.children = children;
}
{code}
The code above could potentially pass a null. Is this behaviour expected? Say,
instead of providing a {{DataNode.clear()}} method we just pass
{{DataNode.setChildren(null)}} to reset all the children? Also, passing an
alien reference (children) that can be changed outside the scope of
{{DataNode}} seems potentially dangerous too. IMHO, {{DataNode.setChildren}}
could have been coded more defensively. I would have done something akin the
code below, but *of course* performance considerations should be taken into
account.
{code}
public synchronized void setChildren(Set children) {
if (children == null || children.isEmpty()) // isEmpty() is optional
return;
if (this.children == null)
this.children = new HashSet<>(8);
this.children.addAll(children);
}
// new method
public synchronized void clear() {
children.clear();
}
{code}
All in all, I am +1 with this patch. :) Only took the opportunity to clarify
this {{DataNode.setChildren}} method use, but I think we can commit this patch
without changing the method just cited.
> Correct DataNode.getChildren() inconsistent behavior.
> -
>
> Key: ZOOKEEPER-2680
> URL: https://issues.apache.org/jira/browse/ZOOKEEPER-2680
> Project: ZooKeeper
> Issue Type: Bug
> Components: server
>Affects Versions: 3.4.9, 3.5.1
>Reporter: Mohammad Arshad
>Assignee: Mohammad Arshad
> Fix For: 3.4.10, 3.5.3, 3.6.0
>
> Attachments: ZOOKEEPER-2680-01.patch
>
>
> DataNode.getChildren() API returns null and empty set if there are no
> children in it depending on when the API is called. DataNode.getChildren()
> API behavior should be changed and it should always return empty set if the
> node does not have any child
> *DataNode.getChildren() API Current Behavior:*
> # returns null initially
> When DataNode is created and no children are added yet,
> DataNode.getChildren() returns null
> # returns empty set after all the children are deleted:
> created a Node
> add a child
> delete the child
> DataNode.getChildren() returns empty set.
> After fix DataNode.getChildren() should return empty set in all the above
> cases.
--
This message was sent by Atlassian JIRA
(v6.3.4#6332)