Skip to content

Commit 144b772

Browse files
committed
fix gabage u2o openflow (#5757)
* fix delete pod not remove u2o flow Signed-off-by: clyi <[email protected]>
1 parent 74ca598 commit 144b772

File tree

4 files changed

+37
-33
lines changed

4 files changed

+37
-33
lines changed

pkg/daemon/controller.go

Lines changed: 16 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -54,7 +54,7 @@ type Controller struct {
5454
podsLister listerv1.PodLister
5555
podsSynced cache.InformerSynced
5656
updatePodQueue workqueue.TypedRateLimitingInterface[string]
57-
deletePodQueue workqueue.TypedRateLimitingInterface[string]
57+
deletePodQueue workqueue.TypedRateLimitingInterface[*podEvent]
5858

5959
nodesLister listerv1.NodeLister
6060
nodesSynced cache.InformerSynced
@@ -116,7 +116,7 @@ func NewController(config *Configuration, stopCh <-chan struct{}, podInformerFac
116116
podsLister: podInformer.Lister(),
117117
podsSynced: podInformer.Informer().HasSynced,
118118
updatePodQueue: newTypedRateLimitingQueue[string]("UpdatePod", nil),
119-
deletePodQueue: newTypedRateLimitingQueue[string]("DeletePod", nil),
119+
deletePodQueue: newTypedRateLimitingQueue[*podEvent]("DeletePod", nil),
120120

121121
nodesLister: nodeInformer.Lister(),
122122
nodesSynced: nodeInformer.Informer().HasSynced,
@@ -458,6 +458,10 @@ type serviceEvent struct {
458458
oldObj, newObj any
459459
}
460460

461+
type podEvent struct {
462+
oldObj any
463+
}
464+
461465
func (c *Controller) enqueueAddSubnet(obj any) {
462466
c.subnetQueue.Add(&subnetEvent{newObj: obj})
463467
}
@@ -590,8 +594,8 @@ func (c *Controller) enqueueDeletePod(obj any) {
590594
return
591595
}
592596

593-
key := cache.MetaObjectToName(pod).String()
594-
c.deletePodQueue.Add(key)
597+
klog.V(3).Infof("enqueue delete pod %s", pod.Name)
598+
c.deletePodQueue.Add(&podEvent{oldObj: pod})
595599
}
596600

597601
func (c *Controller) runUpdatePodWorker() {
@@ -627,20 +631,20 @@ func (c *Controller) processNextUpdatePodWorkItem() bool {
627631
}
628632

629633
func (c *Controller) processNextDeletePodWorkItem() bool {
630-
key, shutdown := c.deletePodQueue.Get()
634+
event, shutdown := c.deletePodQueue.Get()
631635
if shutdown {
632636
return false
633637
}
634638

635-
err := func(key string) error {
636-
defer c.deletePodQueue.Done(key)
637-
if err := c.handleDeletePod(key); err != nil {
638-
c.deletePodQueue.AddRateLimited(key)
639-
return fmt.Errorf("error syncing %q: %w, requeuing", key, err)
639+
err := func(event *podEvent) error {
640+
defer c.deletePodQueue.Done(event)
641+
if err := c.handleDeletePod(event); err != nil {
642+
c.deletePodQueue.AddRateLimited(event)
643+
return fmt.Errorf("error syncing pod event: %w, requeuing", err)
640644
}
641-
c.deletePodQueue.Forget(key)
645+
c.deletePodQueue.Forget(event)
642646
return nil
643-
}(key)
647+
}(event)
644648
if err != nil {
645649
utilruntime.HandleError(err)
646650
return true

pkg/daemon/controller_linux.go

Lines changed: 8 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -971,27 +971,20 @@ func (c *Controller) handleUpdatePod(key string) error {
971971
return nil
972972
}
973973

974-
func (c *Controller) handleDeletePod(key string) error {
975-
namespace, name, err := cache.SplitMetaNamespaceKey(key)
976-
if err != nil {
977-
utilruntime.HandleError(fmt.Errorf("invalid resource key: %s", key))
974+
func (c *Controller) handleDeletePod(event *podEvent) error {
975+
var pod *v1.Pod
976+
if event.oldObj != nil {
977+
pod = event.oldObj.(*v1.Pod)
978+
} else {
978979
return nil
979980
}
980981

981-
pod, err := c.podsLister.Pods(namespace).Get(name)
982-
if err != nil {
983-
if k8serrors.IsNotFound(err) {
984-
return nil
985-
}
986-
klog.Error(err)
987-
return err
988-
}
989-
990-
if _, ok := pod.Annotations[util.LogicalSwitchAnnotation]; !ok {
982+
logicalSwitch, ok := pod.Annotations[util.LogicalSwitchAnnotation]
983+
if !ok {
991984
return nil
992985
}
993986

994-
subnet, err := c.subnetsLister.Get(pod.Annotations[util.LogicalSwitchAnnotation])
987+
subnet, err := c.subnetsLister.Get(logicalSwitch)
995988
if err != nil {
996989
klog.Error(err)
997990
return err

pkg/daemon/controller_windows.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -141,7 +141,7 @@ func routeDiff(existingRoutes, v4Cidrs, v6Cidrs []string) (toAddV4, toAddV6, toD
141141
return
142142
}
143143

144-
func (c *Controller) handleDeletePod(key string) error {
144+
func (c *Controller) handleDeletePod(event *podEvent) error {
145145
return nil
146146
}
147147

pkg/ovs/ovs-ofctl.go

Lines changed: 12 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -214,11 +214,18 @@ func AddOrUpdateU2OKeepSrcMac(client *ovs.Client, bridgeName, podIP, podMac, cha
214214
return err
215215
}
216216

217-
for _, existingFlow := range flows {
218-
if existingFlow.Priority == util.U2OKeepSrcMacPriority && existingFlow.InPort == localnetPatchPortID {
219-
klog.V(3).Infof("flow already exists in bridge %s for in_port=%d, ip_src=%s, dl_src=%s",
220-
bridgeName, localnetPatchPortID, podIP, chassisMac)
221-
return nil
217+
expectedAction := fmt.Sprintf("mod_dl_src:%s", podMac)
218+
for _, flow := range flows {
219+
if flow.Priority != util.U2OKeepSrcMacPriority || flow.InPort != localnetPatchPortID {
220+
continue
221+
}
222+
223+
for _, action := range flow.Actions {
224+
if actionText, _ := action.MarshalText(); string(actionText) == expectedAction {
225+
klog.V(3).Infof("flow already exists in bridge %s for in_port=%d, ip_src=%s, dl_src=%s, actions=mod_dl_src:%s",
226+
bridgeName, localnetPatchPortID, podIP, chassisMac, podMac)
227+
return nil
228+
}
222229
}
223230
}
224231

0 commit comments

Comments
 (0)