@@ -12,10 +12,12 @@ import (
1212 "k8s.io/client-go/tools/cache"
1313 "knative.dev/pkg/configmap"
1414 "knative.dev/pkg/controller"
15+ "knative.dev/pkg/kmeta"
1516 "knative.dev/pkg/logging"
1617 "knative.dev/pkg/resolver"
1718
1819 eventingv1alpha1 "github.com/triggermesh/triggermesh-core/pkg/apis/eventing/v1alpha1"
20+ mbinformer "github.com/triggermesh/triggermesh-core/pkg/client/generated/injection/informers/eventing/v1alpha1/memorybroker"
1921 rbinformer "github.com/triggermesh/triggermesh-core/pkg/client/generated/injection/informers/eventing/v1alpha1/redisbroker"
2022 tginformer "github.com/triggermesh/triggermesh-core/pkg/client/generated/injection/informers/eventing/v1alpha1/trigger"
2123 tgreconciler "github.com/triggermesh/triggermesh-core/pkg/client/generated/injection/reconciler/eventing/v1alpha1/trigger"
@@ -29,9 +31,11 @@ func NewController(
2931) * controller.Impl {
3032 tgInformer := tginformer .Get (ctx )
3133 rbInformer := rbinformer .Get (ctx )
34+ mbInformer := mbinformer .Get (ctx )
3235
3336 r := & Reconciler {
3437 rbLister : rbInformer .Lister (),
38+ mbLister : mbInformer .Lister (),
3539 }
3640
3741 impl := tgreconciler .NewImpl (ctx , r )
@@ -40,22 +44,29 @@ func NewController(
4044
4145 tgInformer .Informer ().AddEventHandler (controller .HandleAll (impl .Enqueue ))
4246
43- // Filter Redis brokers that are referenced by triggers.
47+ // Filter brokers that are referenced by triggers.
4448 filterBroker := func (obj interface {}) bool {
45- // TODO other brokers should be supported.
49+ // TODO duck
50+ var accessor kmeta.OwnerRefableAccessor
4651 rb , ok := obj .(* eventingv1alpha1.RedisBroker )
4752 if ! ok {
48- return false
53+ mb , ok := obj .(* eventingv1alpha1.MemoryBroker )
54+ if ! ok {
55+ return false
56+ }
57+ accessor = kmeta .OwnerRefableAccessor (mb )
58+ } else {
59+ accessor = kmeta .OwnerRefableAccessor (rb )
4960 }
5061
51- tgl , err := tgInformer .Lister ().Triggers (rb . Namespace ).List (labels .Everything ())
62+ tgl , err := tgInformer .Lister ().Triggers (accessor . GetNamespace () ).List (labels .Everything ())
5263 if err != nil {
5364 logging .FromContext (ctx ).Error ("Unable to list Triggers" , zap .Error (err ))
5465 return false
5566 }
5667
5768 for _ , tg := range tgl {
58- if tg .ReferencesBroker (rb ) {
69+ if tg .ReferencesBroker (accessor ) {
5970 return true
6071 }
6172 }
@@ -64,20 +75,27 @@ func NewController(
6475 }
6576
6677 enqueueFromBroker := func (obj interface {}) {
67- // TODO check GVK if other brokers are supported.
78+ // TODO duck
79+ var accessor kmeta.OwnerRefableAccessor
6880 rb , ok := obj .(* eventingv1alpha1.RedisBroker )
6981 if ! ok {
70- return
82+ mb , ok := obj .(* eventingv1alpha1.MemoryBroker )
83+ if ! ok {
84+ return
85+ }
86+ accessor = kmeta .OwnerRefableAccessor (mb )
87+ } else {
88+ accessor = kmeta .OwnerRefableAccessor (rb )
7189 }
7290
73- tgl , err := tgInformer .Lister ().Triggers (rb . Namespace ).List (labels .Everything ())
91+ tgl , err := tgInformer .Lister ().Triggers (accessor . GetNamespace () ).List (labels .Everything ())
7492 if err != nil {
7593 logging .FromContext (ctx ).Error ("Unable to list Triggers" , zap .Error (err ))
7694 return
7795 }
7896
7997 for _ , tg := range tgl {
80- if tg .ReferencesBroker (rb ) {
98+ if tg .ReferencesBroker (accessor ) {
8199 impl .EnqueueKey (types.NamespacedName {
82100 Name : tg .Name ,
83101 Namespace : tg .Namespace ,
@@ -91,5 +109,10 @@ func NewController(
91109 Handler : controller .HandleAll (enqueueFromBroker ),
92110 })
93111
112+ mbInformer .Informer ().AddEventHandler (cache.FilteringResourceEventHandler {
113+ FilterFunc : filterBroker ,
114+ Handler : controller .HandleAll (enqueueFromBroker ),
115+ })
116+
94117 return impl
95118}
0 commit comments