@@ -37,7 +37,6 @@ import (
37
37
38
38
apisv1alpha1 "github.com/kcp-dev/kcp/pkg/apis/apis/v1alpha1"
39
39
"github.com/kcp-dev/kcp/pkg/apis/core"
40
- corev1alpha1 "github.com/kcp-dev/kcp/pkg/apis/core/v1alpha1"
41
40
schedulingv1alpha1 "github.com/kcp-dev/kcp/pkg/apis/scheduling/v1alpha1"
42
41
workloadv1alpha1 "github.com/kcp-dev/kcp/pkg/apis/workload/v1alpha1"
43
42
kcpclientset "github.com/kcp-dev/kcp/pkg/client/clientset/versioned/cluster"
@@ -101,23 +100,25 @@ func NewController(
101
100
indexers .ByLogicalClusterPathAndName : indexers .IndexByLogicalClusterPathAndName ,
102
101
})
103
102
103
+ logger := logging .WithReconciler (klog .Background (), ControllerName )
104
+
104
105
locationInformer .Informer ().AddEventHandler (
105
106
cache.ResourceEventHandlerFuncs {
106
- AddFunc : c .enqueueLocation ,
107
+ AddFunc : func ( obj interface {}) { c .enqueueLocation ( obj , logger ) } ,
107
108
UpdateFunc : func (old , obj interface {}) {
108
109
oldLoc := old .(* schedulingv1alpha1.Location )
109
110
newLoc := obj .(* schedulingv1alpha1.Location )
110
111
if ! reflect .DeepEqual (oldLoc .Spec , newLoc .Spec ) || ! reflect .DeepEqual (oldLoc .Labels , newLoc .Labels ) {
111
- c .enqueueLocation (obj )
112
+ c .enqueueLocation (obj , logger )
112
113
}
113
114
},
114
- DeleteFunc : c .enqueueLocation ,
115
+ DeleteFunc : func ( obj interface {}) { c .enqueueLocation ( obj , logger ) } ,
115
116
},
116
117
)
117
118
118
119
syncTargetInformer .Informer ().AddEventHandler (
119
120
cache.ResourceEventHandlerFuncs {
120
- AddFunc : c .enqueueSyncTarget ,
121
+ AddFunc : func ( obj interface {}) { c .enqueueSyncTarget ( obj , logger ) } ,
121
122
UpdateFunc : func (old , obj interface {}) {
122
123
oldCluster := old .(* workloadv1alpha1.SyncTarget )
123
124
oldClusterCopy := * oldCluster
@@ -137,24 +138,23 @@ func NewController(
137
138
138
139
// compare ignoring heart-beat
139
140
if ! reflect .DeepEqual (oldClusterCopy , newClusterCopy ) {
140
- c .enqueueSyncTarget (obj )
141
+ c .enqueueSyncTarget (obj , logger )
141
142
}
142
143
},
143
- DeleteFunc : c .enqueueSyncTarget ,
144
+ DeleteFunc : func ( obj interface {}) { c .enqueueSyncTarget ( obj , logger ) } ,
144
145
},
145
146
)
146
147
147
- logger := logging .WithReconciler (klog .Background (), ControllerName )
148
148
placementInformer .Informer ().AddEventHandler (cache.ResourceEventHandlerFuncs {
149
- AddFunc : func (obj interface {}) { c .enqueuePlacement (obj , logger , "" ) },
150
- UpdateFunc : func (_ , obj interface {}) { c .enqueuePlacement (obj , logger , "" ) },
151
- DeleteFunc : func (obj interface {}) { c .enqueuePlacement (obj , logger , "" ) },
149
+ AddFunc : func (obj interface {}) { c .enqueuePlacement (obj , logger ) },
150
+ UpdateFunc : func (_ , obj interface {}) { c .enqueuePlacement (obj , logger ) },
151
+ DeleteFunc : func (obj interface {}) { c .enqueuePlacement (obj , logger ) },
152
152
})
153
153
154
154
apiBindingInformer .Informer ().AddEventHandler (cache.ResourceEventHandlerFuncs {
155
- AddFunc : c .enqueueAPIBinding ,
156
- UpdateFunc : func (_ , obj interface {}) { c .enqueueAPIBinding (obj ) },
157
- DeleteFunc : c .enqueueAPIBinding ,
155
+ AddFunc : func ( obj interface {}) { c .enqueueAPIBinding ( obj , logger ) } ,
156
+ UpdateFunc : func (_ , obj interface {}) { c .enqueueAPIBinding (obj , logger ) },
157
+ DeleteFunc : func ( obj interface {}) { c .enqueueAPIBinding ( obj , logger ) } ,
158
158
})
159
159
160
160
return c , nil
@@ -188,7 +188,7 @@ type controller struct {
188
188
}
189
189
190
190
// enqueueLocation finds placement ref to this location at first, and then namespaces bound to this placement.
191
- func (c * controller ) enqueueLocation (obj interface {}) {
191
+ func (c * controller ) enqueueLocation (obj interface {}, logger logr. Logger ) {
192
192
if tombstone , ok := obj .(cache.DeletedFinalStateUnknown ); ok {
193
193
obj = tombstone .Obj
194
194
}
@@ -215,24 +215,24 @@ func (c *controller) enqueueLocation(obj interface{}) {
215
215
placements = append (placements , placementsByPath ... )
216
216
}
217
217
218
- logger := logging . WithObject (logging .WithReconciler ( klog . Background (), ControllerName ), location )
218
+ logger = logger . WithValues (logging .FromPrefix ( "locationReason" , location ) ... )
219
219
for _ , placement := range placements {
220
- c .enqueuePlacement (placement , logger , " because of Location" )
220
+ c .enqueuePlacement (placement , logger )
221
221
}
222
222
}
223
223
224
- func (c * controller ) enqueuePlacement (obj interface {}, logger logr.Logger , logSuffix string ) {
224
+ func (c * controller ) enqueuePlacement (obj interface {}, logger logr.Logger ) {
225
225
key , err := kcpcache .DeletionHandlingMetaClusterNamespaceKeyFunc (obj )
226
226
if err != nil {
227
227
runtime .HandleError (err )
228
228
return
229
229
}
230
230
231
- logging .WithQueueKey (logger , key ).V (2 ).Info (fmt . Sprintf ( "queueing Placement%s" , logSuffix ) )
231
+ logging .WithQueueKey (logger , key ).V (2 ).Info ("queueing Placement" )
232
232
c .queue .Add (key )
233
233
}
234
234
235
- func (c * controller ) enqueueAPIBinding (obj interface {}) {
235
+ func (c * controller ) enqueueAPIBinding (obj interface {}, logger logr. Logger ) {
236
236
key , err := kcpcache .DeletionHandlingMetaClusterNamespaceKeyFunc (obj )
237
237
if err != nil {
238
238
runtime .HandleError (err )
@@ -250,50 +250,35 @@ func (c *controller) enqueueAPIBinding(obj interface{}) {
250
250
return
251
251
}
252
252
253
- logger := logging .WithObject (logging .WithReconciler (klog .Background (), ControllerName ), obj .(* apisv1alpha1.APIBinding ))
253
+ logger = logger .WithValues (logging .FromPrefix ("apiBindingReason" , obj .(* apisv1alpha1.APIBinding ))... )
254
+
254
255
for _ , placement := range placements {
255
- c .enqueuePlacement (placement , logger , " because of APIBinding" )
256
+ c .enqueuePlacement (placement , logger )
256
257
}
257
258
}
258
259
259
- func (c * controller ) enqueueSyncTarget (obj interface {}) {
260
- key , err := kcpcache .DeletionHandlingMetaClusterNamespaceKeyFunc (obj )
261
- if err != nil {
262
- runtime .HandleError (err )
263
- return
260
+ func (c * controller ) enqueueSyncTarget (obj interface {}, logger logr.Logger ) {
261
+ if tombstone , ok := obj .(cache.DeletedFinalStateUnknown ); ok {
262
+ obj = tombstone .Obj
264
263
}
265
264
266
- clusterName , _ , _ , err := kcpcache . SplitMetaClusterNamespaceKey ( key )
267
- if err != nil {
268
- runtime .HandleError (err )
265
+ syncTarget , ok := obj .( * workloadv1alpha1. SyncTarget )
266
+ if ! ok {
267
+ runtime .HandleError (fmt . Errorf ( "unexpected object type: %T" , obj ) )
269
268
return
270
269
}
271
270
272
- cluster , err := c .logicalClusterLister .Cluster (clusterName ).Get (corev1alpha1 .LogicalClusterName )
271
+ // Get all locations in the same cluster and enqueue locations.
272
+ locations , err := c .locationLister .Cluster (logicalcluster .From (syncTarget )).List (labels .Everything ())
273
273
if err != nil {
274
274
runtime .HandleError (err )
275
275
return
276
276
}
277
277
278
- // placements referencing by cluster name
279
- placements , err := c .placementIndexer .ByIndex (bySelectedLocationPath , logicalcluster .From (cluster ).String ())
280
- if err != nil {
281
- runtime .HandleError (err )
282
- return
283
- }
284
- if path := cluster .Annotations [core .LogicalClusterPathAnnotationKey ]; path != "" {
285
- // placements referencing by path
286
- placementsByPath , err := c .placementIndexer .ByIndex (bySelectedLocationPath , path )
287
- if err != nil {
288
- runtime .HandleError (err )
289
- return
290
- }
291
- placements = append (placements , placementsByPath ... )
292
- }
278
+ logger = logger .WithValues (logging .FromPrefix ("syncTargetReason" , syncTarget )... )
293
279
294
- logger := logging .WithObject (logging .WithReconciler (klog .Background (), ControllerName ), obj .(* workloadv1alpha1.SyncTarget ))
295
- for _ , placement := range placements {
296
- c .enqueuePlacement (placement , logger , " because of SyncTarget" )
280
+ for _ , location := range locations {
281
+ c .enqueueLocation (location , logger )
297
282
}
298
283
}
299
284
0 commit comments