![]() * Fix a job quota related deadlock In case ResourceQuota is used and sets a max # of jobs, a CronJob may get trapped in a deadlock: 1. Job quota for a namespace is reached. 2. CronJob controller can't create a new job, because quota is reached. 3. Cleanup of jobs owned by a cronjob doesn't happen, because a control loop iteration is finished because of an error to create a job. To fix this we stop early quitting from a control loop iteration when cronjob reconciliation failed and always let old jobs to be cleaned up. * Dont reorder imports * Don't stop requeuing on reconciliation error Previous code only logged the reconciliation error inside jm.sync() and didn't return the reconciliation error to it's invoker processNextWorkItem(). Adding a copy-paste back to avoid this issue. * Remove copy-pasted cleanupFinishedJobs() Now we always call jm.cleanupFinishedJobs() first and then jm.syncCronJob(). We also extract cronJobCopy and updateStatus outside jm.syncCronJob function and pass pointers to them in both jm.syncCronJob and jm.cleanupFinishedJobs to make delayed updates handling more explicit and not dependent on the order in which cleanupFinishedJobs and syncCronJob are invoked. * Return updateStatus bool instead of changing the reference * Explicitly ignore err in tests to fix linter |
||
---|---|---|
.. | ||
config | ||
metrics | ||
cronjob_controllerv2_test.go | ||
cronjob_controllerv2.go | ||
doc.go | ||
injection.go | ||
OWNERS | ||
utils_test.go | ||
utils.go |