From 044e35b8144777e7686c4b8eab692e368ba35362 Mon Sep 17 00:00:00 2001 From: Xiang Li Date: Mon, 15 Dec 2014 11:25:35 -0800 Subject: [PATCH] raft: use newRaft --- raft/raft.go | 1 - raft/raft_test.go | 82 ++++++++++++++++++----------------------------- 2 files changed, 32 insertions(+), 51 deletions(-) diff --git a/raft/raft.go b/raft/raft.go index 934e9b5cf..2f42cfabc 100644 --- a/raft/raft.go +++ b/raft/raft.go @@ -279,7 +279,6 @@ func (r *raft) maybeCommit() bool { } sort.Sort(sort.Reverse(mis)) mci := mis[r.q()-1] - return r.raftLog.maybeCommit(mci, r.Term) } diff --git a/raft/raft_test.go b/raft/raft_test.go index 0b1bcb2c6..e63d16dab 100644 --- a/raft/raft_test.go +++ b/raft/raft_test.go @@ -559,35 +559,34 @@ func TestCommit(t *testing.T) { w uint64 }{ // single - {[]uint64{1}, []pb.Entry{{}, {Term: 1}}, 1, 1}, - {[]uint64{1}, []pb.Entry{{}, {Term: 1}}, 2, 0}, - {[]uint64{2}, []pb.Entry{{}, {Term: 1}, {Term: 2}}, 2, 2}, - {[]uint64{1}, []pb.Entry{{}, {Term: 2}}, 2, 1}, + {[]uint64{1}, []pb.Entry{{Index: 1, Term: 1}}, 1, 1}, + {[]uint64{1}, []pb.Entry{{Index: 1, Term: 1}}, 2, 0}, + {[]uint64{2}, []pb.Entry{{Index: 1, Term: 1}, {Index: 2, Term: 2}}, 2, 2}, + {[]uint64{1}, []pb.Entry{{Index: 1, Term: 2}}, 2, 1}, // odd - {[]uint64{2, 1, 1}, []pb.Entry{{}, {Term: 1}, {Term: 2}}, 1, 1}, - {[]uint64{2, 1, 1}, []pb.Entry{{}, {Term: 1}, {Term: 1}}, 2, 0}, - {[]uint64{2, 1, 2}, []pb.Entry{{}, {Term: 1}, {Term: 2}}, 2, 2}, - {[]uint64{2, 1, 2}, []pb.Entry{{}, {Term: 1}, {Term: 1}}, 2, 0}, + {[]uint64{2, 1, 1}, []pb.Entry{{Index: 1, Term: 1}, {Index: 2, Term: 2}}, 1, 1}, + {[]uint64{2, 1, 1}, []pb.Entry{{Index: 1, Term: 1}, {Index: 2, Term: 1}}, 2, 0}, + {[]uint64{2, 1, 2}, []pb.Entry{{Index: 1, Term: 1}, {Index: 2, Term: 2}}, 2, 2}, + {[]uint64{2, 1, 2}, []pb.Entry{{Index: 1, Term: 1}, {Index: 2, Term: 1}}, 2, 0}, // even - {[]uint64{2, 1, 1, 1}, []pb.Entry{{}, {Term: 1}, {Term: 2}}, 1, 1}, - {[]uint64{2, 1, 1, 1}, []pb.Entry{{}, {Term: 1}, {Term: 1}}, 2, 0}, - {[]uint64{2, 1, 1, 2}, []pb.Entry{{}, {Term: 1}, {Term: 2}}, 1, 1}, - {[]uint64{2, 1, 1, 2}, []pb.Entry{{}, {Term: 1}, {Term: 1}}, 2, 0}, - {[]uint64{2, 1, 2, 2}, []pb.Entry{{}, {Term: 1}, {Term: 2}}, 2, 2}, - {[]uint64{2, 1, 2, 2}, []pb.Entry{{}, {Term: 1}, {Term: 1}}, 2, 0}, + {[]uint64{2, 1, 1, 1}, []pb.Entry{{Index: 1, Term: 1}, {Index: 2, Term: 2}}, 1, 1}, + {[]uint64{2, 1, 1, 1}, []pb.Entry{{Index: 1, Term: 1}, {Index: 2, Term: 1}}, 2, 0}, + {[]uint64{2, 1, 1, 2}, []pb.Entry{{Index: 1, Term: 1}, {Index: 2, Term: 2}}, 1, 1}, + {[]uint64{2, 1, 1, 2}, []pb.Entry{{Index: 1, Term: 1}, {Index: 2, Term: 1}}, 2, 0}, + {[]uint64{2, 1, 2, 2}, []pb.Entry{{Index: 1, Term: 1}, {Index: 2, Term: 2}}, 2, 2}, + {[]uint64{2, 1, 2, 2}, []pb.Entry{{Index: 1, Term: 1}, {Index: 2, Term: 1}}, 2, 0}, } for i, tt := range tests { - prs := make(map[uint64]*progress) + storage := NewMemoryStorage() + storage.Append(tt.logs) + storage.hardState = pb.HardState{Term: tt.smTerm} + + sm := newRaft(1, []uint64{1}, 5, 1, storage) for j := 0; j < len(tt.matches); j++ { - prs[uint64(j)] = &progress{tt.matches[j], tt.matches[j] + 1} - } - sm := &raft{ - raftLog: &raftLog{storage: &MemoryStorage{ents: tt.logs}, unstable: unstable{offset: uint64(len(tt.logs))}}, - prs: prs, - HardState: pb.HardState{Term: tt.smTerm}, + sm.setProgress(uint64(j)+1, tt.matches[j], tt.matches[j]+1) } sm.maybeCommit() if g := sm.raftLog.committed; g != tt.w { @@ -675,15 +674,10 @@ func TestHandleMsgApp(t *testing.T) { } for i, tt := range tests { - sm := &raft{ - state: StateFollower, - HardState: pb.HardState{Term: 2}, - raftLog: &raftLog{ - committed: 0, - storage: &MemoryStorage{ents: []pb.Entry{{}, {Term: 1}, {Term: 2}}}, - unstable: unstable{offset: 3}, - }, - } + storage := NewMemoryStorage() + storage.Append([]pb.Entry{{Index: 1, Term: 1}, {Index: 2, Term: 2}}) + sm := newRaft(1, []uint64{1}, 10, 1, storage) + sm.becomeFollower(2, None) sm.handleAppendEntries(tt.m) if sm.raftLog.lastIndex() != tt.wIndex { @@ -709,18 +703,15 @@ func TestHandleHeartbeat(t *testing.T) { m pb.Message wCommit uint64 }{ - {pb.Message{Type: pb.MsgApp, Term: 2, Commit: commit + 1}, commit + 1}, - {pb.Message{Type: pb.MsgApp, Term: 2, Commit: commit - 1}, commit}, // do not decrease commit + {pb.Message{From: 2, To: 1, Type: pb.MsgApp, Term: 2, Commit: commit + 1}, commit + 1}, + {pb.Message{From: 2, To: 1, Type: pb.MsgApp, Term: 2, Commit: commit - 1}, commit}, // do not decrease commit } for i, tt := range tests { storage := NewMemoryStorage() storage.Append([]pb.Entry{{Index: 1, Term: 1}, {Index: 2, Term: 2}, {Index: 3, Term: 3}}) - sm := &raft{ - state: StateFollower, - HardState: pb.HardState{Term: 2}, - raftLog: newLog(storage), - } + sm := newRaft(1, []uint64{1, 2}, 5, 1, storage) + sm.becomeFollower(2, 2) sm.raftLog.commitTo(commit) sm.handleHeartbeat(tt.m) if sm.raftLog.committed != tt.wCommit { @@ -1345,10 +1336,7 @@ func TestPromotable(t *testing.T) { {[]uint64{2, 3}, false}, } for i, tt := range tests { - r := &raft{id: id, prs: make(map[uint64]*progress)} - for _, id := range tt.peers { - r.prs[id] = &progress{} - } + r := newRaft(id, tt.peers, 5, 1, NewMemoryStorage()) if g := r.promotable(); g != tt.wp { t.Errorf("#%d: promotable = %v, want %v", i, g, tt.wp) } @@ -1378,17 +1366,11 @@ func TestRaftNodes(t *testing.T) { } func ents(terms ...uint64) *raft { - ents := []pb.Entry{{}} + storage := NewMemoryStorage() for i, term := range terms { - ents = append(ents, pb.Entry{Index: uint64(i + 1), Term: term}) - } - - sm := &raft{ - raftLog: &raftLog{ - storage: &MemoryStorage{ents: ents}, - unstable: unstable{offset: uint64(len(ents))}, - }, + storage.Append([]pb.Entry{{Index: uint64(i + 1), Term: term}}) } + sm := newRaft(1, []uint64{}, 5, 1, storage) sm.reset(0) return sm }