Merge pull request #4888 from xiang90/fix_raft

rafthttp: do not block on proposal
release-3.0
Xiang Li 2016-03-29 07:37:18 -07:00
commit 75babb82b6
1 changed files with 14 additions and 2 deletions

View File

@ -140,11 +140,23 @@ func startPeer(transport *Transport, urls types.URLs, local, to, cid types.ID, r
go func() {
for {
select {
case mm := <-p.propc:
case mm := <-p.recvc:
if err := r.Process(ctx, mm); err != nil {
plog.Warningf("failed to process raft message (%v)", err)
}
case mm := <-p.recvc:
case <-p.stopc:
return
}
}
}()
// r.Process might block for processing proposal when there is no leader.
// Thus propc must be put into a separate routine with recvc to avoid blocking
// processing other raft messages.
go func() {
for {
select {
case mm := <-p.propc:
if err := r.Process(ctx, mm); err != nil {
plog.Warningf("failed to process raft message (%v)", err)
}