在一个任期内,一个Raft 节点最多只能为一个候选人投票,按照先到先得的原则,投给最早来拉选票的候选人(注意:下文的"安全性"针对投票添加了一个额外的限制)
type Storage interface {
InitialState() (pb.HardState, pb.ConfState, error)
Entries(lo, hi, maxSize uint64) ([]pb.Entry, error)
Term(i uint64) (uint64, error)
LastIndex() (uint64, error) // 返回最后一条数据的索引
FirstIndex() (uint64, error) // 返回第一条数据的索引
Snapshot() (pb.Snapshot, error) // 反回最近的快照数据
}
var _ Storage = &MemoryStorage{}
type raftLog struct {
storage Storage // stable
unstable unstable
committed uint64
applied uint64
logger Logger
maxNextEntsSize uint64
}