kubeadm: check whether the peer URL for the added etcd member already exists when the MemberAddAsLearner/MemberAdd fails

This commit is contained in:
SataQiu 2024-09-20 11:52:47 +08:00
parent 6d0fd144a6
commit bbba9afbb9

View File

@ -421,7 +421,6 @@ func (c *Client) addMember(name string, peerAddrs string, isLearner bool) ([]Mem
var ( var (
lastError error lastError error
respMembers []*etcdserverpb.Member respMembers []*etcdserverpb.Member
learnerID uint64
resp *clientv3.MemberAddResponse resp *clientv3.MemberAddResponse
) )
err = wait.PollUntilContextTimeout(context.Background(), constants.EtcdAPICallRetryInterval, constants.EtcdAPICallTimeout, err = wait.PollUntilContextTimeout(context.Background(), constants.EtcdAPICallRetryInterval, constants.EtcdAPICallTimeout,
@ -429,21 +428,12 @@ func (c *Client) addMember(name string, peerAddrs string, isLearner bool) ([]Mem
ctx, cancel := context.WithTimeout(context.Background(), etcdTimeout) ctx, cancel := context.WithTimeout(context.Background(), etcdTimeout)
defer cancel() defer cancel()
if isLearner { if isLearner {
// if learnerID is set, it means the etcd member is already added successfully. klog.V(1).Infof("[etcd] Adding etcd member %q as learner", peerAddrs)
if learnerID == 0 { resp, err = cli.MemberAddAsLearner(ctx, []string{peerAddrs})
klog.V(1).Info("[etcd] Adding etcd member as learner") } else {
resp, err = cli.MemberAddAsLearner(ctx, []string{peerAddrs}) klog.V(1).Infof("[etcd] Adding etcd member %q", peerAddrs)
if err != nil { resp, err = cli.MemberAdd(ctx, []string{peerAddrs})
lastError = err
return false, nil
}
learnerID = resp.Member.ID
}
respMembers = resp.Members
return true, nil
} }
resp, err = cli.MemberAdd(ctx, []string{peerAddrs})
if err == nil { if err == nil {
respMembers = resp.Members respMembers = resp.Members
return true, nil return true, nil