zoukankan      html  css  js  c++  java
  • phxpaxos实现状态机CAS操作

    看过了phxpaxos的实现,发现选主逻辑中非主也能够调用Propose。
    因此即使开启了选主功能,也可能会出现两个人同时Propose的场景。
    而Propose时,InstanceID只是作为输出而非输入。因此也无法保证CAS操作的一致性。

    目前想到的一种解决方案:
    修改Propose的内部实现,开启选主功能后,在确定实例的InstanceID时判断一下自己是不是主。非主时直接返回失败。(选主的Propose除外)

    CAS流程:
    成为主
    lock(状态机)
    读状态机
    Propose并Execute

    unlock(状态机)

    而调用Propose和Execute操作不是同一个线程,因此建议的方法是:

    Execute时判断SMCtx如果非nullptr(代表是自己Propose的并且有线程在等返回结果),直接return true.

    然后调用Propose的线程成功后更新状态机再放锁。

    同时还发现选主的逻辑有个可能的问题:有可能2个人同时抢主,两个请求都成功,导致两个人先后成为主。

  • 相关阅读:
    bzoj3110
    idea 设置系列 各种乱码
    vim 系列
    idea 神键
    简单工厂,工厂方法,抽象工厂
    log4 按包进行日志输出
    maven依赖本地宝
    kafka 理论学习
    kafka windows环境搭建 测试
    linux 查找文件的命令
  • 原文地址:https://www.cnblogs.com/niukuo/p/6912392.html
Copyright © 2011-2022 走看看