ZKDatabase: zk内存数据存储的核心类,维护了DataTree。
DataTree:zk存储的数据结构,以树的形式保存,代表了内存中一份完整的数据
DataNode: 叶子节点,存储节点数据。
节点未成为主节点且未设置为observer,此时该节点就处于Follower状态。
代码参考zk解析(1)-zk集群启动及选主:
org.apache.zookeeper.server.quorum.QuorumPeer#run
org.apache.zookeeper.server.quorum.Follower#followLeader
QuorumPeer#run处于FOLLOWING状态时执行follower.followLeader();
1
2
3
4
5
6
7
8
9
10
11
12
13 case FOLLOWING:
try {
LOG.info("FOLLOWING");
setFollower(makeFollower(logFactory));
follower.followLeader();
} catch (Exception e) {
LOG.warn("Unexpected exception",e);
} finally {
follower.shutdown();
setFollower(null);
setPeerState(ServerState.LOOKING);
}
break;