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, "");
    }
  • 相关阅读:
    多线程之volatile关键字
    多线程具体实现
    多线程的概述
    Linux基本目录机构
    Java13新特性
    CF1316D【Nash Matrix】(dfs+构造+思维)
    ego商城项目学习总结+出现问题及解决
    java.lang.OutOfMemoryError: GC overhead limit exceeded之tomcat7优化
    jsp在tomcat中更新不起作用
    js取值及赋值
  • 原文地址:https://www.cnblogs.com/allenwas3/p/12448279.html
Copyright © 2011-2022 走看看