1
0
Fork 0
mirror of https://github.com/kubernetes-sigs/node-feature-discovery.git synced 2024-12-14 11:57:51 +00:00

Merge pull request #990 from marquiz/devel/nodefeature-ratelimit

nfd-master: implement ratelimiter for nfd api updates
This commit is contained in:
Kubernetes Prow Robot 2022-12-14 06:07:34 -08:00 committed by GitHub
commit 019383848e
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23

View file

@ -259,16 +259,34 @@ func (m *nfdMaster) runGrpcServer(errChan chan<- error) {
// nfdAPIUpdateHandler handles events from the nfd API controller.
func (m *nfdMaster) nfdAPIUpdateHandler() {
updateAll := false
updateNodes := make(map[string]struct{})
rateLimit := time.After(time.Second)
for {
select {
case <-m.nfdController.updateAllNodesChan:
if err := m.nfdAPIUpdateAllNodes(); err != nil {
klog.Error(err)
}
updateAll = true
case nodeName := <-m.nfdController.updateOneNodeChan:
if err := m.nfdAPIUpdateOneNode(nodeName); err != nil {
klog.Error(err)
updateNodes[nodeName] = struct{}{}
case <-rateLimit:
// Check what we need to do
// TODO: we might want to update multiple nodes in parallel
if updateAll {
if err := m.nfdAPIUpdateAllNodes(); err != nil {
klog.Error(err)
}
} else {
for nodeName := range updateNodes {
if err := m.nfdAPIUpdateOneNode(nodeName); err != nil {
klog.Error(err)
}
}
}
// Reset "work queue" and timer
updateAll = false
updateNodes = make(map[string]struct{})
rateLimit = time.After(time.Second)
}
}
}