1
0
Fork 0

Better remove-retry logic

master
Philip O'Toole 1 year ago
parent a12336f9fa
commit 669e89ee24

@ -10,7 +10,7 @@ import (
const (
removeRetries = 5
removeDelay = 500 * time.Millisecond
removeDelay = 250 * time.Millisecond
)
// Control is an interface for interacting with a cluster.
@ -46,16 +46,22 @@ func (r *Remover) Do(id string, confirm bool) error {
nRetries := 0
for {
laddr, err := r.control.WaitForLeader(r.timeout)
if err != nil {
return err
}
err := func() error {
laddr, innerErr := r.control.WaitForLeader(r.timeout)
if innerErr != nil {
return innerErr
}
r.log.Printf("removing node %s from cluster via leader at %s", id, laddr)
if err := r.client.RemoveNode(rn, laddr, nil, r.timeout); err == nil {
r.log.Printf("removing node %s from cluster via leader at %s", id, laddr)
if innerErr = r.client.RemoveNode(rn, laddr, nil, r.timeout); innerErr != nil {
r.log.Printf("failed to remove node %s from cluster via leader at %s: %s", id, laddr, innerErr)
return innerErr
}
return nil
}()
if err == nil {
break
}
r.log.Printf("failed to remove node %s from cluster via leader at %s: %s", id, laddr, err)
nRetries++
if nRetries == removeRetries {

Loading…
Cancel
Save