Skip to content

Commit b4874f0

Browse files
committed
Remove CatalogSourceLister usage from resolver/cache.
The cache hardcodes the use of a CatalogSourceLister (imported from a non-resolver package in the OLM module) in order to assign source priorities based on the spec.priority field of CatalogSource. Not all cache sources map to a CatalogSource, so this can instead accept a priority provider interface and the resolver -> non-resolver imports can be removed. Signed-off-by: Ben Luddy <[email protected]>
1 parent 6f59a3b commit b4874f0

File tree

4 files changed

+47
-33
lines changed

4 files changed

+47
-33
lines changed

pkg/controller/registry/resolver/cache/cache.go

Lines changed: 28 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -10,9 +10,6 @@ import (
1010

1111
"github.com/sirupsen/logrus"
1212
"k8s.io/apimachinery/pkg/util/errors"
13-
14-
"github.com/operator-framework/operator-lifecycle-manager/pkg/api/client/listers/operators/v1alpha1"
15-
"github.com/operator-framework/operator-lifecycle-manager/pkg/lib/operatorlister"
1613
)
1714

1815
const existingOperatorKey = "@existing"
@@ -75,14 +72,24 @@ type OperatorCacheProvider interface {
7572
Expire(catalog SourceKey)
7673
}
7774

75+
type SourcePriorityProvider interface {
76+
Priority(SourceKey) int
77+
}
78+
79+
type constantSourcePriorityProvider int
80+
81+
func (spp constantSourcePriorityProvider) Priority(SourceKey) int {
82+
return int(spp)
83+
}
84+
7885
type Cache struct {
79-
logger logrus.StdLogger
80-
sp SourceProvider
81-
catsrcLister v1alpha1.CatalogSourceLister
82-
snapshots map[SourceKey]*snapshotHeader
83-
ttl time.Duration
84-
sem chan struct{}
85-
m sync.RWMutex
86+
logger logrus.StdLogger
87+
sp SourceProvider
88+
sourcePriorityProvider SourcePriorityProvider
89+
snapshots map[SourceKey]*snapshotHeader
90+
ttl time.Duration
91+
sem chan struct{}
92+
m sync.RWMutex
8693
}
8794

8895
var _ OperatorCacheProvider = &Cache{}
@@ -95,9 +102,9 @@ func WithLogger(logger logrus.StdLogger) Option {
95102
}
96103
}
97104

98-
func WithCatalogSourceLister(catalogSourceLister v1alpha1.CatalogSourceLister) Option {
105+
func WithSourcePriorityProvider(spp SourcePriorityProvider) Option {
99106
return func(c *Cache) {
100-
c.catsrcLister = catalogSourceLister
107+
c.sourcePriorityProvider = spp
101108
}
102109
}
103110

@@ -112,11 +119,11 @@ func New(sp SourceProvider, options ...Option) *Cache {
112119
logger.SetOutput(io.Discard)
113120
return logger
114121
}(),
115-
sp: sp,
116-
catsrcLister: operatorlister.NewLister().OperatorsV1alpha1().CatalogSourceLister(),
117-
snapshots: make(map[SourceKey]*snapshotHeader),
118-
ttl: 5 * time.Minute,
119-
sem: make(chan struct{}, MaxConcurrentSnapshotUpdates),
122+
sp: sp,
123+
sourcePriorityProvider: constantSourcePriorityProvider(0),
124+
snapshots: make(map[SourceKey]*snapshotHeader),
125+
ttl: 5 * time.Minute,
126+
sem: make(chan struct{}, MaxConcurrentSnapshotUpdates),
120127
}
121128

122129
for _, opt := range options {
@@ -223,14 +230,10 @@ func (c *Cache) Namespaced(namespaces ...string) MultiCatalogOperatorFinder {
223230
ctx, cancel := context.WithTimeout(context.Background(), CachePopulateTimeout)
224231

225232
hdr := snapshotHeader{
226-
key: miss,
227-
expiry: now.Add(c.ttl),
228-
pop: cancel,
229-
}
230-
231-
// Ignoring error and treat catsrc priority as 0 if not found.
232-
if catsrc, _ := c.catsrcLister.CatalogSources(miss.Namespace).Get(miss.Name); catsrc != nil {
233-
hdr.priority = catsrc.Spec.Priority
233+
key: miss,
234+
expiry: now.Add(c.ttl),
235+
pop: cancel,
236+
priority: c.sourcePriorityProvider.Priority(miss),
234237
}
235238

236239
hdr.m.Lock()

pkg/controller/registry/resolver/resolver.go

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,6 @@ import (
1313

1414
"github.com/operator-framework/api/pkg/constraints"
1515
"github.com/operator-framework/api/pkg/operators/v1alpha1"
16-
v1alpha1listers "github.com/operator-framework/operator-lifecycle-manager/pkg/api/client/listers/operators/v1alpha1"
1716
"github.com/operator-framework/operator-lifecycle-manager/pkg/controller/registry/resolver/cache"
1817
"github.com/operator-framework/operator-lifecycle-manager/pkg/controller/registry/resolver/projection"
1918
"github.com/operator-framework/operator-lifecycle-manager/pkg/controller/registry/resolver/solver"
@@ -32,9 +31,9 @@ type SatResolver struct {
3231
systemConstraintsProvider solver.ConstraintProvider
3332
}
3433

35-
func NewDefaultSatResolver(rcp cache.SourceProvider, catsrcLister v1alpha1listers.CatalogSourceLister, logger logrus.FieldLogger) *SatResolver {
34+
func NewDefaultSatResolver(rcp cache.SourceProvider, sourcePriorityProvider cache.SourcePriorityProvider, logger logrus.FieldLogger) *SatResolver {
3635
return &SatResolver{
37-
cache: cache.New(rcp, cache.WithLogger(logger), cache.WithCatalogSourceLister(catsrcLister)),
36+
cache: cache.New(rcp, cache.WithLogger(logger), cache.WithSourcePriorityProvider(sourcePriorityProvider)),
3837
log: logger,
3938
pc: &predicateConverter{
4039
celEnv: constraints.NewCelEnvironment(),

pkg/controller/registry/resolver/resolver_test.go

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -505,7 +505,7 @@ func TestSolveOperators_CatsrcPrioritySorting(t *testing.T) {
505505
}
506506

507507
satResolver := SatResolver{
508-
cache: cache.New(ssp, cache.WithCatalogSourceLister(&stubCatalogSourceLister{
508+
cache: cache.New(ssp, cache.WithSourcePriorityProvider(catsrcPriorityProvider{lister: &stubCatalogSourceLister{
509509
catsrcs: []*v1alpha1.CatalogSource{
510510
{
511511
ObjectMeta: metav1.ObjectMeta{
@@ -517,7 +517,7 @@ func TestSolveOperators_CatsrcPrioritySorting(t *testing.T) {
517517
},
518518
},
519519
},
520-
})),
520+
}})),
521521
}
522522

523523
operators, err := satResolver.SolveOperators([]string{"olm"}, []*v1alpha1.ClusterServiceVersion{}, subs)
@@ -545,7 +545,7 @@ func TestSolveOperators_CatsrcPrioritySorting(t *testing.T) {
545545
}
546546

547547
satResolver = SatResolver{
548-
cache: cache.New(ssp, cache.WithCatalogSourceLister(&stubCatalogSourceLister{
548+
cache: cache.New(ssp, cache.WithSourcePriorityProvider(catsrcPriorityProvider{lister: &stubCatalogSourceLister{
549549
catsrcs: []*v1alpha1.CatalogSource{
550550
{
551551
ObjectMeta: metav1.ObjectMeta{
@@ -566,7 +566,7 @@ func TestSolveOperators_CatsrcPrioritySorting(t *testing.T) {
566566
},
567567
},
568568
},
569-
})),
569+
}})),
570570
}
571571

572572
operators, err = satResolver.SolveOperators([]string{"olm"}, []*v1alpha1.ClusterServiceVersion{}, subs)

pkg/controller/registry/resolver/step_resolver.go

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -45,6 +45,18 @@ type OperatorStepResolver struct {
4545

4646
var _ StepResolver = &OperatorStepResolver{}
4747

48+
type catsrcPriorityProvider struct {
49+
lister v1alpha1listers.CatalogSourceLister
50+
}
51+
52+
func (pp catsrcPriorityProvider) Priority(key cache.SourceKey) int {
53+
catsrc, err := pp.lister.CatalogSources(key.Namespace).Get(key.Name)
54+
if err != nil {
55+
return 0
56+
}
57+
return catsrc.Spec.Priority
58+
}
59+
4860
func NewOperatorStepResolver(lister operatorlister.OperatorLister, client versioned.Interface, kubeclient kubernetes.Interface,
4961
globalCatalogNamespace string, provider RegistryClientProvider, log logrus.FieldLogger) *OperatorStepResolver {
5062
stepResolver := &OperatorStepResolver{
@@ -53,7 +65,7 @@ func NewOperatorStepResolver(lister operatorlister.OperatorLister, client versio
5365
client: client,
5466
kubeclient: kubeclient,
5567
globalCatalogNamespace: globalCatalogNamespace,
56-
satResolver: NewDefaultSatResolver(SourceProviderFromRegistryClientProvider(provider, log), lister.OperatorsV1alpha1().CatalogSourceLister(), log),
68+
satResolver: NewDefaultSatResolver(SourceProviderFromRegistryClientProvider(provider, log), catsrcPriorityProvider{lister: lister.OperatorsV1alpha1().CatalogSourceLister()}, log),
5769
log: log,
5870
}
5971

0 commit comments

Comments
 (0)