cluster-api-provider-aws
cluster-api-provider-aws copied to clipboard
Controller implementation should move towards a re-entrancy model
/kind feature
Describe the solution you'd like Currently we do a lot of waiting within the controller for resources to be available, we should investigate switching to using re-entrancy for these tasks rather than blocking other reconciliations.
/priority important-longterm /milestone Next
Issues go stale after 90d of inactivity.
Mark the issue as fresh with /remove-lifecycle stale.
Stale issues rot after an additional 30d of inactivity and eventually close.
If this issue is safe to close now please do so with /close.
Send feedback to sig-testing, kubernetes/test-infra and/or fejta. /lifecycle stale
/lifecycle frozen
/milestone v0.7.x
Just dumping some findings:
Currently, Azure SDK supports non-blocking, asynchronous calls via Future constructs, which makes it easy to make CAPZ re-entrant. CAPZ controllers don't need to make a new call to get the status of a resource at each reconcile (which causes hitting API limits). When a resource is created, Future result appears.
I see that AWS SDK Java introduced async clients but I don't see any activity to that end in golang SDK. We can make improvements like introducing a cache before refactoring, but even then API limits might be a problem.
/remove-lifecycle frozen
Potentially, we could use a hook/dispatch system to notify listeners of a certain resource. Channels should be quite useful in that regard. Also, there are numerous libraries in Go itself which support async calls. So implementing them shouldn't be too much of a problem.
One popular one is https://github.com/hibiken/asynq. What do you think @sedefsavas @richardcase?
@Skarlso - i think we can handle this by requeing....although this has the added downside of increasing API calls. A good topic for discussion at office hours?
Certainly a good topic indeed. 👍
The Kubernetes project currently lacks enough contributors to adequately respond to all issues and PRs.
This bot triages issues and PRs according to the following rules:
- After 90d of inactivity,
lifecycle/staleis applied - After 30d of inactivity since
lifecycle/stalewas applied,lifecycle/rottenis applied - After 30d of inactivity since
lifecycle/rottenwas applied, the issue is closed
You can:
- Mark this issue or PR as fresh with
/remove-lifecycle stale - Mark this issue or PR as rotten with
/lifecycle rotten - Close this issue or PR with
/close - Offer to help out with Issue Triage
Please send feedback to sig-contributor-experience at kubernetes/community.
/lifecycle stale
/remove-lifecycle stale
/assign
I'm interested in this. But would be nice to not increase the number of API calls.
The Kubernetes project currently lacks enough contributors to adequately respond to all issues.
This bot triages un-triaged issues according to the following rules:
- After 90d of inactivity,
lifecycle/staleis applied - After 30d of inactivity since
lifecycle/stalewas applied,lifecycle/rottenis applied - After 30d of inactivity since
lifecycle/rottenwas applied, the issue is closed
You can:
- Mark this issue as fresh with
/remove-lifecycle stale - Close this issue with
/close - Offer to help out with Issue Triage
Please send feedback to sig-contributor-experience at kubernetes/community.
/lifecycle stale
The Kubernetes project currently lacks enough active contributors to adequately respond to all issues.
This bot triages un-triaged issues according to the following rules:
- After 90d of inactivity,
lifecycle/staleis applied - After 30d of inactivity since
lifecycle/stalewas applied,lifecycle/rottenis applied - After 30d of inactivity since
lifecycle/rottenwas applied, the issue is closed
You can:
- Mark this issue as fresh with
/remove-lifecycle rotten - Close this issue with
/close - Offer to help out with Issue Triage
Please send feedback to sig-contributor-experience at kubernetes/community.
/lifecycle rotten