zookeeper选举的zxid的疑问

发布于 2022-09-12 01:56:26 字数 173 浏览 27 评论 0

zk的每一个事务都会有一个唯一的事务id,这个id是一个64位的整数。前32位是逻辑时钟号,后32位是某个逻辑时钟下的单调递增的id,我的疑问是如果在一个任期内(前32位不变),后面的32位用尽了那么整个集群会怎么办?是重新选leader?还是leader不变然后将前32位加1后32位从0开始自增?如果前32位都用尽了又该怎么办?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

梦境 2022-09-19 01:56:26

int 溢出了你说会发生啥?从 0 开始了呗……

然后会触发 XidRolloverException 异常,重新选举。


P.S. 相关源码

public Proposal Leader#propose(Request request) throws XidRolloverException {
    /**
    * Address the rollover issue. All lower 32bits set indicate a new leader
    * election. Force a re-election instead. See ZOOKEEPER-1277
    */
    if ((request.zxid & 0xffffffffL) == 0xffffffffL) {
        String msg = "zxid lower 32 bits have rolled over, forcing re-election, and therefore new epoch start";
        shutdown(msg);
        throw new XidRolloverException(msg);
    }
}
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文