zookeeper源码-State(czxid、mzxid..)节点数据结构

类:org.apache.zookeeper.data.Stat

作用:数据节点的数据对象

@InterfaceAudience.Public
public class Stat implements Record {
  private long czxid; // 该数据节点被创建时的事务id
  private long mzxid; // 该数据节点被修改时最新的事物id
  private long ctime; // 该数据节点创建时间
  private long mtime; // 该数据节点最后修改时间
  private int version; // 当前节点版本号(可以理解为修改次数,每修改一次值+1)
  private int cversion;// 子节点版本号(子节点修改次数,每修改一次值+1)
  private int aversion; // 当前节点acl版本号(acl节点被修改次数,每修改一次值+1)
  private long ephemeralOwner; // 临时节点标示,当前节点如果是临时节点,则存储的创建者的会话id(sessionId),如果不是,那么值=0
  private int dataLength;// 当前节点数据长度
  private int numChildren; // 当前节点子节点个数
  private long pzxid; // 当前节点的父级节点事务ID
  public Stat() {
  }
}

其中zxid表示的是zookeeper的事务ID,由64位数字组成,分为高32位和低32位

高32位:Epoch周期数,值为最新的领导的对应的id,其实就是就是一个递增的数字

低32位:计数器,一个递增的计数器,当处理了一个事务,值+1

 

          Epoch

Counter

                                    高32位                                                                        低32位

 

zxid生成的规则:ZxidUtils.makeZxid

public class ZxidUtils {

    public static long getEpochFromZxid(long zxid) {
        return zxid >> 32L;
    }
    public static long getCounterFromZxid(long zxid) {
        return zxid & 0xffffffffL;
    }
    public static long makeZxid(long epoch, long counter) {
        return (epoch << 32L) | (counter & 0xffffffffL);
    }
    public static String zxidToString(long zxid) {
        return Long.toHexString(zxid);
    }

}

你可能感兴趣的:(zookeeper)