func (n *node) processCommitCh() { pending := make(chan struct{}, numPendingMutations) for e := range n.commitCh { if e.Data == nil { continue } if e.Type == raftpb.EntryConfChange { var cc raftpb.ConfChange cc.Unmarshal(e.Data) if len(cc.Context) > 0 { var rc task.RaftContext x.Check(rc.Unmarshal(cc.Context)) n.Connect(rc.Id, rc.Addr) } n.raft.ApplyConfChange(cc) } else { go n.process(e, pending) } } }
func (w *grpcWorker) applyMessage(ctx context.Context, msg raftpb.Message) error { var rc task.RaftContext x.Check(rc.Unmarshal(msg.Context)) node := groups().Node(rc.Group) node.Connect(msg.From, rc.Addr) c := make(chan error, 1) go func() { c <- node.Step(ctx, msg) }() select { case <-ctx.Done(): return ctx.Err() case err := <-c: return err } }