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, "");
    }
  • 相关阅读:
    MySQL锁总结
    DDL和DML
    字节、字、位、比特之间的关系
    Mysql数据库、表设计规范指南
    Mysql性能优化关键配置指南
    3.python正则匹配不到内容时消耗大量内存
    1. postman使用
    2. python提示:TypeError: unhashable type: 'list'
    14. selenium的Page Object模型
    12.unittest的学习
  • 原文地址:https://www.cnblogs.com/allenwas3/p/12448279.html
Copyright © 2011-2022 走看看