From 37bb0679aa58e380e085ec413e68b68e146a1f42 Mon Sep 17 00:00:00 2001 From: Steve Kuznetsov Date: Thu, 19 May 2022 08:25:00 -0700 Subject: [PATCH] customresouce: clean up the storage constructor The distinction between Storage and REST was lost when the constructor for the latter began to do almost but not all of the former. No other callers exist for newREST(), so merging the constructors allows us to be more clear with what we're constructing and keeps us from shallow-copying the genericregistry.Store every time even when no status subresource is requested. Signed-off-by: Steve Kuznetsov --- .../pkg/registry/customresource/etcd.go | 75 ++++++++----------- 1 file changed, 33 insertions(+), 42 deletions(-) diff --git a/staging/src/k8s.io/apiextensions-apiserver/pkg/registry/customresource/etcd.go b/staging/src/k8s.io/apiextensions-apiserver/pkg/registry/customresource/etcd.go index bfbc8b8b14f..1c16ddd4300 100644 --- a/staging/src/k8s.io/apiextensions-apiserver/pkg/registry/customresource/etcd.go +++ b/staging/src/k8s.io/apiextensions-apiserver/pkg/registry/customresource/etcd.go @@ -43,43 +43,7 @@ type CustomResourceStorage struct { } func NewStorage(resource schema.GroupResource, kind, listKind schema.GroupVersionKind, strategy customResourceStrategy, optsGetter generic.RESTOptionsGetter, categories []string, tableConvertor rest.TableConvertor, replicasPathMapping fieldmanager.ResourcePathMappings) CustomResourceStorage { - customResourceREST, customResourceStatusREST := newREST(resource, kind, listKind, strategy, optsGetter, categories, tableConvertor) - - s := CustomResourceStorage{ - CustomResource: customResourceREST, - } - - if strategy.status != nil { - s.Status = customResourceStatusREST - } - - if scale := strategy.scale; scale != nil { - var labelSelectorPath string - if scale.LabelSelectorPath != nil { - labelSelectorPath = *scale.LabelSelectorPath - } - - s.Scale = &ScaleREST{ - store: customResourceREST.Store, - specReplicasPath: scale.SpecReplicasPath, - statusReplicasPath: scale.StatusReplicasPath, - labelSelectorPath: labelSelectorPath, - parentGV: kind.GroupVersion(), - replicasPathMapping: replicasPathMapping, - } - } - - return s -} - -// REST implements a RESTStorage for API services against etcd -type REST struct { - *genericregistry.Store - categories []string -} - -// newREST returns a RESTStorage object that will work against API services. -func newREST(resource schema.GroupResource, kind, listKind schema.GroupVersionKind, strategy customResourceStrategy, optsGetter generic.RESTOptionsGetter, categories []string, tableConvertor rest.TableConvertor) (*REST, *StatusREST) { + var storage CustomResourceStorage store := &genericregistry.Store{ NewFunc: func() runtime.Object { // set the expected group/version/kind in the new object as a signal to the versioning decoder @@ -107,12 +71,39 @@ func newREST(resource schema.GroupResource, kind, listKind schema.GroupVersionKi if err := store.CompleteWithOptions(options); err != nil { panic(err) // TODO: Propagate error up } + storage.CustomResource = &REST{store, categories} - statusStore := *store - statusStrategy := NewStatusStrategy(strategy) - statusStore.UpdateStrategy = statusStrategy - statusStore.ResetFieldsStrategy = statusStrategy - return &REST{store, categories}, &StatusREST{store: &statusStore} + if strategy.status != nil { + statusStore := *store + statusStrategy := NewStatusStrategy(strategy) + statusStore.UpdateStrategy = statusStrategy + statusStore.ResetFieldsStrategy = statusStrategy + storage.Status = &StatusREST{store: &statusStore} + } + + if scale := strategy.scale; scale != nil { + var labelSelectorPath string + if scale.LabelSelectorPath != nil { + labelSelectorPath = *scale.LabelSelectorPath + } + + storage.Scale = &ScaleREST{ + store: store, + specReplicasPath: scale.SpecReplicasPath, + statusReplicasPath: scale.StatusReplicasPath, + labelSelectorPath: labelSelectorPath, + parentGV: kind.GroupVersion(), + replicasPathMapping: replicasPathMapping, + } + } + + return storage +} + +// REST implements a RESTStorage for API services against etcd +type REST struct { + *genericregistry.Store + categories []string } // Implement CategoriesProvider