@@ -167,7 +167,7 @@ func errResourceToResourceStatus(err error, resource *unstructured.Unstructured,
167
167
// If the error is from the context, we don't attach that to the ResourceStatus,
168
168
// but just return it directly so the caller can decide how to handle this
169
169
// situation.
170
- if errors .Is (err , context .Canceled ) || errors .Is (err , context .DeadlineExceeded ) {
170
+ if errors .Is (err , context .Canceled ) || errors .Is (err , context .DeadlineExceeded ) || isRateLimiterContextDeadlineExceeded ( err ) {
171
171
return nil , err
172
172
}
173
173
identifier := object .UnstructuredToObjMetadata (resource )
@@ -193,7 +193,7 @@ func errIdentifierToResourceStatus(err error, identifier object.ObjMetadata) (*e
193
193
// If the error is from the context, we don't attach that to the ResourceStatus,
194
194
// but just return it directly so the caller can decide how to handle this
195
195
// situation.
196
- if errors .Is (err , context .Canceled ) || errors .Is (err , context .DeadlineExceeded ) {
196
+ if errors .Is (err , context .Canceled ) || errors .Is (err , context .DeadlineExceeded ) || isRateLimiterContextDeadlineExceeded ( err ) {
197
197
return nil , err
198
198
}
199
199
if apierrors .IsNotFound (err ) {
@@ -209,3 +209,20 @@ func errIdentifierToResourceStatus(err error, identifier object.ObjMetadata) (*e
209
209
Error : err ,
210
210
}, nil
211
211
}
212
+
213
+ // isRateLimiterContextDeadlineExceeded checks if the error is a rate limiter "would exceed context deadline" error
214
+ // this allows us to treat it the same way as the context.Canceled and context.DeadlineExceeded errors
215
+ // instead of attaching the error to the ResourceStatus, caller can decide how to handle this
216
+ func isRateLimiterContextDeadlineExceeded (err error ) bool {
217
+ for {
218
+ next := errors .Unwrap (err )
219
+ if next == nil {
220
+ break
221
+ }
222
+ err = next
223
+ }
224
+
225
+ // there's no dedicated error type for this, hence we check the error message
226
+ // https://cs.opensource.google/go/x/time/+/refs/tags/v0.10.0:rate/rate.go;l=276
227
+ return err != nil && err .Error () == "rate: Wait(n=1) would exceed context deadline"
228
+ }
0 commit comments