raft: remove quorum() dependency from readOnly

This now delegates the quorum computation to r.prs, which will allow
it to generalize in a straightforward way when etcd-io/etcd#7625 is
addressed.
This commit is contained in:
Tobias Schottdorf
2019-04-26 15:56:39 +02:00
parent 57a1b39fcd
commit 02b0d80234
3 changed files with 16 additions and 12 deletions

View File

@@ -1000,6 +1000,8 @@ func stepLeader(r *raft, m pb.Message) error {
switch r.readOnly.option {
case ReadOnlySafe:
r.readOnly.addRequest(r.raftLog.committed, m)
// The local node automatically acks the request.
r.readOnly.recvAck(r.id, m.Entries[0].Data)
r.bcastHeartbeatWithCtx(m.Entries[0].Data)
case ReadOnlyLeaseBased:
ri := r.raftLog.committed
@@ -1097,8 +1099,7 @@ func stepLeader(r *raft, m pb.Message) error {
return nil
}
ackCount := r.readOnly.recvAck(m)
if ackCount < r.prs.quorum() {
if !r.prs.hasQuorum(r.readOnly.recvAck(m.From, m.Context)) {
return nil
}