Advertisement
Guest User

Untitled

a guest
Mar 18th, 2019
70
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Go 1.61 KB | None | 0 0
  1. func (s *EtcdServer) AddMember(ctx context.Context, memb membership.Member) ([]*membership.Member, error) {
  2.     if err := s.checkMembershipOperationPermission(ctx); err != nil {
  3.         return nil, err
  4.     }
  5.  
  6.     if s.Cfg.StrictReconfigCheck {
  7.         // by default StrictReconfigCheck is enabled; reject new members if unhealthy
  8.         if !s.cluster.IsReadyToAddNewMember() {
  9.             if lg := s.getLogger(); lg != nil {
  10.                 lg.Warn(
  11.                     "rejecting member add request; not enough healthy members",
  12.                     zap.String("local-member-id", s.ID().String()),
  13.                     zap.String("requested-member-add", fmt.Sprintf("%+v", memb)),
  14.                     zap.Error(ErrNotEnoughStartedMembers),
  15.                 )
  16.             } else {
  17.                 plog.Warningf("not enough started members, rejecting member add %+v", memb)
  18.             }
  19.             return nil, ErrNotEnoughStartedMembers
  20.         }
  21.  
  22.         if !isConnectedFullySince(s.r.transport, time.Now().Add(-HealthInterval), s.ID(), s.cluster.Members()) {
  23.             if lg := s.getLogger(); lg != nil {
  24.                 lg.Warn(
  25.                     "rejecting member add request; local member has not been connected to all peers, reconfigure breaks active quorum",
  26.                     zap.String("local-member-id", s.ID().String()),
  27.                     zap.String("requested-member-add", fmt.Sprintf("%+v", memb)),
  28.                     zap.Error(ErrUnhealthy),
  29.                 )
  30.             } else {
  31.                 plog.Warningf("not healthy for reconfigure, rejecting member add %+v", memb)
  32.             }
  33.             return nil, ErrUnhealthy
  34.         }
  35.     }
  36.  
  37.     // TODO: move Member to protobuf type
  38.     b, err := json.Marshal(memb)
  39.     if err != nil {
  40.         return nil, err
  41.     }
  42.     cc := raftpb.ConfChange{
  43.         Type:    raftpb.ConfChangeAddNode,
  44.         NodeID:  uint64(memb.ID),
  45.         Context: b,
  46.     }
  47.     return s.configure(ctx, cc)
  48. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement