@@ -66,24 +66,25 @@ const (
66
66
type Operator struct {
67
67
queueinformer.Operator
68
68
69
- logger * logrus.Logger
70
- clock utilclock.Clock
71
- opClient operatorclient.ClientInterface
72
- client versioned.Interface
73
- dynamicClient dynamic.Interface
74
- lister operatorlister.OperatorLister
75
- catsrcQueueSet * queueinformer.ResourceQueueSet
76
- subQueueSet * queueinformer.ResourceQueueSet
77
- ipQueueSet * queueinformer.ResourceQueueSet
78
- nsResolveQueue workqueue.RateLimitingInterface
79
- namespace string
80
- sources * grpc.SourceStore
81
- sourcesLastUpdate sharedtime.SharedTime
82
- resolver resolver.Resolver
83
- reconciler reconciler.RegistryReconcilerFactory
84
- csvProvidedAPIsIndexer map [string ]cache.Indexer
85
- clientAttenuator * scoped.ClientAttenuator
86
- serviceAccountQuerier * scoped.UserDefinedServiceAccountQuerier
69
+ logger * logrus.Logger
70
+ clock utilclock.Clock
71
+ opClient operatorclient.ClientInterface
72
+ client versioned.Interface
73
+ dynamicClient dynamic.Interface
74
+ lister operatorlister.OperatorLister
75
+ catsrcQueueSet * queueinformer.ResourceQueueSet
76
+ subQueueSet * queueinformer.ResourceQueueSet
77
+ ipQueueSet * queueinformer.ResourceQueueSet
78
+ nsResolveQueue workqueue.RateLimitingInterface
79
+ namespace string
80
+ sources * grpc.SourceStore
81
+ sourcesLastUpdate sharedtime.SharedTime
82
+ resolver resolver.Resolver
83
+ reconciler reconciler.RegistryReconcilerFactory
84
+ csvProvidedAPIsIndexer map [string ]cache.Indexer
85
+ catalogSubscriberIndexer map [string ]cache.Indexer
86
+ clientAttenuator * scoped.ClientAttenuator
87
+ serviceAccountQuerier * scoped.UserDefinedServiceAccountQuerier
87
88
}
88
89
89
90
type CatalogSourceSyncFunc func (logger * logrus.Entry , in * v1alpha1.CatalogSource ) (out * v1alpha1.CatalogSource , continueSync bool , syncError error )
@@ -124,20 +125,21 @@ func NewOperator(ctx context.Context, kubeconfigPath string, clock utilclock.Clo
124
125
125
126
// Allocate the new instance of an Operator.
126
127
op := & Operator {
127
- Operator : queueOperator ,
128
- logger : logger ,
129
- clock : clock ,
130
- opClient : opClient ,
131
- dynamicClient : dynamicClient ,
132
- client : crClient ,
133
- lister : lister ,
134
- namespace : operatorNamespace ,
135
- resolver : resolver .NewOperatorsV1alpha1Resolver (lister , crClient ),
136
- catsrcQueueSet : queueinformer .NewEmptyResourceQueueSet (),
137
- subQueueSet : queueinformer .NewEmptyResourceQueueSet (),
138
- csvProvidedAPIsIndexer : map [string ]cache.Indexer {},
139
- serviceAccountQuerier : scoped .NewUserDefinedServiceAccountQuerier (logger , crClient ),
140
- clientAttenuator : scoped .NewClientAttenuator (logger , config , opClient , crClient ),
128
+ Operator : queueOperator ,
129
+ logger : logger ,
130
+ clock : clock ,
131
+ opClient : opClient ,
132
+ dynamicClient : dynamicClient ,
133
+ client : crClient ,
134
+ lister : lister ,
135
+ namespace : operatorNamespace ,
136
+ resolver : resolver .NewOperatorsV1alpha1Resolver (lister , crClient ),
137
+ catsrcQueueSet : queueinformer .NewEmptyResourceQueueSet (),
138
+ subQueueSet : queueinformer .NewEmptyResourceQueueSet (),
139
+ csvProvidedAPIsIndexer : map [string ]cache.Indexer {},
140
+ catalogSubscriberIndexer : map [string ]cache.Indexer {},
141
+ serviceAccountQuerier : scoped .NewUserDefinedServiceAccountQuerier (logger , crClient ),
142
+ clientAttenuator : scoped .NewClientAttenuator (logger , config , opClient , crClient ),
141
143
}
142
144
op .sources = grpc .NewSourceStore (logger , 10 * time .Second , 10 * time .Minute , op .syncSourceState )
143
145
op .reconciler = reconciler .NewRegistryReconcilerFactory (lister , opClient , configmapRegistryImage , op .now )
@@ -202,6 +204,12 @@ func NewOperator(ctx context.Context, kubeconfigPath string, clock utilclock.Clo
202
204
// Wire Subscriptions
203
205
subInformer := crInformerFactory .Operators ().V1alpha1 ().Subscriptions ()
204
206
op .lister .OperatorsV1alpha1 ().RegisterSubscriptionLister (namespace , subInformer .Lister ())
207
+ if err := subInformer .Informer ().AddIndexers (cache.Indexers {index .PresentCatalogIndexFuncKey : index .PresentCatalogIndexFunc }); err != nil {
208
+ return nil , err
209
+ }
210
+ subIndexer := subInformer .Informer ().GetIndexer ()
211
+ op .catalogSubscriberIndexer [namespace ] = subIndexer
212
+
205
213
subQueue := workqueue .NewNamedRateLimitingQueue (workqueue .DefaultControllerRateLimiter (), fmt .Sprintf ("%s/subs" , namespace ))
206
214
op .subQueueSet .Set (namespace , subQueue )
207
215
subSyncer , err := subscription .NewSyncer (
@@ -339,6 +347,17 @@ func (o *Operator) syncSourceState(state grpc.SourceState) {
339
347
340
348
switch state .State {
341
349
case connectivity .Ready :
350
+ if o .namespace == state .Key .Namespace {
351
+ subs , err := index .CatalogSubscriberNamespaces (o .catalogSubscriberIndexer ,
352
+ state .Key .Name , state .Key .Namespace )
353
+
354
+ if err == nil {
355
+ for _ , ns := range subs {
356
+ o .nsResolveQueue .Add (ns )
357
+ }
358
+ }
359
+ }
360
+
342
361
o .nsResolveQueue .Add (state .Key .Namespace )
343
362
default :
344
363
if err := o .catsrcQueueSet .Requeue (state .Key .Namespace , state .Key .Name ); err != nil {
0 commit comments