From 1d6fea99a745ae0da992deaa2912968badeb756c Mon Sep 17 00:00:00 2001 From: xiangpengzhao Date: Wed, 8 Nov 2017 17:10:34 +0800 Subject: [PATCH] Check if SleepDelay of AWS request is nil before sign. --- pkg/cloudprovider/providers/aws/retry_handler.go | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/pkg/cloudprovider/providers/aws/retry_handler.go b/pkg/cloudprovider/providers/aws/retry_handler.go index 49a50ef5c50..8c063f8e8a4 100644 --- a/pkg/cloudprovider/providers/aws/retry_handler.go +++ b/pkg/cloudprovider/providers/aws/retry_handler.go @@ -21,6 +21,7 @@ import ( "sync" "time" + "github.com/aws/aws-sdk-go/aws" "github.com/aws/aws-sdk-go/aws/awserr" "github.com/aws/aws-sdk-go/aws/request" "github.com/golang/glog" @@ -53,7 +54,15 @@ func (c *CrossRequestRetryDelay) BeforeSign(r *request.Request) { if delay > 0 { glog.Warningf("Inserting delay before AWS request (%s) to avoid RequestLimitExceeded: %s", describeRequest(r), delay.String()) - r.Config.SleepDelay(delay) + + if sleepFn := r.Config.SleepDelay; sleepFn != nil { + // Support SleepDelay for backwards compatibility + sleepFn(delay) + } else if err := aws.SleepWithContext(r.Context(), delay); err != nil { + r.Error = awserr.New(request.CanceledErrorCode, "request context canceled", err) + r.Retryable = aws.Bool(false) + return + } // Avoid clock skew problems r.Time = now