PhxPaxos源码分析之(2)提案申请篇

本文深入剖析了 PhxPaxos 协议中提案申请的控制逻辑,包括防止提案无序发起和避免活锁的策略。核心函数 NewValueGetIDNoRetry 和 WaitLock 逻辑确保了提案的有序发起。此外,通过 m_iRejectRate 策略调整,平衡了请求处理的效率和系统稳定性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

更多 blog 见: https://joeylichang.github.io/

  • 核心思想

在正式执行Paxos协议进行确定最终提案之前,需要先进行一些控制保证提案有序的进行。本部分的核心是提前发起量的控制,首先,在同一个节点上提案需要按顺序进行发起不能前一个提案还没有结束就进行下一个,这个比较好理解。其次,不能来了的请求都接受,因为会引起活锁的问题,在本题发起的时候进行流控可以有效的避免活锁。下面重点看一下提案发起前的一些控制逻辑。

  • 时序图

主要代码逻辑:

1. 由Commiter发起提案申请。

2. NewValueGetIDNoRetry函数执行核心的逻辑,包括加锁、加入请求队列、通过一定的控制策略决定是否允许发起提案。

3. m_poIOLoop->AddNotify(),通知主循环有提案发起,执行Paxos协议逻辑。

4. m_poCommitCtx->GetResult(llInstanceID)查看执行提案执行结果,并返回。

  • 源码解析

下面直接看一下核心函数NewValueGetIDNoRetry的逻辑:

int Committer :: NewValueGetIDNoRetry(const std::string & sValue, uint64_t & llInstanceID, SMCtx * poSMCtx)
{
    LogStatus();

    // 返回提案申请所用的
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值