diff --git a/staging/src/k8s.io/legacy-cloud-providers/aws/aws.go b/staging/src/k8s.io/legacy-cloud-providers/aws/aws.go index f558146153a..b3fdce3578f 100644 --- a/staging/src/k8s.io/legacy-cloud-providers/aws/aws.go +++ b/staging/src/k8s.io/legacy-cloud-providers/aws/aws.go @@ -231,12 +231,12 @@ const ( createTagFactor = 2.0 createTagSteps = 9 - // encryptedCheck* is configuration of poll for created volume to check - // it has not been silently removed by AWS. + // volumeCreate* is configuration of exponential backoff for created volume. // On a random AWS account (shared among several developers) it took 4s on - // average. - encryptedCheckInterval = 1 * time.Second - encryptedCheckTimeout = 30 * time.Second + // average, 8s max. + volumeCreateInitialDelay = 5 * time.Second + volumeCreateBackoffFactor = 1.2 + volumeCreateBackoffSteps = 10 // Number of node names that can be added to a filter. The AWS limit is 200 // but we are using a lower limit on purpose @@ -2448,8 +2448,13 @@ func (c *Cloud) waitUntilVolumeAvailable(volumeName KubernetesVolumeID) error { // Unreachable code return err } - - err = wait.Poll(encryptedCheckInterval, encryptedCheckTimeout, func() (done bool, err error) { + time.Sleep(5 * time.Second) + backoff := wait.Backoff{ + Duration: volumeCreateInitialDelay, + Factor: volumeCreateBackoffFactor, + Steps: volumeCreateBackoffSteps, + } + err = wait.ExponentialBackoff(backoff, func() (done bool, err error) { vol, err := disk.describeVolume() if err != nil { return true, err