diff --git a/raft/node.go b/raft/node.go index 854e6abbb..8fc4de6c3 100644 --- a/raft/node.go +++ b/raft/node.go @@ -29,3 +29,11 @@ func (n *Node) Step(m Message) { defer n.lk.Unlock() n.sm.Step(m) } + +// Next advances the commit index and returns any new +// commitable entries. +func (n *Node) Next() []Entry { + n.lk.Lock() + defer n.lk.Unlock() + return n.sm.nextEnts() +} diff --git a/raft/raft.go b/raft/raft.go index 1dfde3123..b2ca9ee2e 100644 --- a/raft/raft.go +++ b/raft/raft.go @@ -191,12 +191,13 @@ func (sm *stateMachine) theN() int { return -1 } -func (sm *stateMachine) maybeAdvanceCommit() int { +func (sm *stateMachine) nextEnts() (ents []Entry) { ci := sm.theN() if ci > sm.commit { + ents = sm.log[sm.commit+1:ci] sm.commit = ci } - return sm.commit + return ents } func (sm *stateMachine) reset() {