func (g *group) applyConfChange(e raftpb.Entry) error { var cc raftpb.ConfChange pbutil.MustUnmarshal(&cc, e.Data) glog.V(2).Infof("%v applies conf change %v: %#v", g, e.Index, cc) if len(cc.Context) == 0 { g.stateMachine.ApplyConfChange(cc, GroupNode{}) return nil } if id, req, err := g.node.decReq(cc.Context); err == nil { if gn, ok := req.Data.(GroupNode); ok { res := Response{ID: id} res.Err = g.stateMachine.ApplyConfChange(cc, gn) g.node.line.call(res) return nil } } var gn GroupNode if err := bhgob.Decode(&gn, cc.Context); err != nil { glog.Fatalf("%v cannot decode config change: %v", g, err) } if gn.Node != cc.NodeID { glog.Fatalf("invalid config change: %v != %v", gn.Node, cc.NodeID) } g.stateMachine.ApplyConfChange(cc, gn) return nil }
func (r *registry) Restore(b []byte) error { r.m.Lock() defer r.m.Unlock() glog.V(2).Info("registry restored") return bhgob.Decode(r, b) }