In most places in the server side code, internal variables are accessed
directly via something like, node.parent... instead of making the variable
private and using getters and setters, what is the purpose of this?
Another question is why the synchronization on for example the DataNode is
done on the node itself and not on the variables access, it seems reasonable
to me that 2 different threads would be allowed to modify for example the
data and the children at the same time, or is there something that I'm
missing here, watchers?