Skip to content

Commit 2415e4d

Browse files
maruinanyodas
authored andcommitted
Conflicts errors don't count against retries datadog:patch (#98)
1 parent fc00c5f commit 2415e4d

File tree

1 file changed

+7
-2
lines changed
  • staging/src/k8s.io/apiserver/pkg/admission/plugin/resourcequota

1 file changed

+7
-2
lines changed

staging/src/k8s.io/apiserver/pkg/admission/plugin/resourcequota/controller.go

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -225,7 +225,7 @@ func (e *quotaEvaluator) checkAttributes(ns string, admissionAttributes []*admis
225225
// updates failed on conflict errors and we have retries left, re-get the failed quota from our cache for the latest version
226226
// and recurse into this method with the subset. It's safe for us to evaluate ONLY the subset, because the other quota
227227
// documents for these waiters have already been evaluated. Step 1, will mark all the ones that should already have succeeded.
228-
func (e *quotaEvaluator) checkQuotas(quotas []corev1.ResourceQuota, admissionAttributes []*admissionWaiter, remainingRetries int) {
228+
func (e *quotaEvaluator) checkQuotas(quotas []corev1.ResourceQuota, admissionAttributes []*admissionWaiter, retries int) {
229229
// yet another copy to compare against originals to see if we actually have deltas
230230
originalQuotas, err := copyQuotas(quotas)
231231
if err != nil {
@@ -277,6 +277,7 @@ func (e *quotaEvaluator) checkQuotas(quotas []corev1.ResourceQuota, admissionAtt
277277
// 3. if the quota changed and the update fails, add the original to a retry list
278278
var updatedFailedQuotas []corev1.ResourceQuota
279279
var lastErr error
280+
remainingRetries := retries - 1
280281
for i := range quotas {
281282
newQuota := quotas[i]
282283

@@ -286,6 +287,10 @@ func (e *quotaEvaluator) checkQuotas(quotas []corev1.ResourceQuota, admissionAtt
286287
}
287288

288289
if err := e.quotaAccessor.UpdateQuotaStatus(&newQuota); err != nil {
290+
// If there is a transient update error, it doesn't count against the retry quota
291+
if apierrors.IsConflict(err) {
292+
remainingRetries = retries
293+
}
289294
updatedFailedQuotas = append(updatedFailedQuotas, newQuota)
290295
lastErr = err
291296
}
@@ -338,7 +343,7 @@ func (e *quotaEvaluator) checkQuotas(quotas []corev1.ResourceQuota, admissionAtt
338343
}
339344
}
340345
}
341-
e.checkQuotas(quotasToCheck, admissionAttributes, remainingRetries-1)
346+
e.checkQuotas(quotasToCheck, admissionAttributes, remainingRetries)
342347
}
343348

344349
func copyQuotas(in []corev1.ResourceQuota) ([]corev1.ResourceQuota, error) {

0 commit comments

Comments
 (0)