🐛 quota: use a workqueue to manage updating monitors #2270
Merged
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.
When there's a lot of churn in the types contained in
kcp
, the type-aware shared informer factory will be sending out a lot of notifications in a short window of time. The previous implementation used a single goroutine to consume the notifications, therefore restricting the allowed production throughput to the consumption throughput, leading to notifications being lost.In order to be more resilient to this type of situation, we need to decouple consumption from production, and while we're doing that we do not want to hold on to a large number of pending notifications, nor do we want to duplicate work when many notifications are received during the handling of the first.
As the monitor update is idempotent, but not reentrant, we can utilize a workqueue with one worker to ensure that handling on the consumption is single-threaded, while de-duplicating notifications that occur while monitor updates are in flight.
Signed-off-by: Steve Kuznetsov skuznets@redhat.com
/assign @ncdc