Merge pull request #138493 from wgkingk/automated-cherry-pick-of-#138390-origin-release-1.36

Automated cherry pick of #138390: kubeadm: skip promote call when etcd member is already a voting member
This commit is contained in:
kubernetes-prow[bot] 2026-07-03 15:30:19 +00:00 committed by GitHub
commit c9ee548ea2
No known key found for this signature in database
GPG key ID: B5690EEEBB952194

View file

@ -584,6 +584,8 @@ func (c *Client) getMemberStatus(memberID uint64) (isLearner bool, started bool,
func (c *Client) MemberPromote(learnerID uint64) error {
var (
lastError error
isLearner bool
isStarted bool
learnerIDUint = strconv.FormatUint(learnerID, 16)
)
@ -591,7 +593,8 @@ func (c *Client) MemberPromote(learnerID uint64) error {
err := wait.PollUntilContextTimeout(context.Background(), constants.EtcdAPICallRetryInterval, kubeadmapi.GetActiveTimeouts().EtcdAPICall.Duration,
true, func(_ context.Context) (bool, error) {
isLearner, started, err := c.getMemberStatus(learnerID)
var err error
isLearner, isStarted, err = c.getMemberStatus(learnerID)
if err != nil {
lastError = errors.WithMessagef(err, "failed to get member %s status", learnerIDUint)
return false, nil
@ -600,7 +603,7 @@ func (c *Client) MemberPromote(learnerID uint64) error {
klog.V(1).Infof("[etcd] Member %s was already promoted.", learnerIDUint)
return true, nil
}
if !started {
if !isStarted {
klog.V(1).Infof("[etcd] Member %s is not started yet. Waiting for it to be started.", learnerIDUint)
lastError = errors.Errorf("the etcd member %s is not started", learnerIDUint)
return false, nil
@ -611,6 +614,10 @@ func (c *Client) MemberPromote(learnerID uint64) error {
return lastError
}
if !isLearner {
return nil
}
klog.V(1).Infof("[etcd] Promoting a learner as a voting member: %s", learnerIDUint)
cli, err := c.newEtcdClient(c.Endpoints)