Skip to content

Commit c262a1d

Browse files
nayihzrlakhtakia
authored andcommitted
filter irrelevant pod in pod_reconciler (kubernetes-sigs#696)
1 parent d167e49 commit c262a1d

File tree

2 files changed

+25
-0
lines changed

2 files changed

+25
-0
lines changed

pkg/epp/controller/pod_reconciler.go

+22
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,9 @@ import (
2626
"k8s.io/client-go/tools/record"
2727
ctrl "sigs.k8s.io/controller-runtime"
2828
"sigs.k8s.io/controller-runtime/pkg/client"
29+
"sigs.k8s.io/controller-runtime/pkg/event"
2930
"sigs.k8s.io/controller-runtime/pkg/log"
31+
"sigs.k8s.io/controller-runtime/pkg/predicate"
3032
"sigs.k8s.io/gateway-api-inference-extension/pkg/epp/datastore"
3133
logutil "sigs.k8s.io/gateway-api-inference-extension/pkg/epp/util/logging"
3234
podutil "sigs.k8s.io/gateway-api-inference-extension/pkg/epp/util/pod"
@@ -63,8 +65,28 @@ func (c *PodReconciler) Reconcile(ctx context.Context, req ctrl.Request) (ctrl.R
6365
}
6466

6567
func (c *PodReconciler) SetupWithManager(mgr ctrl.Manager) error {
68+
filter := predicate.Funcs{
69+
CreateFunc: func(ce event.CreateEvent) bool {
70+
pod := ce.Object.(*corev1.Pod)
71+
return c.Datastore.PoolLabelsMatch(pod.GetLabels())
72+
},
73+
UpdateFunc: func(ue event.UpdateEvent) bool {
74+
oldPod := ue.ObjectOld.(*corev1.Pod)
75+
newPod := ue.ObjectNew.(*corev1.Pod)
76+
return c.Datastore.PoolLabelsMatch(oldPod.GetLabels()) || c.Datastore.PoolLabelsMatch(newPod.GetLabels())
77+
},
78+
DeleteFunc: func(de event.DeleteEvent) bool {
79+
pod := de.Object.(*corev1.Pod)
80+
return c.Datastore.PoolLabelsMatch(pod.GetLabels())
81+
},
82+
GenericFunc: func(ge event.GenericEvent) bool {
83+
pod := ge.Object.(*corev1.Pod)
84+
return c.Datastore.PoolLabelsMatch(pod.GetLabels())
85+
},
86+
}
6687
return ctrl.NewControllerManagedBy(mgr).
6788
For(&corev1.Pod{}).
89+
WithEventFilter(filter).
6890
Complete(c)
6991
}
7092

pkg/epp/datastore/datastore.go

+3
Original file line numberDiff line numberDiff line change
@@ -150,6 +150,9 @@ func (ds *datastore) PoolHasSynced() bool {
150150
func (ds *datastore) PoolLabelsMatch(podLabels map[string]string) bool {
151151
ds.poolAndModelsMu.RLock()
152152
defer ds.poolAndModelsMu.RUnlock()
153+
if ds.pool == nil {
154+
return false
155+
}
153156
poolSelector := selectorFromInferencePoolSelector(ds.pool.Spec.Selector)
154157
podSet := labels.Set(podLabels)
155158
return poolSelector.Matches(podSet)

0 commit comments

Comments
 (0)