@@ -3,6 +3,7 @@ package plugin
3
3
import (
4
4
"fmt"
5
5
"net"
6
+ "sync"
6
7
7
8
"github.com/golang/glog"
8
9
@@ -25,10 +26,12 @@ type proxyFirewallItem struct {
25
26
}
26
27
27
28
type ovsProxyPlugin struct {
28
- registry * Registry
29
- firewall map [string ][]proxyFirewallItem
30
-
29
+ registry * Registry
31
30
baseEndpointsHandler pconfig.EndpointsConfigHandler
31
+
32
+ lock sync.Mutex
33
+ firewall map [string ][]proxyFirewallItem
34
+ allEndpoints []kapi.Endpoints
32
35
}
33
36
34
37
// Called by higher layers to create the proxy plugin instance; only used by nodes
@@ -77,8 +80,15 @@ func (proxy *ovsProxyPlugin) watchEgressNetworkPolicies() {
77
80
if eventType == watch .Deleted {
78
81
policy .Spec .Egress = nil
79
82
}
80
- proxy .updateNetworkPolicy (* policy )
81
- // FIXME: poke the endpoint-syncer somehow...
83
+
84
+ func () {
85
+ proxy .lock .Lock ()
86
+ defer proxy .lock .Unlock ()
87
+ proxy .updateNetworkPolicy (* policy )
88
+ if proxy .allEndpoints != nil {
89
+ proxy .updateEndpoints ()
90
+ }
91
+ }()
82
92
}
83
93
}
84
94
@@ -111,8 +121,15 @@ func (proxy *ovsProxyPlugin) firewallBlocksIP(namespace string, ip net.IP) bool
111
121
}
112
122
113
123
func (proxy * ovsProxyPlugin ) OnEndpointsUpdate (allEndpoints []kapi.Endpoints ) {
124
+ proxy .lock .Lock ()
125
+ defer proxy .lock .Unlock ()
126
+ proxy .allEndpoints = allEndpoints
127
+ proxy .updateEndpoints ()
128
+ }
129
+
130
+ func (proxy * ovsProxyPlugin ) updateEndpoints () {
114
131
if len (proxy .firewall ) == 0 {
115
- proxy .baseEndpointsHandler .OnEndpointsUpdate (allEndpoints )
132
+ proxy .baseEndpointsHandler .OnEndpointsUpdate (proxy . allEndpoints )
116
133
return
117
134
}
118
135
@@ -122,10 +139,10 @@ func (proxy *ovsProxyPlugin) OnEndpointsUpdate(allEndpoints []kapi.Endpoints) {
122
139
return
123
140
}
124
141
125
- filteredEndpoints := make ([]kapi.Endpoints , 0 , len (allEndpoints ))
142
+ filteredEndpoints := make ([]kapi.Endpoints , 0 , len (proxy . allEndpoints ))
126
143
127
144
EndpointLoop:
128
- for _ , ep := range allEndpoints {
145
+ for _ , ep := range proxy . allEndpoints {
129
146
ns := ep .ObjectMeta .Namespace
130
147
for _ , ss := range ep .Subsets {
131
148
for _ , addr := range ss .Addresses {
0 commit comments