Skip to content

Commit 3a0417c

Browse files
authored
Merge pull request kubernetes#81185 from andrewsykim/service-controller-node-resync
service controller: add node event handlers for faster LB backend sync
2 parents 51d41df + 8b490de commit 3a0417c

File tree

1 file changed

+19
-2
lines changed

1 file changed

+19
-2
lines changed

pkg/controller/service/controller.go

Lines changed: 19 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -19,11 +19,10 @@ package service
1919
import (
2020
"context"
2121
"fmt"
22+
"reflect"
2223
"sync"
2324
"time"
2425

25-
"reflect"
26-
2726
v1 "k8s.io/api/core/v1"
2827
"k8s.io/apimachinery/pkg/api/errors"
2928
"k8s.io/apimachinery/pkg/labels"
@@ -96,6 +95,7 @@ type serviceCache struct {
9695
type Controller struct {
9796
cloud cloudprovider.Interface
9897
knownHosts []*v1.Node
98+
knownHostsLock sync.Mutex
9999
servicesToUpdate []*v1.Service
100100
kubeClient clientset.Interface
101101
clusterName string
@@ -170,6 +170,21 @@ func New(
170170
s.serviceLister = serviceInformer.Lister()
171171
s.serviceListerSynced = serviceInformer.Informer().HasSynced
172172

173+
nodeInformer.Informer().AddEventHandlerWithResyncPeriod(
174+
cache.ResourceEventHandlerFuncs{
175+
AddFunc: func(cur interface{}) {
176+
s.nodeSyncLoop()
177+
},
178+
UpdateFunc: func(old, cur interface{}) {
179+
s.nodeSyncLoop()
180+
},
181+
DeleteFunc: func(old interface{}) {
182+
s.nodeSyncLoop()
183+
},
184+
},
185+
time.Duration(0),
186+
)
187+
173188
if err := s.init(); err != nil {
174189
return nil, err
175190
}
@@ -637,6 +652,8 @@ func getNodeConditionPredicate() NodeConditionPredicate {
637652
// nodeSyncLoop handles updating the hosts pointed to by all load
638653
// balancers whenever the set of nodes in the cluster changes.
639654
func (s *Controller) nodeSyncLoop() {
655+
s.knownHostsLock.Lock()
656+
defer s.knownHostsLock.Unlock()
640657
newHosts, err := listWithPredicate(s.nodeLister, getNodeConditionPredicate())
641658
if err != nil {
642659
runtime.HandleError(fmt.Errorf("Failed to retrieve current set of nodes from node lister: %v", err))

0 commit comments

Comments
 (0)