Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- func (s *EtcdServer) AddMember(ctx context.Context, memb membership.Member) ([]*membership.Member, error) {
- if err := s.checkMembershipOperationPermission(ctx); err != nil {
- return nil, err
- }
- if s.Cfg.StrictReconfigCheck {
- // by default StrictReconfigCheck is enabled; reject new members if unhealthy
- if !s.cluster.IsReadyToAddNewMember() {
- if lg := s.getLogger(); lg != nil {
- lg.Warn(
- "rejecting member add request; not enough healthy members",
- zap.String("local-member-id", s.ID().String()),
- zap.String("requested-member-add", fmt.Sprintf("%+v", memb)),
- zap.Error(ErrNotEnoughStartedMembers),
- )
- } else {
- plog.Warningf("not enough started members, rejecting member add %+v", memb)
- }
- return nil, ErrNotEnoughStartedMembers
- }
- if !isConnectedFullySince(s.r.transport, time.Now().Add(-HealthInterval), s.ID(), s.cluster.Members()) {
- if lg := s.getLogger(); lg != nil {
- lg.Warn(
- "rejecting member add request; local member has not been connected to all peers, reconfigure breaks active quorum",
- zap.String("local-member-id", s.ID().String()),
- zap.String("requested-member-add", fmt.Sprintf("%+v", memb)),
- zap.Error(ErrUnhealthy),
- )
- } else {
- plog.Warningf("not healthy for reconfigure, rejecting member add %+v", memb)
- }
- return nil, ErrUnhealthy
- }
- }
- // TODO: move Member to protobuf type
- b, err := json.Marshal(memb)
- if err != nil {
- return nil, err
- }
- cc := raftpb.ConfChange{
- Type: raftpb.ConfChangeAddNode,
- NodeID: uint64(memb.ID),
- Context: b,
- }
- return s.configure(ctx, cc)
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement