Skip to content

Commit 3c4deba

Browse files
authored
Merge pull request #2103 from vincepri/cleanup-informer-map
🌱 Refactor internal cache/informers map impl
2 parents 3f48978 + 384ffbc commit 3c4deba

6 files changed

+268
-349
lines changed

pkg/cache/cache.go

+16-4
Original file line numberDiff line numberDiff line change
@@ -170,19 +170,31 @@ func New(config *rest.Config, opts Options) (Cache, error) {
170170
if err != nil {
171171
return nil, err
172172
}
173-
transformByGVK, err := convertToByGVK(opts.TransformByObject, opts.DefaultTransform, opts.Scheme)
173+
transformers, err := convertToByGVK(opts.TransformByObject, opts.DefaultTransform, opts.Scheme)
174174
if err != nil {
175175
return nil, err
176176
}
177-
transformByObj := internal.TransformFuncByObjectFromMap(transformByGVK)
177+
transformByGVK := internal.TransformFuncByGVKFromMap(transformers)
178178

179179
internalSelectorsByGVK := internal.SelectorsByGVK{}
180180
for gvk, selector := range selectorsByGVK {
181181
internalSelectorsByGVK[gvk] = internal.Selector(selector)
182182
}
183183

184-
im := internal.NewInformersMap(config, opts.Scheme, opts.Mapper, *opts.Resync, opts.Namespace, internalSelectorsByGVK, disableDeepCopyByGVK, transformByObj)
185-
return &informerCache{InformersMap: im}, nil
184+
return &informerCache{
185+
scheme: opts.Scheme,
186+
InformersMap: internal.NewInformersMap(config, &internal.InformersMapOptions{
187+
Scheme: opts.Scheme,
188+
Mapper: opts.Mapper,
189+
ResyncPeriod: *opts.Resync,
190+
Namespace: opts.Namespace,
191+
ByGVK: internal.InformersMapOptionsByGVK{
192+
Selectors: internalSelectorsByGVK,
193+
DisableDeepCopy: disableDeepCopyByGVK,
194+
Transformers: transformByGVK,
195+
},
196+
}),
197+
}, nil
186198
}
187199

188200
// BuilderWithOptions returns a Cache constructor that will build a cache

pkg/cache/informer_cache.go

+5-4
Original file line numberDiff line numberDiff line change
@@ -47,12 +47,13 @@ func (*ErrCacheNotStarted) Error() string {
4747

4848
// informerCache is a Kubernetes Object cache populated from InformersMap. informerCache wraps an InformersMap.
4949
type informerCache struct {
50+
scheme *runtime.Scheme
5051
*internal.InformersMap
5152
}
5253

5354
// Get implements Reader.
5455
func (ip *informerCache) Get(ctx context.Context, key client.ObjectKey, out client.Object, opts ...client.GetOption) error {
55-
gvk, err := apiutil.GVKForObject(out, ip.Scheme)
56+
gvk, err := apiutil.GVKForObject(out, ip.scheme)
5657
if err != nil {
5758
return err
5859
}
@@ -91,7 +92,7 @@ func (ip *informerCache) List(ctx context.Context, out client.ObjectList, opts .
9192
// for a single object corresponding to the passed-in list type. We need them
9293
// because they are used as cache map key.
9394
func (ip *informerCache) objectTypeForListObject(list client.ObjectList) (*schema.GroupVersionKind, runtime.Object, error) {
94-
gvk, err := apiutil.GVKForObject(list, ip.Scheme)
95+
gvk, err := apiutil.GVKForObject(list, ip.scheme)
9596
if err != nil {
9697
return nil, nil, err
9798
}
@@ -132,7 +133,7 @@ func (ip *informerCache) objectTypeForListObject(list client.ObjectList) (*schem
132133
// GetInformerForKind returns the informer for the GroupVersionKind.
133134
func (ip *informerCache) GetInformerForKind(ctx context.Context, gvk schema.GroupVersionKind) (Informer, error) {
134135
// Map the gvk to an object
135-
obj, err := ip.Scheme.New(gvk)
136+
obj, err := ip.scheme.New(gvk)
136137
if err != nil {
137138
return nil, err
138139
}
@@ -146,7 +147,7 @@ func (ip *informerCache) GetInformerForKind(ctx context.Context, gvk schema.Grou
146147

147148
// GetInformer returns the informer for the obj.
148149
func (ip *informerCache) GetInformer(ctx context.Context, obj client.Object) (Informer, error) {
149-
gvk, err := apiutil.GVKForObject(obj, ip.Scheme)
150+
gvk, err := apiutil.GVKForObject(obj, ip.scheme)
150151
if err != nil {
151152
return nil, err
152153
}

pkg/cache/informer_cache_unit_test.go

+4-3
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,8 @@ const (
3838

3939
var _ = Describe("ip.objectTypeForListObject", func() {
4040
ip := &informerCache{
41-
InformersMap: &internal.InformersMap{Scheme: scheme.Scheme},
41+
scheme: scheme.Scheme,
42+
InformersMap: &internal.InformersMap{},
4243
}
4344

4445
It("should find the object type for unstructured lists", func() {
@@ -70,14 +71,14 @@ var _ = Describe("ip.objectTypeForListObject", func() {
7071

7172
It("should find the object type of a list with a slice of pointers items field", func() {
7273
By("registering the type", func() {
73-
ip.Scheme = runtime.NewScheme()
74+
ip.scheme = runtime.NewScheme()
7475
err := (&crscheme.Builder{
7576
GroupVersion: schema.GroupVersion{Group: itemPointerSliceTypeGroupName, Version: itemPointerSliceTypeVersion},
7677
}).
7778
Register(
7879
&controllertest.UnconventionalListType{},
7980
&controllertest.UnconventionalListTypeList{},
80-
).AddToScheme(ip.Scheme)
81+
).AddToScheme(ip.scheme)
8182
Expect(err).To(BeNil())
8283
})
8384

pkg/cache/internal/deleg_map.go

-126
This file was deleted.

0 commit comments

Comments
 (0)