raft: rename log.len to log.lastIndex

This commit is contained in:
Xiang Li
2014-05-27 22:50:47 -07:00
committed by Yicheng Qin
parent 8f3d109c18
commit 092461d7c8
2 changed files with 11 additions and 15 deletions

View File

@ -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

View File

@ -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})
} }