zookeeper源码解析(二)

本文深入解析Zookeeper中DigestCalculator的实现,它使用CRC校验确保数据完整性,同时也讨论StatPersisted如何维护数据节点的元信息,包括创建、修改时间、权限等关键属性。
摘要由CSDN通过智能技术生成

2021SC@SDUSC 

前言

本文介绍上一篇文章中DataTree构造函数传入的参数digestCalculator,来看一下它所属的类。

DigestCalculator

该类的对象主要用于计算一个给定的数据节点的digest,关于digest,我想应该是和hash有关的一种说法,我们知道hash将大范围的数据映射到小范围,在加密领域,通常会体现会得到一个固定长度的数字或字符串,称为消息摘要,所以称digest。

而在该类中,主要是使用CRC校验,来保障数据的完整性,这相比于hash函数,不具有保障不被“碰撞”的能力。(碰撞是说两个不同的输入,hash后是同一个值)

该类的构造函数是默认无参构造函数。

该类主要的函数如下:

    long calculateDigest(String path, byte[] data, StatPersisted stat) {

        if (!ZooKeeperServer.isDigestEnabled()) {
            return 0;
        }

        
        if (path.startsWith(ZooDefs.ZOOKEEPER_NODE_SUBTREE)) {
            return 0;
        }

        
        if (path.equals("/")) {
            path = "";
        }

        byte[] b = new byte[60];
        ByteBuffer bb = ByteBuffer.wrap(b);
        bb.putLong(stat.getCzxid());
       
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值