Zookeeper 源码阅读-如何组织配置节点

Zookeeper的配置节点组织在一个DataTree中,所有的配置节点都保存在ConcurrentHashMap中,该HASHMAP Key是节点的全路径;DataNode是值,DataNode中保存了节点的配置数据和节点的子节点名。

大概的结构如下:

Zookeeper 源码阅读-如何组织配置节点_第1张图片

public class DataTree {

    /**
     * This hashtable provides a fast lookup to the datanodes. The tree is the
     * source of truth and is where all the locking occurs
     */
    //String    节点的全路径
    //DataNode  节点数据
    private final ConcurrentHashMap nodes =
        new ConcurrentHashMap();
    
    ………………

    public void createNode(final String path, byte data[], List acl,
            long ephemeralOwner, int parentCVersion, long zxid, long time, Stat outputStat)
            throws KeeperException.NoNodeException,
            KeeperException.NodeExistsException {

        int lastSlash = path.lastIndexOf('/');
        //获取父节点
        String parentName = path.substring(0, lastSlash);
        //当前要创建的节点
        String childName = path.substring(lastSlash + 1);
        ………………
        //获取创建节点的父节点
        DataNode parent = nodes.get(parentName);
        ………………
        //创建该节点的DataNode 
        DataNode child = new DataNode(data, longval, stat);
        //将该节点名添加到父节点中
        parent.addChild(childName);
        //将该节点的全路径添加到DataTree中
        nodes.put(path, child);
    }

 

你可能感兴趣的:(JAVA学习)