2021SC@SDUSC
从ZKDatabase说起
ZKDatabase类维护着zookeeper的内存数据库,具体包括了数据树,会话信息和事务提交日志等。启动的时候读取磁盘上的日志和快照,把相关信息load到内存里面。
首先,我们不妨来看一下ZKDatabase类的静态变量和成员变量。
//为该类创建日志记录器
private static final Logger LOG = LoggerFactory.getLogger(ZKDatabase.class);
//要维护的四个成员变量
protected DataTree dataTree;
protected ConcurrentHashMap<Long, Integer> sessionsWithTimeouts;
protected FileTxnSnapLog snapLog;
protected long minCommittedLog, maxCommittedLog;
dataTree:维护了树形数据结构,不包含任何网络相关或客户端连接相关的代码。
sessionWithTimeouts:存储sessionID和对应的过期时间,使用并发哈希表ConcurrentHashMap作为变量类型,这是HashMap的一个线程安全的、支持高效并发的版本。
(PS:这里简单介绍一下sessionID和对应的过期时间的含义。
sessionID: 会话ID,用来唯一标识一个会话,每次客户端创建会话的时候,zooke