Skip to content

Commit e796c41

Browse files
authored
Merge pull request #2491 from akalenyu/cache-respect-inherited-defaults
[release-0.14] 🐛 inherited defaults not respected in cache BuilderWithOptions
2 parents 942d53b + f27befe commit e796c41

File tree

2 files changed

+49
-10
lines changed

2 files changed

+49
-10
lines changed

pkg/cache/cache.go

Lines changed: 34 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -194,23 +194,32 @@ func New(config *rest.Config, opts Options) (Cache, error) {
194194
// returned from cache get/list before mutating it.
195195
func BuilderWithOptions(options Options) NewCacheFunc {
196196
return func(config *rest.Config, inherited Options) (Cache, error) {
197-
var err error
198-
inherited, err = defaultOpts(config, inherited)
199-
if err != nil {
200-
return nil, err
201-
}
202-
options, err = defaultOpts(config, options)
203-
if err != nil {
204-
return nil, err
205-
}
206-
combined, err := options.inheritFrom(inherited)
197+
combined, err := options.combinedOpts(config, inherited)
207198
if err != nil {
208199
return nil, err
209200
}
210201
return New(config, *combined)
211202
}
212203
}
213204

205+
func (options Options) combinedOpts(config *rest.Config, inherited Options) (*Options, error) {
206+
var err error
207+
inherited, err = defaultOpts(config, inherited)
208+
if err != nil {
209+
return nil, err
210+
}
211+
options = defaultToInheritedOpts(options, inherited)
212+
options, err = defaultOpts(config, options)
213+
if err != nil {
214+
return nil, err
215+
}
216+
combined, err := options.inheritFrom(inherited)
217+
if err != nil {
218+
return nil, err
219+
}
220+
return combined, nil
221+
}
222+
214223
func (options Options) inheritFrom(inherited Options) (*Options, error) {
215224
var (
216225
combined Options
@@ -424,6 +433,21 @@ func defaultOpts(config *rest.Config, opts Options) (Options, error) {
424433
return opts, nil
425434
}
426435

436+
func defaultToInheritedOpts(opts, inherited Options) Options {
437+
if opts.Scheme == nil {
438+
opts.Scheme = inherited.Scheme
439+
}
440+
441+
if opts.Mapper == nil {
442+
opts.Mapper = inherited.Mapper
443+
}
444+
445+
if opts.Resync == nil {
446+
opts.Resync = inherited.Resync
447+
}
448+
return opts
449+
}
450+
427451
func convertToByGVK[T any](byObject map[client.Object]T, def T, scheme *runtime.Scheme) (map[schema.GroupVersionKind]T, error) {
428452
byGVK := map[schema.GroupVersionKind]T{}
429453
for object, value := range byObject {

pkg/cache/cache_unit_test.go

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -73,6 +73,21 @@ var _ = Describe("cache.inheritFrom", func() {
7373
Expect(checkError(specified.inheritFrom(inherited)).Scheme.AllKnownTypes()).To(HaveLen(2))
7474
})
7575
})
76+
Context("Post defaulting of specified", func() {
77+
It("inherited not lost", func() {
78+
inherited.Scheme = runtime.NewScheme()
79+
inherited.Scheme.AddKnownTypes(gv, &unstructured.Unstructured{})
80+
Expect(inherited.Scheme.KnownTypes(gv)).To(HaveLen(1))
81+
inherited.Mapper = meta.NewDefaultRESTMapper([]schema.GroupVersion{gv})
82+
inherited.Resync = pointer.Duration(time.Minute)
83+
84+
combined := checkError(specified.combinedOpts(nil, inherited))
85+
Expect(combined.Mapper).To(Equal(inherited.Mapper))
86+
Expect(combined.Resync).To(Equal(inherited.Resync))
87+
Expect(combined.Scheme).NotTo(BeNil())
88+
Expect(combined.Scheme.KnownTypes(gv)).To(HaveLen(1))
89+
})
90+
})
7691
Context("Mapper", func() {
7792
It("is nil when specified and inherited are unset", func() {
7893
Expect(checkError(specified.inheritFrom(inherited)).Mapper).To(BeNil())

0 commit comments

Comments
 (0)