diff --git a/staging/src/k8s.io/apiserver/pkg/server/storage/resource_encoding_config.go b/staging/src/k8s.io/apiserver/pkg/server/storage/resource_encoding_config.go index cdfdac65e8..efb22fbc8d 100644 --- a/staging/src/k8s.io/apiserver/pkg/server/storage/resource_encoding_config.go +++ b/staging/src/k8s.io/apiserver/pkg/server/storage/resource_encoding_config.go @@ -34,37 +34,27 @@ type ResourceEncodingConfig interface { } type DefaultResourceEncodingConfig struct { - groups map[string]*GroupResourceEncodingConfig - scheme *runtime.Scheme + // resources records the overriding encoding configs for individual resources. + resources map[schema.GroupResource]*OverridingResourceEncoding + scheme *runtime.Scheme } -type GroupResourceEncodingConfig struct { - ExternalResourceEncodings map[string]schema.GroupVersion - InternalResourceEncodings map[string]schema.GroupVersion +type OverridingResourceEncoding struct { + ExternalResourceEncoding schema.GroupVersion + InternalResourceEncoding schema.GroupVersion } var _ ResourceEncodingConfig = &DefaultResourceEncodingConfig{} func NewDefaultResourceEncodingConfig(scheme *runtime.Scheme) *DefaultResourceEncodingConfig { - return &DefaultResourceEncodingConfig{groups: map[string]*GroupResourceEncodingConfig{}, scheme: scheme} -} - -func newGroupResourceEncodingConfig() *GroupResourceEncodingConfig { - return &GroupResourceEncodingConfig{ - ExternalResourceEncodings: map[string]schema.GroupVersion{}, - InternalResourceEncodings: map[string]schema.GroupVersion{}, - } + return &DefaultResourceEncodingConfig{resources: map[schema.GroupResource]*OverridingResourceEncoding{}, scheme: scheme} } func (o *DefaultResourceEncodingConfig) SetResourceEncoding(resourceBeingStored schema.GroupResource, externalEncodingVersion, internalVersion schema.GroupVersion) { - group := resourceBeingStored.Group - _, groupExists := o.groups[group] - if !groupExists { - o.groups[group] = newGroupResourceEncodingConfig() + o.resources[resourceBeingStored] = &OverridingResourceEncoding{ + ExternalResourceEncoding: externalEncodingVersion, + InternalResourceEncoding: internalVersion, } - - o.groups[group].ExternalResourceEncodings[resourceBeingStored.Resource] = externalEncodingVersion - o.groups[group].InternalResourceEncodings[resourceBeingStored.Resource] = internalVersion } func (o *DefaultResourceEncodingConfig) StorageEncodingFor(resource schema.GroupResource) (schema.GroupVersion, error) { @@ -72,20 +62,13 @@ func (o *DefaultResourceEncodingConfig) StorageEncodingFor(resource schema.Group return schema.GroupVersion{}, fmt.Errorf("group %q is not registered in scheme", resource.Group) } - groupEncoding, groupExists := o.groups[resource.Group] - - if !groupExists { - // return the most preferred external version for the group - return o.scheme.PrioritizedVersionsForGroup(resource.Group)[0], nil + resourceOverride, resourceExists := o.resources[resource] + if resourceExists { + return resourceOverride.ExternalResourceEncoding, nil } - resourceOverride, resourceExists := groupEncoding.ExternalResourceEncodings[resource.Resource] - if !resourceExists { - // return the most preferred external version for the group - return o.scheme.PrioritizedVersionsForGroup(resource.Group)[0], nil - } - - return resourceOverride, nil + // return the most preferred external version for the group + return o.scheme.PrioritizedVersionsForGroup(resource.Group)[0], nil } func (o *DefaultResourceEncodingConfig) InMemoryEncodingFor(resource schema.GroupResource) (schema.GroupVersion, error) { @@ -93,15 +76,9 @@ func (o *DefaultResourceEncodingConfig) InMemoryEncodingFor(resource schema.Grou return schema.GroupVersion{}, fmt.Errorf("group %q is not registered in scheme", resource.Group) } - groupEncoding, groupExists := o.groups[resource.Group] - if !groupExists { - return schema.GroupVersion{Group: resource.Group, Version: runtime.APIVersionInternal}, nil + resourceOverride, resourceExists := o.resources[resource] + if resourceExists { + return resourceOverride.InternalResourceEncoding, nil } - - resourceOverride, resourceExists := groupEncoding.InternalResourceEncodings[resource.Resource] - if !resourceExists { - return schema.GroupVersion{Group: resource.Group, Version: runtime.APIVersionInternal}, nil - } - - return resourceOverride, nil + return schema.GroupVersion{Group: resource.Group, Version: runtime.APIVersionInternal}, nil }