fix: Requeue DNSEndpoint request when create fails with already exists error #3637
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Proposed changes
There can be a race condition creating a new DNS endpoint when running multiple replicas of the Ingress Controller. This occurs when inbetween checking if the DNSEndpoint already exists and issuing the create request, another replica has already created the resource. The resource is created correctly, but the owning VirtualServer appears in an unhealthy state, and we see (an) event(s) like:
Warning BadConfig 14m nginx-ingress-controller Error creating DNSEndpoint for VirtualServer resource dnsendpoints.externaldns.nginx.org "dev" already exists
on the resource.
This PR resolves the issue by requeuing the resource when we get an already exists error back for a create request.
Checklist
Before creating a PR, run through this checklist and mark each as complete.