From ccabc01093a1344ebb27c32c946e9da3b8e91fd2 Mon Sep 17 00:00:00 2001 From: Lukasz Szaszkiewicz Date: Fri, 28 Jul 2023 09:53:01 +0200 Subject: [PATCH] storage/factory: extend the Create method by newList and resourcePrefix params --- pkg/controlplane/reconcilers/lease.go | 4 ++- pkg/controlplane/reconcilers/lease_test.go | 9 ++++--- pkg/registry/core/pod/rest/log_test.go | 2 +- .../core/service/allocator/storage/storage.go | 4 ++- .../ipallocator/storage/storage_test.go | 2 +- .../portallocator/storage/storage_test.go | 2 +- .../pkg/reconcilers/peer_endpoint_lease.go | 4 ++- .../reconcilers/peer_endpoint_lease_test.go | 6 +++-- .../registry/generic/registry/dryrun_test.go | 2 +- .../generic/registry/storage_factory.go | 2 +- .../registry/generic/registry/store_test.go | 2 +- .../pkg/registry/generic/storage_decorator.go | 6 ++--- .../cacher/cacher_testing_utils_test.go | 2 ++ .../apiserver/pkg/storage/etcd3/store.go | 7 ++--- .../apiserver/pkg/storage/etcd3/store_test.go | 26 +++++++++++++------ .../storage/storagebackend/factory/etcd3.go | 4 +-- .../storage/storagebackend/factory/factory.go | 4 +-- .../storagebackend/factory/tls_test.go | 2 +- .../k8s.io/apiserver/pkg/storage/util_test.go | 2 +- 19 files changed, 58 insertions(+), 34 deletions(-) diff --git a/pkg/controlplane/reconcilers/lease.go b/pkg/controlplane/reconcilers/lease.go index ce7b478cb78..486b52445a5 100644 --- a/pkg/controlplane/reconcilers/lease.go +++ b/pkg/controlplane/reconcilers/lease.go @@ -132,7 +132,9 @@ func (s *storageLeases) Destroy() { // NewLeases creates a new etcd-based Leases implementation. func NewLeases(config *storagebackend.ConfigForResource, baseKey string, leaseTime time.Duration) (Leases, error) { - leaseStorage, destroyFn, err := storagefactory.Create(*config, nil) + // note that newFunc, newListFunc and resourcePrefix + // can be left blank unless the storage.Watch method is used + leaseStorage, destroyFn, err := storagefactory.Create(*config, nil, nil, "") if err != nil { return nil, fmt.Errorf("error creating storage factory: %v", err) } diff --git a/pkg/controlplane/reconcilers/lease_test.go b/pkg/controlplane/reconcilers/lease_test.go index cc4884d3610..1e9d3ce13ae 100644 --- a/pkg/controlplane/reconcilers/lease_test.go +++ b/pkg/controlplane/reconcilers/lease_test.go @@ -93,9 +93,10 @@ func TestLeaseEndpointReconciler(t *testing.T) { t.Cleanup(func() { server.Terminate(t) }) newFunc := func() runtime.Object { return &corev1.Endpoints{} } + newListFunc := func() runtime.Object { return &corev1.EndpointsList{} } sc.Codec = apitesting.TestStorageCodec(codecs, corev1.SchemeGroupVersion) - s, dFunc, err := factory.Create(*sc.ForResource(schema.GroupResource{Resource: "endpoints"}), newFunc) + s, dFunc, err := factory.Create(*sc.ForResource(schema.GroupResource{Resource: "endpoints"}), newFunc, newListFunc, "") if err != nil { t.Fatalf("Error creating storage: %v", err) } @@ -456,9 +457,10 @@ func TestLeaseRemoveEndpoints(t *testing.T) { t.Cleanup(func() { server.Terminate(t) }) newFunc := func() runtime.Object { return &corev1.Endpoints{} } + newListFunc := func() runtime.Object { return &corev1.EndpointsList{} } sc.Codec = apitesting.TestStorageCodec(codecs, corev1.SchemeGroupVersion) - s, dFunc, err := factory.Create(*sc.ForResource(schema.GroupResource{Resource: "pods"}), newFunc) + s, dFunc, err := factory.Create(*sc.ForResource(schema.GroupResource{Resource: "pods"}), newFunc, newListFunc, "") if err != nil { t.Fatalf("Error creating storage: %v", err) } @@ -582,9 +584,10 @@ func TestApiserverShutdown(t *testing.T) { t.Cleanup(func() { server.Terminate(t) }) newFunc := func() runtime.Object { return &corev1.Endpoints{} } + newListFunc := func() runtime.Object { return &corev1.EndpointsList{} } sc.Codec = apitesting.TestStorageCodec(codecs, corev1.SchemeGroupVersion) - s, dFunc, err := factory.Create(*sc.ForResource(schema.GroupResource{Resource: "endpoints"}), newFunc) + s, dFunc, err := factory.Create(*sc.ForResource(schema.GroupResource{Resource: "endpoints"}), newFunc, newListFunc, "") if err != nil { t.Fatalf("Error creating storage: %v", err) } diff --git a/pkg/registry/core/pod/rest/log_test.go b/pkg/registry/core/pod/rest/log_test.go index b47717b46be..9833d8693ab 100644 --- a/pkg/registry/core/pod/rest/log_test.go +++ b/pkg/registry/core/pod/rest/log_test.go @@ -30,7 +30,7 @@ import ( func TestPodLogValidates(t *testing.T) { config, server := registrytest.NewEtcdStorage(t, "") defer server.Terminate(t) - s, destroyFunc, err := generic.NewRawStorage(config, nil) + s, destroyFunc, err := generic.NewRawStorage(config, nil, nil, "") if err != nil { t.Fatalf("Unexpected error: %v", err) } diff --git a/pkg/registry/core/service/allocator/storage/storage.go b/pkg/registry/core/service/allocator/storage/storage.go index 93cc0b055bd..66599b2fa3e 100644 --- a/pkg/registry/core/service/allocator/storage/storage.go +++ b/pkg/registry/core/service/allocator/storage/storage.go @@ -63,7 +63,9 @@ var _ rangeallocation.RangeRegistry = &Etcd{} // NewEtcd returns an allocator that is backed by Etcd and can manage // persisting the snapshot state of allocation after each allocation is made. func NewEtcd(alloc allocator.Snapshottable, baseKey string, config *storagebackend.ConfigForResource) (*Etcd, error) { - storage, d, err := generic.NewRawStorage(config, nil) + // note that newFunc, newListFunc and resourcePrefix + // can be left blank unless the storage.Watch method is used + storage, d, err := generic.NewRawStorage(config, nil, nil, "") if err != nil { return nil, err } diff --git a/pkg/registry/core/service/ipallocator/storage/storage_test.go b/pkg/registry/core/service/ipallocator/storage/storage_test.go index 41208fd3e54..9d5b368288c 100644 --- a/pkg/registry/core/service/ipallocator/storage/storage_test.go +++ b/pkg/registry/core/service/ipallocator/storage/storage_test.go @@ -56,7 +56,7 @@ func newStorage(t *testing.T) (*etcd3testing.EtcdTestServer, ipallocator.Interfa if err != nil { t.Fatalf("unexpected error creating etcd: %v", err) } - s, d, err := generic.NewRawStorage(configForAllocations, nil) + s, d, err := generic.NewRawStorage(configForAllocations, nil, nil, "") if err != nil { t.Fatalf("Couldn't create storage: %v", err) } diff --git a/pkg/registry/core/service/portallocator/storage/storage_test.go b/pkg/registry/core/service/portallocator/storage/storage_test.go index 6bf30bbeee2..9f0cdcbcef0 100644 --- a/pkg/registry/core/service/portallocator/storage/storage_test.go +++ b/pkg/registry/core/service/portallocator/storage/storage_test.go @@ -61,7 +61,7 @@ func newStorage(t *testing.T) (*etcd3testing.EtcdTestServer, portallocator.Inter if err != nil { t.Fatalf("unexpected error creating etcd: %v", err) } - s, d, err := generic.NewRawStorage(configForAllocations, nil) + s, d, err := generic.NewRawStorage(configForAllocations, nil, nil, "") if err != nil { t.Fatalf("Couldn't create storage: %v", err) } diff --git a/staging/src/k8s.io/apiserver/pkg/reconcilers/peer_endpoint_lease.go b/staging/src/k8s.io/apiserver/pkg/reconcilers/peer_endpoint_lease.go index 4da16d4f142..5eb71b28d8d 100644 --- a/staging/src/k8s.io/apiserver/pkg/reconcilers/peer_endpoint_lease.go +++ b/staging/src/k8s.io/apiserver/pkg/reconcilers/peer_endpoint_lease.go @@ -78,7 +78,9 @@ type peerEndpointLeaseReconciler struct { // NewPeerEndpointLeaseReconciler creates a new peer endpoint lease reconciler func NewPeerEndpointLeaseReconciler(config *storagebackend.ConfigForResource, baseKey string, leaseTime time.Duration) (PeerEndpointLeaseReconciler, error) { - leaseStorage, destroyFn, err := storagefactory.Create(*config, nil) + // note that newFunc, newListFunc and resourcePrefix + // can be left blank unless the storage.Watch method is used + leaseStorage, destroyFn, err := storagefactory.Create(*config, nil, nil, "") if err != nil { return nil, fmt.Errorf("error creating storage factory: %v", err) } diff --git a/staging/src/k8s.io/apiserver/pkg/reconcilers/peer_endpoint_lease_test.go b/staging/src/k8s.io/apiserver/pkg/reconcilers/peer_endpoint_lease_test.go index 07e5f1e9c1e..8726ef8a53f 100644 --- a/staging/src/k8s.io/apiserver/pkg/reconcilers/peer_endpoint_lease_test.go +++ b/staging/src/k8s.io/apiserver/pkg/reconcilers/peer_endpoint_lease_test.go @@ -89,9 +89,10 @@ func TestPeerEndpointLeaseReconciler(t *testing.T) { t.Cleanup(func() { server.Terminate(t) }) newFunc := func() runtime.Object { return &corev1.Endpoints{} } + newListFunc := func() runtime.Object { return &corev1.EndpointsList{} } sc.Codec = apitesting.TestStorageCodec(codecs, corev1.SchemeGroupVersion) - s, dFunc, err := factory.Create(*sc.ForResource(schema.GroupResource{Resource: "endpoints"}), newFunc) + s, dFunc, err := factory.Create(*sc.ForResource(schema.GroupResource{Resource: "endpoints"}), newFunc, newListFunc, "") if err != nil { t.Fatalf("Error creating storage: %v", err) } @@ -195,9 +196,10 @@ func TestPeerLeaseRemoveEndpoints(t *testing.T) { t.Cleanup(func() { server.Terminate(t) }) newFunc := func() runtime.Object { return &corev1.Endpoints{} } + newListFunc := func() runtime.Object { return &corev1.EndpointsList{} } sc.Codec = apitesting.TestStorageCodec(codecs, corev1.SchemeGroupVersion) - s, dFunc, err := factory.Create(*sc.ForResource(schema.GroupResource{Resource: "pods"}), newFunc) + s, dFunc, err := factory.Create(*sc.ForResource(schema.GroupResource{Resource: "pods"}), newFunc, newListFunc, "") if err != nil { t.Fatalf("Error creating storage: %v", err) } diff --git a/staging/src/k8s.io/apiserver/pkg/registry/generic/registry/dryrun_test.go b/staging/src/k8s.io/apiserver/pkg/registry/generic/registry/dryrun_test.go index 93bb34aae39..941c1118d90 100644 --- a/staging/src/k8s.io/apiserver/pkg/registry/generic/registry/dryrun_test.go +++ b/staging/src/k8s.io/apiserver/pkg/registry/generic/registry/dryrun_test.go @@ -39,7 +39,7 @@ import ( func NewDryRunnableTestStorage(t *testing.T) (DryRunnableStorage, func()) { server, sc := etcd3testing.NewUnsecuredEtcd3TestClientServer(t) sc.Codec = apitesting.TestStorageCodec(codecs, examplev1.SchemeGroupVersion) - s, destroy, err := factory.Create(*sc.ForResource(schema.GroupResource{Resource: "pods"}), nil) + s, destroy, err := factory.Create(*sc.ForResource(schema.GroupResource{Resource: "pods"}), nil, nil, "") if err != nil { t.Fatalf("Error creating storage: %v", err) } diff --git a/staging/src/k8s.io/apiserver/pkg/registry/generic/registry/storage_factory.go b/staging/src/k8s.io/apiserver/pkg/registry/generic/registry/storage_factory.go index 3983c92d013..3c974f3981e 100644 --- a/staging/src/k8s.io/apiserver/pkg/registry/generic/registry/storage_factory.go +++ b/staging/src/k8s.io/apiserver/pkg/registry/generic/registry/storage_factory.go @@ -44,7 +44,7 @@ func StorageWithCacher() generic.StorageDecorator { triggerFuncs storage.IndexerFuncs, indexers *cache.Indexers) (storage.Interface, factory.DestroyFunc, error) { - s, d, err := generic.NewRawStorage(storageConfig, newFunc) + s, d, err := generic.NewRawStorage(storageConfig, newFunc, newListFunc, resourcePrefix) if err != nil { return s, d, err } diff --git a/staging/src/k8s.io/apiserver/pkg/registry/generic/registry/store_test.go b/staging/src/k8s.io/apiserver/pkg/registry/generic/registry/store_test.go index c05940a6f2d..3b0d194e61b 100644 --- a/staging/src/k8s.io/apiserver/pkg/registry/generic/registry/store_test.go +++ b/staging/src/k8s.io/apiserver/pkg/registry/generic/registry/store_test.go @@ -2325,7 +2325,7 @@ func newTestGenericStoreRegistry(t *testing.T, scheme *runtime.Scheme, hasCacheE newListFunc := func() runtime.Object { return &example.PodList{} } sc.Codec = apitesting.TestStorageCodec(codecs, examplev1.SchemeGroupVersion) - s, dFunc, err := factory.Create(*sc.ForResource(schema.GroupResource{Resource: "pods"}), newFunc) + s, dFunc, err := factory.Create(*sc.ForResource(schema.GroupResource{Resource: "pods"}), newFunc, newListFunc, "/pods") if err != nil { t.Fatalf("Error creating storage: %v", err) } diff --git a/staging/src/k8s.io/apiserver/pkg/registry/generic/storage_decorator.go b/staging/src/k8s.io/apiserver/pkg/registry/generic/storage_decorator.go index 715aa104773..4c2b2fc0ed5 100644 --- a/staging/src/k8s.io/apiserver/pkg/registry/generic/storage_decorator.go +++ b/staging/src/k8s.io/apiserver/pkg/registry/generic/storage_decorator.go @@ -47,12 +47,12 @@ func UndecoratedStorage( getAttrsFunc storage.AttrFunc, trigger storage.IndexerFuncs, indexers *cache.Indexers) (storage.Interface, factory.DestroyFunc, error) { - return NewRawStorage(config, newFunc) + return NewRawStorage(config, newFunc, newListFunc, resourcePrefix) } // NewRawStorage creates the low level kv storage. This is a work-around for current // two layer of same storage interface. // TODO: Once cacher is enabled on all registries (event registry is special), we will remove this method. -func NewRawStorage(config *storagebackend.ConfigForResource, newFunc func() runtime.Object) (storage.Interface, factory.DestroyFunc, error) { - return factory.Create(*config, newFunc) +func NewRawStorage(config *storagebackend.ConfigForResource, newFunc, newListFunc func() runtime.Object, resourcePrefix string) (storage.Interface, factory.DestroyFunc, error) { + return factory.Create(*config, newFunc, newListFunc, resourcePrefix) } diff --git a/staging/src/k8s.io/apiserver/pkg/storage/cacher/cacher_testing_utils_test.go b/staging/src/k8s.io/apiserver/pkg/storage/cacher/cacher_testing_utils_test.go index f738cdbdea0..3eb757c42a6 100644 --- a/staging/src/k8s.io/apiserver/pkg/storage/cacher/cacher_testing_utils_test.go +++ b/staging/src/k8s.io/apiserver/pkg/storage/cacher/cacher_testing_utils_test.go @@ -61,7 +61,9 @@ func newEtcdTestStorage(t *testing.T, prefix string, pagingEnabled bool) (*etcd3 server.V3Client, apitesting.TestCodec(codecs, examplev1.SchemeGroupVersion), newPod, + newPodList, prefix, + "/pods", schema.GroupResource{Resource: "pods"}, identity.NewEncryptCheckTransformer(), pagingEnabled, diff --git a/staging/src/k8s.io/apiserver/pkg/storage/etcd3/store.go b/staging/src/k8s.io/apiserver/pkg/storage/etcd3/store.go index e110fc88bbc..00f1b385097 100644 --- a/staging/src/k8s.io/apiserver/pkg/storage/etcd3/store.go +++ b/staging/src/k8s.io/apiserver/pkg/storage/etcd3/store.go @@ -99,11 +99,11 @@ type objState struct { } // New returns an etcd3 implementation of storage.Interface. -func New(c *clientv3.Client, codec runtime.Codec, newFunc func() runtime.Object, prefix string, groupResource schema.GroupResource, transformer value.Transformer, pagingEnabled bool, leaseManagerConfig LeaseManagerConfig) storage.Interface { - return newStore(c, codec, newFunc, prefix, groupResource, transformer, pagingEnabled, leaseManagerConfig) +func New(c *clientv3.Client, codec runtime.Codec, newFunc, newListFunc func() runtime.Object, prefix, resourcePrefix string, groupResource schema.GroupResource, transformer value.Transformer, pagingEnabled bool, leaseManagerConfig LeaseManagerConfig) storage.Interface { + return newStore(c, codec, newFunc, newListFunc, prefix, resourcePrefix, groupResource, transformer, pagingEnabled, leaseManagerConfig) } -func newStore(c *clientv3.Client, codec runtime.Codec, newFunc func() runtime.Object, prefix string, groupResource schema.GroupResource, transformer value.Transformer, pagingEnabled bool, leaseManagerConfig LeaseManagerConfig) *store { +func newStore(c *clientv3.Client, codec runtime.Codec, newFunc, newListFunc func() runtime.Object, prefix, resourcePrefix string, groupResource schema.GroupResource, transformer value.Transformer, pagingEnabled bool, leaseManagerConfig LeaseManagerConfig) *store { versioner := storage.APIObjectVersioner{} // for compatibility with etcd2 impl. // no-op for default prefix of '/registry'. @@ -114,6 +114,7 @@ func newStore(c *clientv3.Client, codec runtime.Codec, newFunc func() runtime.Ob pathPrefix += "/" } + // TODO(p0lyn0mial): pass newListFunc and resourcePrefix to the watcher w := &watcher{ client: c, codec: codec, diff --git a/staging/src/k8s.io/apiserver/pkg/storage/etcd3/store_test.go b/staging/src/k8s.io/apiserver/pkg/storage/etcd3/store_test.go index e5f55f4e599..fb7b8025cce 100644 --- a/staging/src/k8s.io/apiserver/pkg/storage/etcd3/store_test.go +++ b/staging/src/k8s.io/apiserver/pkg/storage/etcd3/store_test.go @@ -64,6 +64,10 @@ func newPod() runtime.Object { return &example.Pod{} } +func newPodList() runtime.Object { + return &example.PodList{} +} + func checkStorageInvariants(etcdClient *clientv3.Client, codec runtime.Codec) storagetesting.KeyValidation { return func(ctx context.Context, t *testing.T, key string) { getResp, err := etcdClient.KV.Get(ctx, key) @@ -468,14 +472,16 @@ func (r *clientRecorder) GetReadsAndReset() uint64 { } type setupOptions struct { - client func(testing.TB) *clientv3.Client - codec runtime.Codec - newFunc func() runtime.Object - prefix string - groupResource schema.GroupResource - transformer value.Transformer - pagingEnabled bool - leaseConfig LeaseManagerConfig + client func(testing.TB) *clientv3.Client + codec runtime.Codec + newFunc func() runtime.Object + newListFunc func() runtime.Object + prefix string + resourcePrefix string + groupResource schema.GroupResource + transformer value.Transformer + pagingEnabled bool + leaseConfig LeaseManagerConfig recorderEnabled bool } @@ -520,7 +526,9 @@ func withDefaults(options *setupOptions) { } options.codec = apitesting.TestCodec(codecs, examplev1.SchemeGroupVersion) options.newFunc = newPod + options.newListFunc = newPodList options.prefix = "" + options.resourcePrefix = "/pods" options.groupResource = schema.GroupResource{Resource: "pods"} options.transformer = newTestTransformer() options.pagingEnabled = true @@ -543,7 +551,9 @@ func testSetup(t testing.TB, opts ...setupOption) (context.Context, *store, *cli client, setupOpts.codec, setupOpts.newFunc, + setupOpts.newListFunc, setupOpts.prefix, + setupOpts.resourcePrefix, setupOpts.groupResource, setupOpts.transformer, setupOpts.pagingEnabled, diff --git a/staging/src/k8s.io/apiserver/pkg/storage/storagebackend/factory/etcd3.go b/staging/src/k8s.io/apiserver/pkg/storage/storagebackend/factory/etcd3.go index 94cb3710bed..f52bba84cc3 100644 --- a/staging/src/k8s.io/apiserver/pkg/storage/storagebackend/factory/etcd3.go +++ b/staging/src/k8s.io/apiserver/pkg/storage/storagebackend/factory/etcd3.go @@ -419,7 +419,7 @@ func startCompactorOnce(c storagebackend.TransportConfig, interval time.Duration }, nil } -func newETCD3Storage(c storagebackend.ConfigForResource, newFunc func() runtime.Object) (storage.Interface, DestroyFunc, error) { +func newETCD3Storage(c storagebackend.ConfigForResource, newFunc, newListFunc func() runtime.Object, resourcePrefix string) (storage.Interface, DestroyFunc, error) { stopCompactor, err := startCompactorOnce(c.Transport, c.CompactionInterval) if err != nil { return nil, nil, err @@ -454,7 +454,7 @@ func newETCD3Storage(c storagebackend.ConfigForResource, newFunc func() runtime. if transformer == nil { transformer = identity.NewEncryptCheckTransformer() } - return etcd3.New(client, c.Codec, newFunc, c.Prefix, c.GroupResource, transformer, c.Paging, c.LeaseManagerConfig), destroyFunc, nil + return etcd3.New(client, c.Codec, newFunc, newListFunc, c.Prefix, resourcePrefix, c.GroupResource, transformer, c.Paging, c.LeaseManagerConfig), destroyFunc, nil } // startDBSizeMonitorPerEndpoint starts a loop to monitor etcd database size and update the diff --git a/staging/src/k8s.io/apiserver/pkg/storage/storagebackend/factory/factory.go b/staging/src/k8s.io/apiserver/pkg/storage/storagebackend/factory/factory.go index 1a60c92902c..2bf3727e8a7 100644 --- a/staging/src/k8s.io/apiserver/pkg/storage/storagebackend/factory/factory.go +++ b/staging/src/k8s.io/apiserver/pkg/storage/storagebackend/factory/factory.go @@ -30,12 +30,12 @@ import ( type DestroyFunc func() // Create creates a storage backend based on given config. -func Create(c storagebackend.ConfigForResource, newFunc func() runtime.Object) (storage.Interface, DestroyFunc, error) { +func Create(c storagebackend.ConfigForResource, newFunc, newListFunc func() runtime.Object, resourcePrefix string) (storage.Interface, DestroyFunc, error) { switch c.Type { case storagebackend.StorageTypeETCD2: return nil, nil, fmt.Errorf("%s is no longer a supported storage backend", c.Type) case storagebackend.StorageTypeUnset, storagebackend.StorageTypeETCD3: - return newETCD3Storage(c, newFunc) + return newETCD3Storage(c, newFunc, newListFunc, resourcePrefix) default: return nil, nil, fmt.Errorf("unknown storage type: %s", c.Type) } diff --git a/staging/src/k8s.io/apiserver/pkg/storage/storagebackend/factory/tls_test.go b/staging/src/k8s.io/apiserver/pkg/storage/storagebackend/factory/tls_test.go index eafcc411982..c35a7cb37ce 100644 --- a/staging/src/k8s.io/apiserver/pkg/storage/storagebackend/factory/tls_test.go +++ b/staging/src/k8s.io/apiserver/pkg/storage/storagebackend/factory/tls_test.go @@ -81,7 +81,7 @@ func TestTLSConnection(t *testing.T) { }, Codec: codec, } - storage, destroyFunc, err := newETCD3Storage(*cfg.ForResource(schema.GroupResource{Resource: "pods"}), nil) + storage, destroyFunc, err := newETCD3Storage(*cfg.ForResource(schema.GroupResource{Resource: "pods"}), nil, nil, "") defer destroyFunc() if err != nil { t.Fatal(err) diff --git a/staging/src/k8s.io/apiserver/pkg/storage/util_test.go b/staging/src/k8s.io/apiserver/pkg/storage/util_test.go index a8eb2fe3384..2a1b737b816 100644 --- a/staging/src/k8s.io/apiserver/pkg/storage/util_test.go +++ b/staging/src/k8s.io/apiserver/pkg/storage/util_test.go @@ -85,7 +85,7 @@ func TestGetCurrentResourceVersionFromStorage(t *testing.T) { // test data newEtcdTestStorage := func(t *testing.T, prefix string) (*etcd3testing.EtcdTestServer, storage.Interface) { server, _ := etcd3testing.NewUnsecuredEtcd3TestClientServer(t) - storage := etcd3.New(server.V3Client, apitesting.TestCodec(codecs, examplev1.SchemeGroupVersion, example2v1.SchemeGroupVersion), func() runtime.Object { return &example.Pod{} }, prefix, schema.GroupResource{Resource: "pods"}, identity.NewEncryptCheckTransformer(), true, etcd3.NewDefaultLeaseManagerConfig()) + storage := etcd3.New(server.V3Client, apitesting.TestCodec(codecs, examplev1.SchemeGroupVersion, example2v1.SchemeGroupVersion), func() runtime.Object { return &example.Pod{} }, func() runtime.Object { return &example.PodList{} }, prefix, "/pods", schema.GroupResource{Resource: "pods"}, identity.NewEncryptCheckTransformer(), true, etcd3.NewDefaultLeaseManagerConfig()) return server, storage } server, etcdStorage := newEtcdTestStorage(t, "")