baidu / braft

An industrial-grade C++ implementation of RAFT consensus algorithm based on brpc, widely used inside Baidu to build highly-available distributed systems.
Apache License 2.0
3.95k stars 881 forks source link

set st to idle when block timeout #401

Closed pengchenglv closed 1 year ago

pengchenglv commented 1 year ago

replicator blocking状态超时后,需要将状态改回idle。

https://github.com/baidu/braft/blob/334730e618c03bf2989eda474fc600953e000ec0/src/braft/replicator.cpp#L773

if (_options.snapshot_throttle && !_options.snapshot_throttle->
                                        add_one_more_task(true)) {
    return _block(butil::gettimeofday_us(), EBUSY);
}

如果使用braft默认的SnapshotThrottle,leader在add_one_more_task一定返回true;如果用户自己实现一个SnapshotThrottle,在leader处限制安装快照的任务数,add_one_more_task可能返回false。之后进入_block函数,再也不会send_entry了

pengchenglv commented 1 year ago

@PFZheng hi, looking forward to your review