MCPcopy Create free account
hub / github.com/apache/kvrocks-controller / UpdatePeer

Method UpdatePeer

server/api/raft.go:70–110  ·  view source on GitHub ↗
(c *gin.Context)

Source from the content-addressed store, hash-verified

68}
69
70func (handler *RaftHandler) UpdatePeer(c *gin.Context) {
71 var req MemberRequest
72 if err := c.BindJSON(&req); err != nil {
73 helper.ResponseBadRequest(c, err)
74 return
75 }
76 if err := req.validate(); err != nil {
77 helper.ResponseBadRequest(c, err)
78 return
79 }
80
81 raftNode, _ := c.MustGet(consts.ContextKeyRaftNode).(*raft.Node)
82 peers := raftNode.ListPeers()
83
84 var err error
85 if req.Operation == OperationAdd {
86 for _, peer := range peers {
87 if peer == req.Peer {
88 helper.ResponseError(c, fmt.Errorf("peer '%s' already exists", req.Peer))
89 return
90 }
91 }
92 err = raftNode.AddPeer(c, req.ID, req.Peer)
93 } else {
94 if _, ok := peers[req.ID]; !ok {
95 helper.ResponseBadRequest(c, errors.New("peer not exists"))
96 return
97 }
98 if len(peers) == 1 {
99 helper.ResponseBadRequest(c, errors.New("can't remove the last peer"))
100 return
101 }
102 err = raftNode.RemovePeer(c, req.ID)
103 }
104 if err != nil {
105 helper.ResponseError(c, err)
106 } else {
107 logger.Get().With(zap.Any("request", req)).Info("Update peer success")
108 helper.ResponseOK(c, nil)
109 }
110}

Callers 1

applyEntryMethod · 0.80

Calls 10

validateMethod · 0.95
ResponseBadRequestFunction · 0.92
ResponseErrorFunction · 0.92
GetFunction · 0.92
ResponseOKFunction · 0.92
ErrorfMethod · 0.80
AddPeerMethod · 0.80
RemovePeerMethod · 0.80
InfoMethod · 0.80
ListPeersMethod · 0.45

Tested by

no test coverage detected