Skip to content

Commit 8b490de

Browse files
committed
service controller: add OnAdd and OnDelete node event handlers
Signed-off-by: Andrew Sy Kim <[email protected]>
1 parent 8fb66ae commit 8b490de

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"
@@ -101,6 +100,7 @@ type serviceCache struct {
101100
type Controller struct {
102101
cloud cloudprovider.Interface
103102
knownHosts []*v1.Node
103+
knownHostsLock sync.Mutex
104104
servicesToUpdate []*v1.Service
105105
kubeClient clientset.Interface
106106
clusterName string
@@ -175,6 +175,21 @@ func New(
175175
s.serviceLister = serviceInformer.Lister()
176176
s.serviceListerSynced = serviceInformer.Informer().HasSynced
177177

178+
nodeInformer.Informer().AddEventHandlerWithResyncPeriod(
179+
cache.ResourceEventHandlerFuncs{
180+
AddFunc: func(cur interface{}) {
181+
s.nodeSyncLoop()
182+
},
183+
UpdateFunc: func(old, cur interface{}) {
184+
s.nodeSyncLoop()
185+
},
186+
DeleteFunc: func(old interface{}) {
187+
s.nodeSyncLoop()
188+
},
189+
},
190+
time.Duration(0),
191+
)
192+
178193
if err := s.init(); err != nil {
179194
return nil, err
180195
}
@@ -646,6 +661,8 @@ func getNodeConditionPredicate() NodeConditionPredicate {
646661
// nodeSyncLoop handles updating the hosts pointed to by all load
647662
// balancers whenever the set of nodes in the cluster changes.
648663
func (s *Controller) nodeSyncLoop() {
664+
s.knownHostsLock.Lock()
665+
defer s.knownHostsLock.Unlock()
649666
newHosts, err := listWithPredicate(s.nodeLister, getNodeConditionPredicate())
650667
if err != nil {
651668
runtime.HandleError(fmt.Errorf("Failed to retrieve current set of nodes from node lister: %v", err))

0 commit comments

Comments
 (0)