• dledger 选举


    节点初始状态为 candidate

    // io.openmessaging.storage.dledger.MemberState#role
    private volatile Role role = CANDIDATE;

    处理选举的逻辑在 DLedgerLeaderElector 类中

    io.openmessaging.storage.dledger.DLedgerLeaderElector#startup

    leader follower candidate 在选举过程中分别有不同的行为

    // io.openmessaging.storage.dledger.DLedgerLeaderElector#maintainState
    private void maintainState() throws Exception {
        if (memberState.isLeader()) {
            // leader 定期发送心跳给其他节点
            maintainAsLeader();
        } else if (memberState.isFollower()) {
            // follower 保持检查 leader 发送心跳的时间
            // 如果太久没有收到心跳,则转变为 candidate 开始拉票
            maintainAsFollower();
        } else {
            // candidate 努力向其他节点拉票
            // 收到过半投票,则成为 leader
            maintainAsCandidate();
        }
    }

    candidate 收到 leader 的心跳后,会转变为 follower

    处理心跳

    // io.openmessaging.storage.dledger.DLedgerLeaderElector#handleHeartBeat

    dledger 节点处理所有的网络请求

    // io.openmessaging.storage.dledger.DLedgerRpcNettyService

    不同类型的请求

    // io.openmessaging.storage.dledger.DLedgerRpcNettyService#processRequest
    
    public enum DLedgerRequestCode {
        UNKNOWN(-1, ""),
        METADATA(50000, ""),
        APPEND(50001, ""),
        GET(50002, ""),
        VOTE(51001, ""),
        HEART_BEAT(51002, ""),
        PULL(51003, ""),
        PUSH(51004, ""),
        LEADERSHIP_TRANSFER(51005, "");
    }
  • 相关阅读:
    在数据集下建立FeatureClass
    打开对话框保存对话框
    C# 向数据库中添加数据
    OleDbCommand OleDbDataAdapter比较研究素材
    C# 判断数据库是否存在某张表
    AE常见问题、异常处理
    制作停靠窗体、悬浮窗Dockpanel
    11. Container With Most Water(js)
    10. Regular Expression Matching(js)
    9. Palindrome Number(js)
  • 原文地址:https://www.cnblogs.com/allenwas3/p/12448279.html
Copyright © 2020-2023  润新知