zookeeper源码之服务端数据库管理中心

  负责管理ZooKeeper整个数据。主要管理树结构数据、session数据、持久化管理。

类图

  

ZKDatabase

  ZooKeeper数据管理门户类,底层通过DataTree来管理树结构,通过FileTxnSnapLog来管理数据持久化。

初始化

  初始化过程主要是从持久化文件中恢复数据,通过FileTxnSnapLog实现。

    public long loadDataBase() throws IOException {
        ...long zxid = snapLog.restore(dataTree,sessionsWithTimeouts,listener);
        initialized = true;
        return zxid;
    }

树结构管理

  树结构管理主要通过DataTree来实现。

...
public byte[] getData(String path, Stat stat, Watcher watcher)
    throws KeeperException.NoNodeException {
        return dataTree.getData(path, stat, watcher);
    }
    public void setWatches(long relativeZxid, List<String> dataWatches,
            List<String> existWatches, List<String> childWatches, Watcher watcher) {
        dataTree.setWatches(relativeZxid, dataWatches, existWatches, childWatches, watcher);
    }
    public List<ACL> getACL(String path, Stat stat) throws NoNodeException {
        return dataTree.getACL(path, stat);
    }
...

持久化管理

  持久化管理主要通过FileTxnSnapLog和SerializeUtils来实现。

    public boolean append(Request si) throws IOException {
        return this.snapLog.append(si);
    }
    public void rollLog() throws IOException {
        this.snapLog.rollLog();
    }
    public void commit() throws IOException {
        this.snapLog.commit();
    }
    public void close() throws IOException {
        this.snapLog.close();
    } 
    public void deserializeSnapshot(InputArchive ia) throws IOException {
        clear();
        SerializeUtils.deserializeSnapshot(getDataTree(),ia,getSessionWithTimeOuts());
        initialized = true;
    }   

    public void serializeSnapshot(OutputArchive oa) throws IOException,
    InterruptedException {
        SerializeUtils.serializeSnapshot(getDataTree(), oa, getSessionWithTimeOuts());
    }

DataTree

  管理树结构数据,详见:ZooKeeper源码之服务端树结构管理

FileTxnSnapLog

  管理持久化数据,详见:ZooKeeper源码之服务端持久化管理。

原文地址:https://www.cnblogs.com/zhangwanhua/p/8472303.html

时间: 2024-10-06 20:44:09

zookeeper源码之服务端数据库管理中心的相关文章

zookeeper源码之服务端启动模块

服务端启动模块主要负责解析配置文件,启动服务器监听并执行zookeeper命令. 类图 QuorumPeerMain QuorumPeerMain是服务端主程序,主要功能是解析配置文件,启动zookeeper服务.内部使用QuorumPeerConfig来解析配置文件:使用QuorumPeer来解析命令:使用QuorumPeer来启动zookeeper服务. QuorumPeerConfig 解析properties配置文件zoo.cfg,主要获取一下信息: 配置 说明 dataDir 数据存放

zookeeper源码之服务端

zookeeper服务端主要包括一下几个模块: 1.启动模块. 启动模块 读取配置文件,启动程序.详见:zookeeper源码之服务端启动模块. 原文地址:https://www.cnblogs.com/zhangwanhua/p/8454784.html

kbengine mmo源码(完整服务端源码+资源+完整客户端源码)

kbengine mmo源码(完整服务端源码+资源+完整客户端源码) PyConsole: display server information. PyConsole: Stop the server. Guiconsole: debug. Guiconsole: log. Demo: Ogre. Demo: Unity3d. demo视频:http://v.youku.com/v_show/id_XNjU5Nzc0MDQ4.html 下载地址: demo下载地址:http://sourcefo

多人在线扑克游戏源码带服务端完整版

多人在线扑克游戏源码带服务端完整版,本项目源码是一套网络版的扑克牌项目源码,带服务器端源码,服务器端也是用java做的,打开游戏以后需要配置IP服务器端的IP和端口,服务端默认监听9999端口,客户端ip填写10.0.2.2,端口信息不用管直接点连接就可以连接到电脑上的服务端.项目源码注释比较丰富,可以研究一下里面的算法之类的.搭建这个服务端环境废了我半天劲,不知道是不是我运行的方法不对,打开前两个游戏客户端没有问题,打开第三个就开始直接强制退出.游戏没玩成所以没有截那部分的图.<ignore_

网狐6878完整大厅源码+完美服务端组件+金蟾捕鱼(完美库存)

网狐6878完整大厅源码+完美服务端组件+金蟾捕鱼(完美库存+前台控制)运营版!源码完整,可有朋友架设成功.看图,带多款游戏.本源码不提供技术服务请自行解决.大家互相学习一起研究. 源码下载:http://www.yxkfw.com/thread-4773-1-1.html

MMORPG网页游戏斩仙录全套源码(服务端+客户端)

斩仙录全套源码(服务端+客户端),<斩仙录>是一款具有浓厚中国风的仙侠MMORPG网页游戏,游戏的背景取材于中国瑰丽多姿的神话故事和民间佳传,玩家可以穿越时空与不同时代的著名人物相遇,共同演绎改编自<山海经>.<白蛇传>.<倩女幽魂>.<画皮>.<精卫填海>.<西游记>.<封神榜>等传世佳作中的精彩桥段. 游戏的美术神话风很强,服务端用c++开发,网页端用flash as+js开发,含fla源文件,解压后702

netty 5 alph1源码分析(服务端创建过程)

参照<Netty系列之Netty 服务端创建>,研究了netty的服务端创建过程.至于netty的优势,可以参照网络其他文章.<Netty系列之Netty 服务端创建>是 李林锋撰写的netty源码分析的一篇好文,绝对是技术干货.但抛开技术来说,也存在一些瑕疵. 缺点如下 代码衔接不连贯,上下不连贯. 代码片段是截图,对阅读代理不便(可能和阅读习惯有关) 本篇主要内容,参照<Netty系列之Netty 服务端创建>,梳理出自己喜欢的阅读风格. 1.整体逻辑图 整体将服务

手游 mmo游戏源码(完整服务端源码+资源+完整客户端)

Demo: Ogre. Demo: Unity3d. PyConsole: display server information. PyConsole: Stop the server. Guiconsole: debug. Guiconsole: log. demo视频:http://v.youku.com/v_show/id_XNjU5Nzc0MDQ4.htmldemo下载地址:http://sourceforge.net/projects/kbengine/files/服务端源码:http

Hadoop RPC源码阅读-服务端Server

RPC服务端的实例代码: public class Starter { public static void main(String[] args) throws IOException { RPC.Builder build = new RPC.Builder(new Configuration()); build.setBindAddress("localhost").setPort(10000).setProtocol(LoginServiceInterface.class).s