@@ -51,9 +51,10 @@ type Controller struct {
5151 ovnEipsLister kubeovnlister.OvnEipLister
5252 ovnEipsSynced cache.InformerSynced
5353
54- podsLister listerv1.PodLister
55- podsSynced cache.InformerSynced
56- podQueue workqueue.TypedRateLimitingInterface [string ]
54+ podsLister listerv1.PodLister
55+ podsSynced cache.InformerSynced
56+ updatePodQueue workqueue.TypedRateLimitingInterface [string ]
57+ deletePodQueue workqueue.TypedRateLimitingInterface [string ]
5758
5859 nodesLister listerv1.NodeLister
5960 nodesSynced cache.InformerSynced
@@ -112,9 +113,10 @@ func NewController(config *Configuration, stopCh <-chan struct{}, podInformerFac
112113 ovnEipsLister : ovnEipInformer .Lister (),
113114 ovnEipsSynced : ovnEipInformer .Informer ().HasSynced ,
114115
115- podsLister : podInformer .Lister (),
116- podsSynced : podInformer .Informer ().HasSynced ,
117- podQueue : newTypedRateLimitingQueue [string ]("Pod" , nil ),
116+ podsLister : podInformer .Lister (),
117+ podsSynced : podInformer .Informer ().HasSynced ,
118+ updatePodQueue : newTypedRateLimitingQueue [string ]("UpdatePod" , nil ),
119+ deletePodQueue : newTypedRateLimitingQueue [string ]("DeletePod" , nil ),
118120
119121 nodesLister : nodeInformer .Lister (),
120122 nodesSynced : nodeInformer .Informer ().HasSynced ,
@@ -175,7 +177,8 @@ func NewController(config *Configuration, stopCh <-chan struct{}, podInformerFac
175177 }
176178
177179 if _ , err = podInformer .Informer ().AddEventHandler (cache.ResourceEventHandlerFuncs {
178- UpdateFunc : controller .enqueuePod ,
180+ UpdateFunc : controller .enqueueUpdatePod ,
181+ DeleteFunc : controller .enqueueDeletePod ,
179182 }); err != nil {
180183 return nil , err
181184 }
@@ -518,7 +521,7 @@ func (c *Controller) processNextServiceWorkItem() bool {
518521 return true
519522}
520523
521- func (c * Controller ) enqueuePod (oldObj , newObj any ) {
524+ func (c * Controller ) enqueueUpdatePod (oldObj , newObj any ) {
522525 oldPod := oldObj .(* v1.Pod )
523526 newPod := newObj .(* v1.Pod )
524527 key := cache .MetaObjectToName (newPod ).String ()
@@ -529,8 +532,9 @@ func (c *Controller) enqueuePod(oldObj, newObj any) {
529532 oldPod .Annotations [util .NetemQosJitterAnnotation ] != newPod .Annotations [util .NetemQosJitterAnnotation ] ||
530533 oldPod .Annotations [util .NetemQosLimitAnnotation ] != newPod .Annotations [util .NetemQosLimitAnnotation ] ||
531534 oldPod .Annotations [util .NetemQosLossAnnotation ] != newPod .Annotations [util .NetemQosLossAnnotation ] ||
532- oldPod .Annotations [util .MirrorControlAnnotation ] != newPod .Annotations [util .MirrorControlAnnotation ] {
533- c .podQueue .Add (key )
535+ oldPod .Annotations [util .MirrorControlAnnotation ] != newPod .Annotations [util .MirrorControlAnnotation ] ||
536+ oldPod .Annotations [util .IPAddressAnnotation ] != newPod .Annotations [util .IPAddressAnnotation ] {
537+ c .updatePodQueue .Add (key )
534538 return
535539 }
536540
@@ -548,30 +552,63 @@ func (c *Controller) enqueuePod(oldObj, newObj any) {
548552 oldPod .Annotations [fmt .Sprintf (util .NetemQosLimitAnnotationTemplate , provider )] != newPod .Annotations [fmt .Sprintf (util .NetemQosLimitAnnotationTemplate , provider )] ||
549553 oldPod .Annotations [fmt .Sprintf (util .NetemQosLossAnnotationTemplate , provider )] != newPod .Annotations [fmt .Sprintf (util .NetemQosLossAnnotationTemplate , provider )] ||
550554 oldPod .Annotations [fmt .Sprintf (util .MirrorControlAnnotationTemplate , provider )] != newPod .Annotations [fmt .Sprintf (util .MirrorControlAnnotationTemplate , provider )] {
551- c .podQueue .Add (key )
555+ c .updatePodQueue .Add (key )
552556 }
553557 }
554558 }
555559}
556560
557- func (c * Controller ) runPodWorker () {
558- for c .processNextPodWorkItem () {
561+ func (c * Controller ) enqueueDeletePod (obj any ) {
562+ pod := obj .(* v1.Pod )
563+ key := cache .MetaObjectToName (pod ).String ()
564+ c .deletePodQueue .Add (key )
565+ }
566+
567+ func (c * Controller ) runUpdatePodWorker () {
568+ for c .processNextUpdatePodWorkItem () {
569+ }
570+ }
571+
572+ func (c * Controller ) runDeletePodWorker () {
573+ for c .processNextDeletePodWorkItem () {
559574 }
560575}
561576
562- func (c * Controller ) processNextPodWorkItem () bool {
563- key , shutdown := c .podQueue .Get ()
577+ func (c * Controller ) processNextUpdatePodWorkItem () bool {
578+ key , shutdown := c .updatePodQueue .Get ()
579+ if shutdown {
580+ return false
581+ }
582+
583+ err := func (key string ) error {
584+ defer c .updatePodQueue .Done (key )
585+ if err := c .handleUpdatePod (key ); err != nil {
586+ c .updatePodQueue .AddRateLimited (key )
587+ return fmt .Errorf ("error syncing %q: %w, requeuing" , key , err )
588+ }
589+ c .updatePodQueue .Forget (key )
590+ return nil
591+ }(key )
592+ if err != nil {
593+ utilruntime .HandleError (err )
594+ return true
595+ }
596+ return true
597+ }
598+
599+ func (c * Controller ) processNextDeletePodWorkItem () bool {
600+ key , shutdown := c .deletePodQueue .Get ()
564601 if shutdown {
565602 return false
566603 }
567604
568605 err := func (key string ) error {
569- defer c .podQueue .Done (key )
570- if err := c .handlePod (key ); err != nil {
571- c .podQueue .AddRateLimited (key )
606+ defer c .deletePodQueue .Done (key )
607+ if err := c .handleDeletePod (key ); err != nil {
608+ c .deletePodQueue .AddRateLimited (key )
572609 return fmt .Errorf ("error syncing %q: %w, requeuing" , key , err )
573610 }
574- c .podQueue .Forget (key )
611+ c .deletePodQueue .Forget (key )
575612 return nil
576613 }(key )
577614 if err != nil {
@@ -615,7 +652,8 @@ func (c *Controller) Run(stopCh <-chan struct{}) {
615652 defer c .deleteProviderNetworkQueue .ShutDown ()
616653 defer c .subnetQueue .ShutDown ()
617654 defer c .serviceQueue .ShutDown ()
618- defer c .podQueue .ShutDown ()
655+ defer c .updatePodQueue .ShutDown ()
656+ defer c .deletePodQueue .ShutDown ()
619657
620658 go wait .Until (ovs .CleanLostInterface , time .Minute , stopCh )
621659 go wait .Until (recompute , 10 * time .Minute , stopCh )
@@ -633,7 +671,8 @@ func (c *Controller) Run(stopCh <-chan struct{}) {
633671 go wait .Until (c .runAddOrUpdateServicekWorker , time .Second , stopCh )
634672 go wait .Until (c .runDeleteProviderNetworkWorker , time .Second , stopCh )
635673 go wait .Until (c .runSubnetWorker , time .Second , stopCh )
636- go wait .Until (c .runPodWorker , time .Second , stopCh )
674+ go wait .Until (c .runUpdatePodWorker , time .Second , stopCh )
675+ go wait .Until (c .runDeletePodWorker , time .Second , stopCh )
637676 go wait .Until (c .runGateway , 3 * time .Second , stopCh )
638677 go wait .Until (c .loopEncapIPCheck , 3 * time .Second , stopCh )
639678 go wait .Until (c .ovnMetricsUpdate , 3 * time .Second , stopCh )
0 commit comments