Skip to content

Commit 28aabb6

Browse files
committed
Clean up internal data when egress IPs go away
1 parent 5a0b388 commit 28aabb6

File tree

1 file changed

+11
-3
lines changed

1 file changed

+11
-3
lines changed

pkg/network/common/egressip.go

+11-3
Original file line numberDiff line numberDiff line change
@@ -230,7 +230,7 @@ func (eit *EgressIPTracker) UpdateHostSubnetEgress(hs *networkapi.HostSubnet) {
230230
movedEgressIPs := make([]string, 0, node.requestedIPs.Len())
231231
for _, ip := range node.requestedIPs.UnsortedList() {
232232
eg := eit.egressIPs[ip]
233-
if eg.assignedNodeIP == node.nodeIP {
233+
if eg != nil && eg.assignedNodeIP == node.nodeIP {
234234
movedEgressIPs = append(movedEgressIPs, ip)
235235
eit.deleteNodeEgressIP(node, ip)
236236
}
@@ -308,7 +308,9 @@ func (eit *EgressIPTracker) UpdateNetNamespaceEgress(netns *networkapi.NetNamesp
308308
// Even IPs that weren't added/removed need to be considered "changed", to
309309
// ensure we correctly process reorderings, duplicates added/removed, etc.
310310
for _, ip := range newRequestedIPs.Intersection(oldRequestedIPs).UnsortedList() {
311-
eit.egressIPChanged(eit.egressIPs[ip])
311+
if eg := eit.egressIPs[ip]; eg != nil {
312+
eit.egressIPChanged(eg)
313+
}
312314
}
313315

314316
eit.syncEgressIPs()
@@ -332,7 +334,7 @@ func (eit *EgressIPTracker) egressIPActive(eg *egressIPInfo) (bool, error) {
332334
}
333335
for _, ip := range eg.namespaces[0].requestedIPs {
334336
eg2 := eit.egressIPs[ip]
335-
if eg2 != eg && len(eg2.nodes) == 1 && eg2.nodes[0] == eg.nodes[0] {
337+
if eg2 != nil && eg2 != eg && len(eg2.nodes) == 1 && eg2.nodes[0] == eg.nodes[0] {
336338
return false, fmt.Errorf("Multiple EgressIPs (%s, %s) for VNID %d on node %s", eg.ip, eg2.ip, eg.namespaces[0].vnid, eg.nodes[0].nodeIP)
337339
}
338340
}
@@ -358,6 +360,12 @@ func (eit *EgressIPTracker) syncEgressIPs() {
358360
eit.syncEgressNamespaceState(ns)
359361
}
360362

363+
for eg := range changedEgressIPs {
364+
if len(eg.namespaces) == 0 && len(eg.nodes) == 0 {
365+
delete(eit.egressIPs, eg.ip)
366+
}
367+
}
368+
361369
if eit.updateEgressCIDRs {
362370
eit.updateEgressCIDRs = false
363371
if eit.nodesWithCIDRs > 0 {

0 commit comments

Comments
 (0)