На выборах лидера плота, как живой ответ лидера на RequestVote rpc от кандидата?
Я читаю плот бумаги.
По запросу голосовать,
Реализация получателя: 1. Ответ false, если term
в некоторых ситуациях срок кандидата равен текущему сроку лидера, так как же лидер отвечает на запрос RequestVote rpc от кандидата?
1 ответ
Давайте выберем это в более человеческом смысле:
- Если голосование от более старого срока (
term < currentTerm
), игнорируй это. - Если мы не проголосовали в этом сроке (
votedFor is null
) или если это голосование за того же кандидата, которого мы голосовали в последний раз в этом сроке (votedFor == candidateId
), а затем предоставьте голосование, если журнал кандидатов обновлен.
Помните, что лидеры голосуют за себя в определенный срок.
Это означает, что для term == currentTerm
Лидер будет иметь votedFor
равных себе. Это не является нулем, поэтому единственный способ предоставить этот голос, если candidateId
сам по себе - то есть, он голосует за себя в текущем сроке. Во всех остальных случаях он не предоставит право голоса.
Главное, что нужно помнить (на самом деле ключевой инвариант во всем этом), это то, что сервер никогда не голосует более одного раза за один и тот же срок. Как только он проголосовал за срок, он становится окончательным. А поскольку лидер голосует за себя, когда он получает другие запросы на тот же срок, он не будет удовлетворять его.