zoukankan      html  css  js  c++  java
  • 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, "");
    }
  • 相关阅读:
    块结构在文件中的表示IOB【转载】
    LSTM输入层、隐含层及输出层参数理解【转载】
    L3-002 特殊堆栈 (30 分) 模拟stl
    L1-006 连续因子 (20 分) 模拟
    L2-014 列车调度 (25 分)
    L3-021 神坛 (30 分) 计算几何
    P1156 垃圾陷阱 DP
    P1063 能量项链 区间dp
    P1040 加分二叉树 区间dp
    P1605 迷宫 dfs回溯法
  • 原文地址:https://www.cnblogs.com/allenwas3/p/12448279.html
Copyright © 2011-2022 走看看