@@ -17,6 +17,8 @@ import (
1717 "syscall"
1818 "time"
1919
20+ "golang.org/x/net/context"
21+
2022 "github.com/cloudnativelabs/kube-router/pkg/cri"
2123 "github.com/cloudnativelabs/kube-router/pkg/healthcheck"
2224 "github.com/cloudnativelabs/kube-router/pkg/metrics"
@@ -28,7 +30,6 @@ import (
2830 "github.com/prometheus/client_golang/prometheus"
2931 "github.com/vishvananda/netlink"
3032 "github.com/vishvananda/netns"
31- "golang.org/x/net/context"
3233 api "k8s.io/api/core/v1"
3334 "k8s.io/client-go/kubernetes"
3435 "k8s.io/client-go/tools/cache"
@@ -220,6 +221,7 @@ type NetworkServicesController struct {
220221 ln LinuxNetworking
221222 readyForUpdates bool
222223 ProxyFirewallSetup * sync.Cond
224+ ipsetMutex * sync.Mutex
223225
224226 // Map of ipsets that we use.
225227 ipsetMap map [string ]* utils.Set
@@ -648,6 +650,13 @@ func (nsc *NetworkServicesController) cleanupIpvsFirewall() {
648650 }
649651
650652 // Clear ipsets.
653+ klog .V (1 ).Infof ("Attempting to attain ipset mutex lock" )
654+ nsc .ipsetMutex .Lock ()
655+ klog .V (1 ).Infof ("Attained ipset mutex lock, continuing..." )
656+ defer func () {
657+ nsc .ipsetMutex .Unlock ()
658+ klog .V (1 ).Infof ("Returned ipset mutex lock" )
659+ }()
651660 ipSetHandler , err := utils .NewIPSet (false )
652661 if err != nil {
653662 klog .Errorf ("Failed to initialize ipset handler: %s" , err .Error ())
@@ -674,6 +683,13 @@ func (nsc *NetworkServicesController) syncIpvsFirewall() error {
674683 - update ipsets based on currently active IPVS services
675684 */
676685 var err error
686+ klog .V (1 ).Infof ("Attempting to attain ipset mutex lock" )
687+ nsc .ipsetMutex .Lock ()
688+ klog .V (1 ).Infof ("Attained ipset mutex lock, continuing..." )
689+ defer func () {
690+ nsc .ipsetMutex .Unlock ()
691+ klog .V (1 ).Infof ("Returned ipset mutex lock" )
692+ }()
677693
678694 localIPsIPSet := nsc .ipsetMap [localIPsIPSetName ]
679695
@@ -2462,15 +2478,15 @@ func (nsc *NetworkServicesController) handleServiceDelete(obj interface{}) {
24622478// NewNetworkServicesController returns NetworkServicesController object
24632479func NewNetworkServicesController (clientset kubernetes.Interface ,
24642480 config * options.KubeRouterConfig , svcInformer cache.SharedIndexInformer ,
2465- epInformer cache.SharedIndexInformer , podInformer cache.SharedIndexInformer ) (* NetworkServicesController , error ) {
2481+ epInformer cache.SharedIndexInformer , podInformer cache.SharedIndexInformer , ipsetMutex * sync. Mutex ) (* NetworkServicesController , error ) {
24662482
24672483 var err error
24682484 ln , err := newLinuxNetworking ()
24692485 if err != nil {
24702486 return nil , err
24712487 }
24722488
2473- nsc := NetworkServicesController {ln : ln }
2489+ nsc := NetworkServicesController {ln : ln , ipsetMutex : ipsetMutex }
24742490
24752491 if config .MetricsEnabled {
24762492 //Register the metrics for this controller
0 commit comments