From 880e026a07ce18372a462ba45e386d147cae0120 Mon Sep 17 00:00:00 2001 From: xuzhenglun Date: Mon, 9 Sep 2024 17:54:35 +0800 Subject: [PATCH] API emulation versioning honors cohabitating resources --- .../storage/resource_encoding_config.go | 19 +++++++++++++++---- .../pkg/server/storage/storage_factory.go | 2 +- 2 files changed, 16 insertions(+), 5 deletions(-) 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 d73c8e62c61..f53fdb832c4 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 @@ -130,13 +130,24 @@ func emulatedStorageVersion(binaryVersionOfResource schema.GroupVersion, example gvks, _, err := scheme.ObjectKinds(example) if err != nil { return schema.GroupVersion{}, err - } else if len(gvks) == 0 { - // Probably shouldn't happen if err is non-nil + } + + var gvk schema.GroupVersionKind + for _, item := range gvks { + if item.Group != binaryVersionOfResource.Group { + continue + } + + gvk = item + break + } + + if len(gvk.Kind) == 0 { return schema.GroupVersion{}, fmt.Errorf("object %T has no GVKs registered in scheme", example) } // VersionsForGroupKind returns versions in priority order - versions := scheme.VersionsForGroupKind(schema.GroupKind{Group: gvks[0].Group, Kind: gvks[0].Kind}) + versions := scheme.VersionsForGroupKind(schema.GroupKind{Group: gvk.Group, Kind: gvk.Kind}) compatibilityVersion := effectiveVersion.MinCompatibilityVersion() @@ -148,7 +159,7 @@ func emulatedStorageVersion(binaryVersionOfResource schema.GroupVersion, example gvk := schema.GroupVersionKind{ Group: gv.Group, Version: gv.Version, - Kind: gvks[0].Kind, + Kind: gvk.Kind, } exampleOfGVK, err := scheme.New(gvk) diff --git a/staging/src/k8s.io/apiserver/pkg/server/storage/storage_factory.go b/staging/src/k8s.io/apiserver/pkg/server/storage/storage_factory.go index ad01c5a5d89..f4ccc62f65c 100644 --- a/staging/src/k8s.io/apiserver/pkg/server/storage/storage_factory.go +++ b/staging/src/k8s.io/apiserver/pkg/server/storage/storage_factory.go @@ -245,7 +245,7 @@ func (s *DefaultStorageFactory) NewConfig(groupResource schema.GroupResource, ex var err error if backwardCompatibleInterface, ok := s.ResourceEncodingConfig.(CompatibilityResourceEncodingConfig); ok { - codecConfig.StorageVersion, err = backwardCompatibleInterface.BackwardCompatibileStorageEncodingFor(groupResource, example) + codecConfig.StorageVersion, err = backwardCompatibleInterface.BackwardCompatibileStorageEncodingFor(chosenStorageResource, example) if err != nil { return nil, err }