raft: rename log.len to log.lastIndex
This commit is contained in:
12
raft/log.go
12
raft/log.go
@ -32,19 +32,19 @@ func (l *log) append(after int, ents ...Entry) int {
|
|||||||
return len(l.ents) - 1
|
return len(l.ents) - 1
|
||||||
}
|
}
|
||||||
|
|
||||||
func (l *log) len() int {
|
func (l *log) lastIndex() int {
|
||||||
return len(l.ents) - 1
|
return len(l.ents) - 1
|
||||||
}
|
}
|
||||||
|
|
||||||
func (l *log) term(i int) int {
|
func (l *log) term(i int) int {
|
||||||
if i > l.len() {
|
if i > l.lastIndex() {
|
||||||
return -1
|
return -1
|
||||||
}
|
}
|
||||||
return l.ents[i].Term
|
return l.ents[i].Term
|
||||||
}
|
}
|
||||||
|
|
||||||
func (l *log) entries(i int) []Entry {
|
func (l *log) entries(i int) []Entry {
|
||||||
if i > l.len() {
|
if i > l.lastIndex() {
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
return l.ents[i:]
|
return l.ents[i:]
|
||||||
@ -54,12 +54,12 @@ func (l *log) isUpToDate(i, term int) bool {
|
|||||||
// LET upToDate == \/ m.mlastLogTerm > LastTerm(log[i])
|
// LET upToDate == \/ m.mlastLogTerm > LastTerm(log[i])
|
||||||
// \/ /\ m.mlastLogTerm = LastTerm(log[i])
|
// \/ /\ m.mlastLogTerm = LastTerm(log[i])
|
||||||
// /\ m.mlastLogIndex >= Len(log[i])
|
// /\ m.mlastLogIndex >= Len(log[i])
|
||||||
e := l.ents[l.len()]
|
e := l.ents[l.lastIndex()]
|
||||||
return term > e.Term || (term == e.Term && i >= l.len())
|
return term > e.Term || (term == e.Term && i >= l.lastIndex())
|
||||||
}
|
}
|
||||||
|
|
||||||
func (l *log) matchTerm(i, term int) bool {
|
func (l *log) matchTerm(i, term int) bool {
|
||||||
if i > l.len() {
|
if i > l.lastIndex() {
|
||||||
return false
|
return false
|
||||||
}
|
}
|
||||||
return l.ents[i].Term == term
|
return l.ents[i].Term == term
|
||||||
|
14
raft/raft.go
14
raft/raft.go
@ -185,7 +185,7 @@ func (sm *stateMachine) reset() {
|
|||||||
sm.votes = make(map[int]bool)
|
sm.votes = make(map[int]bool)
|
||||||
sm.ins = make([]*index, sm.k)
|
sm.ins = make([]*index, sm.k)
|
||||||
for i := range sm.ins {
|
for i := range sm.ins {
|
||||||
sm.ins[i] = &index{next: sm.log.len() + 1}
|
sm.ins[i] = &index{next: sm.log.lastIndex() + 1}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -197,10 +197,6 @@ func (sm *stateMachine) voteWorthy(i, term int) bool {
|
|||||||
return sm.log.isUpToDate(i, term)
|
return sm.log.isUpToDate(i, term)
|
||||||
}
|
}
|
||||||
|
|
||||||
func (sm *stateMachine) li() int {
|
|
||||||
return sm.log.len()
|
|
||||||
}
|
|
||||||
|
|
||||||
func (sm *stateMachine) becomeFollower(term, lead int) {
|
func (sm *stateMachine) becomeFollower(term, lead int) {
|
||||||
sm.reset()
|
sm.reset()
|
||||||
sm.term = term
|
sm.term = term
|
||||||
@ -245,14 +241,14 @@ func (sm *stateMachine) Step(m Message) {
|
|||||||
if i == sm.addr {
|
if i == sm.addr {
|
||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
lasti := sm.li()
|
lasti := sm.log.lastIndex()
|
||||||
sm.send(Message{To: i, Type: msgVote, Index: lasti, LogTerm: sm.log.term(lasti)})
|
sm.send(Message{To: i, Type: msgVote, Index: lasti, LogTerm: sm.log.term(lasti)})
|
||||||
}
|
}
|
||||||
return
|
return
|
||||||
case msgProp:
|
case msgProp:
|
||||||
switch sm.lead {
|
switch sm.lead {
|
||||||
case sm.addr:
|
case sm.addr:
|
||||||
sm.log.append(sm.log.len(), Entry{Term: sm.term, Data: m.Data})
|
sm.log.append(sm.log.lastIndex(), Entry{Term: sm.term, Data: m.Data})
|
||||||
sm.sendAppend()
|
sm.sendAppend()
|
||||||
case none:
|
case none:
|
||||||
panic("msgProp given without leader")
|
panic("msgProp given without leader")
|
||||||
@ -275,7 +271,7 @@ func (sm *stateMachine) Step(m Message) {
|
|||||||
if sm.log.matchTerm(m.Index, m.LogTerm) {
|
if sm.log.matchTerm(m.Index, m.LogTerm) {
|
||||||
sm.log.commit = m.Commit
|
sm.log.commit = m.Commit
|
||||||
sm.log.append(m.Index, m.Entries...)
|
sm.log.append(m.Index, m.Entries...)
|
||||||
sm.send(Message{To: m.From, Type: msgAppResp, Index: sm.li()})
|
sm.send(Message{To: m.From, Type: msgAppResp, Index: sm.log.lastIndex()})
|
||||||
} else {
|
} else {
|
||||||
sm.send(Message{To: m.From, Type: msgAppResp, Index: -1})
|
sm.send(Message{To: m.From, Type: msgAppResp, Index: -1})
|
||||||
}
|
}
|
||||||
@ -317,7 +313,7 @@ func (sm *stateMachine) Step(m Message) {
|
|||||||
handleAppendEntries()
|
handleAppendEntries()
|
||||||
case msgVote:
|
case msgVote:
|
||||||
if sm.voteWorthy(m.Index, m.LogTerm) {
|
if sm.voteWorthy(m.Index, m.LogTerm) {
|
||||||
sm.send(Message{To: m.From, Type: msgVoteResp, Index: sm.li()})
|
sm.send(Message{To: m.From, Type: msgVoteResp, Index: sm.log.lastIndex()})
|
||||||
} else {
|
} else {
|
||||||
sm.send(Message{To: m.From, Type: msgVoteResp, Index: -1})
|
sm.send(Message{To: m.From, Type: msgVoteResp, Index: -1})
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user