@@ -29,10 +29,7 @@ import (
2929 "github.com/karmada-io/karmada/pkg/util/names"
3030)
3131
32- // WorkWithinPushClusterPredicate generates the event filter function to skip events that the controllers are uninterested.
33- // Used by controllers:
34- // - execution controller working in karmada-controller-manager
35- // - work status controller working in karmada-controller-manager
32+ // WorkWithinPushClusterPredicate generates the event filter function for execution-controller in karmada-controller-manager
3633func WorkWithinPushClusterPredicate (mgr controllerruntime.Manager ) predicate.Funcs {
3734 predFunc := func (object client.Object ) bool {
3835 obj := object .(* workv1alpha1.Work )
@@ -68,6 +65,81 @@ func WorkWithinPushClusterPredicate(mgr controllerruntime.Manager) predicate.Fun
6865 }
6966}
7067
68+ // NewWorkStatusPredicate generates the event filter function for work-status-controller in karmada-controller-manager
69+ func NewWorkStatusPredicate (mgr controllerruntime.Manager ) predicate.Funcs {
70+ predFunc := func (object client.Object ) bool {
71+ obj := object .(* workv1alpha1.Work )
72+
73+ clusterName , err := names .GetClusterName (obj .Namespace )
74+ if err != nil {
75+ klog .Errorf ("Failed to get member cluster name for work %s/%s" , obj .Namespace , obj .Name )
76+ return false
77+ }
78+
79+ clusterObj , err := util .GetCluster (mgr .GetClient (), clusterName )
80+ if err != nil {
81+ klog .Errorf ("Failed to get the given member cluster %s" , clusterName )
82+ return false
83+ }
84+
85+ return clusterObj .Spec .SyncMode == clusterv1alpha1 .Push
86+ }
87+ return predicate.Funcs {
88+ CreateFunc : func (createEvent event.CreateEvent ) bool {
89+ return predFunc (createEvent .Object )
90+ },
91+ UpdateFunc : func (updateEvent event.UpdateEvent ) bool {
92+ workOld := updateEvent .ObjectOld .(* workv1alpha1.Work )
93+ workNew := updateEvent .ObjectNew .(* workv1alpha1.Work )
94+ workOldApplied := IsResourceApplied (& workOld .Status )
95+ workNewApplied := IsResourceApplied (& workNew .Status )
96+ if ! workOldApplied && workNewApplied {
97+ return predFunc (updateEvent .ObjectNew )
98+ }
99+ return false
100+ },
101+ DeleteFunc : func (event.DeleteEvent ) bool {
102+ return false
103+ },
104+ GenericFunc : func (event.GenericEvent ) bool {
105+ return false
106+ },
107+ }
108+ }
109+
110+ // NewWorkStatusPredicateOnAgent generates the event filter function for work-status-controller in karmada-agent
111+ func NewWorkStatusPredicateOnAgent (curClusterName string ) predicate.Funcs {
112+ predFunc := func (object client.Object ) bool {
113+ clusterName , err := names .GetClusterName (object .GetNamespace ())
114+ if err != nil {
115+ klog .Errorf ("Failed to get member cluster name for work %s/%s" , object .GetNamespace (), object .GetName ())
116+ return false
117+ }
118+ return clusterName == curClusterName
119+ }
120+ return predicate.Funcs {
121+ CreateFunc : func (createEvent event.CreateEvent ) bool {
122+ return predFunc (createEvent .Object )
123+ },
124+ UpdateFunc : func (updateEvent event.UpdateEvent ) bool {
125+ workOld := updateEvent .ObjectOld .(* workv1alpha1.Work )
126+ workNew := updateEvent .ObjectNew .(* workv1alpha1.Work )
127+ workOldApplied := IsResourceApplied (& workOld .Status )
128+ workNewApplied := IsResourceApplied (& workNew .Status )
129+ if ! workOldApplied && workNewApplied {
130+ return predFunc (updateEvent .ObjectNew )
131+ }
132+ return false
133+ },
134+ DeleteFunc : func (event.DeleteEvent ) bool {
135+ return false
136+ },
137+ GenericFunc : func (event.GenericEvent ) bool {
138+ return false
139+ },
140+ }
141+ }
142+
71143// NewPredicateForServiceExportController generates an event filter function for ServiceExport controller running by karmada-controller-manager.
72144func NewPredicateForServiceExportController (mgr controllerruntime.Manager ) predicate.Funcs {
73145 predFunc := func (eventType string , object client.Object ) bool {
0 commit comments