@@ -199,47 +199,45 @@ func (blder *Builder) Build(r reconcile.Reconciler) (controller.Controller, erro
199
199
return blder .ctrl , nil
200
200
}
201
201
202
- func (blder * Builder ) project (obj client.Object , proj objectProjection ) (client.Object , error ) {
202
+ func (blder * Builder ) project (obj client.Object , hdl handler. EventHandler , proj objectProjection ) (client.Object , handler. EventHandler , error ) {
203
203
switch proj {
204
204
case projectAsNormal :
205
- return obj , nil
205
+ return obj , hdl , nil
206
206
case projectAsMetadata :
207
207
metaObj := & metav1.PartialObjectMetadata {}
208
208
gvk , err := getGvk (obj , blder .mgr .GetScheme ())
209
209
if err != nil {
210
- return nil , fmt .Errorf ("unable to determine GVK of %T for a metadata-only watch: %w" , obj , err )
210
+ return nil , nil , fmt .Errorf ("unable to determine GVK of %T for a metadata-only watch: %w" , obj , err )
211
211
}
212
212
metaObj .SetGroupVersionKind (gvk )
213
- return metaObj , nil
213
+ return metaObj , handler . WrapPartialObjectMetadataHandler ( metaObj , hdl ), err
214
214
default :
215
215
panic (fmt .Sprintf ("unexpected projection type %v on type %T, should not be possible since this is an internal field" , proj , obj ))
216
216
}
217
217
}
218
218
219
219
func (blder * Builder ) doWatch () error {
220
220
// Reconcile type
221
- typeForSrc , err := blder .project (blder .forInput .object , blder .forInput .objectProjection )
221
+ typeForSrc , hdler , err := blder .project (blder .forInput .object , & handler. EnqueueRequestForObject {} , blder .forInput .objectProjection )
222
222
if err != nil {
223
223
return err
224
224
}
225
225
src := & source.Kind {Type : typeForSrc }
226
- hdler := & handler.EnqueueRequestForObject {}
227
226
allPredicates := append (blder .globalPredicates , blder .forInput .predicates ... )
228
227
if err := blder .ctrl .Watch (src , hdler , allPredicates ... ); err != nil {
229
228
return err
230
229
}
231
230
232
231
// Watches the managed types
233
232
for _ , own := range blder .ownsInput {
234
- typeForSrc , err := blder .project (own .object , own .objectProjection )
233
+ typeForSrc , hdler , err := blder .project (own .object , & handler.EnqueueRequestForOwner {
234
+ OwnerType : blder .forInput .object ,
235
+ IsController : true ,
236
+ }, own .objectProjection )
235
237
if err != nil {
236
238
return err
237
239
}
238
240
src := & source.Kind {Type : typeForSrc }
239
- hdler := & handler.EnqueueRequestForOwner {
240
- OwnerType : blder .forInput .object ,
241
- IsController : true ,
242
- }
243
241
allPredicates := append ([]predicate.Predicate (nil ), blder .globalPredicates ... )
244
242
allPredicates = append (allPredicates , own .predicates ... )
245
243
if err := blder .ctrl .Watch (src , hdler , allPredicates ... ); err != nil {
@@ -252,16 +250,19 @@ func (blder *Builder) doWatch() error {
252
250
allPredicates := append ([]predicate.Predicate (nil ), blder .globalPredicates ... )
253
251
allPredicates = append (allPredicates , w .predicates ... )
254
252
253
+ watchHandler := w .eventhandler
254
+
255
255
// If the source of this watch is of type *source.Kind, project it.
256
256
if srckind , ok := w .src .(* source.Kind ); ok {
257
- typeForSrc , err := blder .project (srckind .Type , w .objectProjection )
257
+ typeForSrc , hdl , err := blder .project (srckind .Type , w . eventhandler , w .objectProjection )
258
258
if err != nil {
259
259
return err
260
260
}
261
261
srckind .Type = typeForSrc
262
+ watchHandler = hdl
262
263
}
263
264
264
- if err := blder .ctrl .Watch (w .src , w . eventhandler , allPredicates ... ); err != nil {
265
+ if err := blder .ctrl .Watch (w .src , watchHandler , allPredicates ... ); err != nil {
265
266
return err
266
267
}
267
268
}
0 commit comments