@@ -347,18 +347,19 @@ func (c *Client) ListMembers() ([]Member, error) {
347
347
348
348
// RemoveMember notifies an etcd cluster to remove an existing member
349
349
func (c * Client ) RemoveMember (id uint64 ) ([]Member , error ) {
350
+ cli , err := c .newEtcdClient (c .Endpoints )
351
+ if err != nil {
352
+ return nil , err
353
+ }
354
+ defer func () { _ = cli .Close () }()
355
+
350
356
// Remove an existing member from the cluster
351
- var lastError error
352
- var resp * clientv3.MemberRemoveResponse
353
- err := wait .PollUntilContextTimeout (context .Background (), constants .EtcdAPICallRetryInterval , constants .EtcdAPICallTimeout ,
357
+ var (
358
+ lastError error
359
+ respMembers []* etcdserverpb.Member
360
+ )
361
+ err = wait .PollUntilContextTimeout (context .Background (), constants .EtcdAPICallRetryInterval , constants .EtcdAPICallTimeout ,
354
362
true , func (_ context.Context ) (bool , error ) {
355
- cli , err := c .newEtcdClient (c .Endpoints )
356
- if err != nil {
357
- lastError = err
358
- return false , nil
359
- }
360
- defer func () { _ = cli .Close () }()
361
-
362
363
ctx , cancel := context .WithTimeout (context .Background (), etcdTimeout )
363
364
defer cancel ()
364
365
@@ -378,16 +379,22 @@ func (c *Client) RemoveMember(id uint64) ([]Member, error) {
378
379
}
379
380
if ! found {
380
381
klog .V (5 ).Infof ("Member %s was not found; assuming it was already removed" , strconv .FormatUint (id , 16 ))
382
+ respMembers = listResp .Members
381
383
return true , nil
382
384
}
383
385
384
- resp , err = cli .MemberRemove (ctx , id )
386
+ resp , err : = cli .MemberRemove (ctx , id )
385
387
if err == nil {
388
+ respMembers = resp .Members
386
389
return true , nil
387
390
}
388
391
if errors .Is (rpctypes .ErrMemberNotFound , err ) {
389
392
klog .V (5 ).Infof ("Member was already removed, because member %s was not found" , strconv .FormatUint (id , 16 ))
390
- return true , nil
393
+ listResp , err = cli .MemberList (ctx )
394
+ if err == nil {
395
+ respMembers = listResp .Members
396
+ return true , nil
397
+ }
391
398
}
392
399
klog .V (5 ).Infof ("Failed to remove etcd member: %v" , err )
393
400
lastError = err
@@ -399,11 +406,8 @@ func (c *Client) RemoveMember(id uint64) ([]Member, error) {
399
406
400
407
// Returns the updated list of etcd members
401
408
ret := []Member {}
402
- if resp != nil {
403
- for _ , m := range resp .Members {
404
- ret = append (ret , Member {Name : m .Name , PeerURL : m .PeerURLs [0 ]})
405
- }
406
-
409
+ for _ , m := range respMembers {
410
+ ret = append (ret , Member {Name : m .Name , PeerURL : m .PeerURLs [0 ]})
407
411
}
408
412
409
413
return ret , nil
@@ -484,7 +488,6 @@ func (c *Client) addMember(name string, peerAddrs string, isLearner bool) ([]Mem
484
488
// call out to MemberList to fetch all the members before returning.
485
489
if errors .Is (err , rpctypes .ErrPeerURLExist ) {
486
490
klog .V (5 ).Info ("The peer URL for the added etcd member already exists. Fetching the existing etcd members" )
487
- var listResp * clientv3.MemberListResponse
488
491
listResp , err = cli .MemberList (ctx )
489
492
if err == nil {
490
493
respMembers = listResp .Members
0 commit comments