From acb4c00b3982ea2d2ef101852b2b4b83cf25370a Mon Sep 17 00:00:00 2001 From: Clayton Coleman Date: Mon, 12 Sep 2016 19:14:04 -0400 Subject: [PATCH 1/2] EnableGarbageCollection should be a struct member on RESTOptions Not a global. Now that we have RESTOptions this was an easy change. --- cmd/kube-apiserver/app/options/options.go | 5 ----- pkg/genericapiserver/config.go | 16 +++++++++------- .../options/server_run_options.go | 6 ++++++ pkg/master/master.go | 1 + pkg/registry/generic/options.go | 9 +++++---- pkg/registry/generic/registry/store.go | 12 ++++++------ pkg/registry/generic/registry/store_test.go | 9 +++------ .../garbagecollector/garbage_collector_test.go | 14 +------------- 8 files changed, 31 insertions(+), 41 deletions(-) diff --git a/cmd/kube-apiserver/app/options/options.go b/cmd/kube-apiserver/app/options/options.go index dc051ffeaa7..41dead7354d 100644 --- a/cmd/kube-apiserver/app/options/options.go +++ b/cmd/kube-apiserver/app/options/options.go @@ -24,7 +24,6 @@ import ( genericoptions "k8s.io/kubernetes/pkg/genericapiserver/options" kubeletclient "k8s.io/kubernetes/pkg/kubelet/client" "k8s.io/kubernetes/pkg/master/ports" - "k8s.io/kubernetes/pkg/registry/generic/registry" "github.com/spf13/pflag" ) @@ -123,8 +122,4 @@ func (s *APIServer) AddFlags(fs *pflag.FlagSet) { "If true, server will do its best to fix the update request to pass the validation, "+ "e.g., setting empty UID in update request to its existing value. This flag can be turned off "+ "after we fix all the clients that send malformed updates.") - - fs.BoolVar(®istry.EnableGarbageCollector, "enable-garbage-collector", true, ""+ - "Enables the generic garbage collector. MUST be synced with the corresponding flag "+ - "of the kube-controller-manager.") } diff --git a/pkg/genericapiserver/config.go b/pkg/genericapiserver/config.go index b367bd0c4a5..79053c4911c 100644 --- a/pkg/genericapiserver/config.go +++ b/pkg/genericapiserver/config.go @@ -72,13 +72,14 @@ type Config struct { // Allows api group versions or specific resources to be conditionally enabled/disabled. APIResourceConfigSource APIResourceConfigSource // allow downstream consumers to disable the index route - EnableIndex bool - EnableProfiling bool - EnableWatchCache bool - APIPrefix string - APIGroupPrefix string - CorsAllowedOriginList []string - Authenticator authenticator.Request + EnableIndex bool + EnableProfiling bool + EnableWatchCache bool + EnableGarbageCollection bool + APIPrefix string + APIGroupPrefix string + CorsAllowedOriginList []string + Authenticator authenticator.Request // TODO(roberthbailey): Remove once the server no longer supports http basic auth. SupportsBasicAuth bool Authorizer authorizer.Authorizer @@ -169,6 +170,7 @@ func NewConfig(options *options.ServerRunOptions) *Config { AuditLogMaxAge: options.AuditLogMaxAge, AuditLogMaxBackups: options.AuditLogMaxBackups, AuditLogMaxSize: options.AuditLogMaxSize, + EnableGarbageCollection: options.EnableGarbageCollection, EnableIndex: true, EnableLogsSupport: options.EnableLogsSupport, EnableProfiling: options.EnableProfiling, diff --git a/pkg/genericapiserver/options/server_run_options.go b/pkg/genericapiserver/options/server_run_options.go index 0456ed1b1d0..a0aaa79cf6b 100644 --- a/pkg/genericapiserver/options/server_run_options.go +++ b/pkg/genericapiserver/options/server_run_options.go @@ -83,6 +83,7 @@ type ServerRunOptions struct { AuditLogMaxAge int AuditLogMaxBackups int AuditLogMaxSize int + EnableGarbageCollection bool EnableLogsSupport bool EnableProfiling bool EnableSwaggerUI bool @@ -133,6 +134,7 @@ func NewServerRunOptions() *ServerRunOptions { DefaultStorageMediaType: "application/json", DefaultStorageVersions: registered.AllPreferredGroupVersions(), DeleteCollectionWorkers: 1, + EnableGarbageCollection: true, EnableLogsSupport: true, EnableProfiling: true, EnableWatchCache: true, @@ -306,6 +308,10 @@ func (s *ServerRunOptions) AddUniversalFlags(fs *pflag.FlagSet) { fs.IntVar(&s.AuditLogMaxSize, "audit-log-maxsize", s.AuditLogMaxSize, "The maximum size in megabytes of the audit log file before it gets rotated. Defaults to 100MB.") + fs.BoolVar(&s.EnableGarbageCollection, "enable-garbage-collector", s.EnableGarbageCollection, ""+ + "Enables the generic garbage collector. MUST be synced with the corresponding flag "+ + "of the kube-controller-manager.") + fs.BoolVar(&s.EnableProfiling, "profiling", s.EnableProfiling, "Enable profiling via web interface host:port/debug/pprof/") diff --git a/pkg/master/master.go b/pkg/master/master.go index 1475a732e8c..32504e0a177 100644 --- a/pkg/master/master.go +++ b/pkg/master/master.go @@ -781,6 +781,7 @@ func (m *Master) GetRESTOptionsOrDie(c *Config, resource unversioned.GroupResour StorageConfig: storageConfig, Decorator: m.StorageDecorator(), DeleteCollectionWorkers: m.deleteCollectionWorkers, + EnableGarbageCollection: c.Config.EnableGarbageCollection, ResourcePrefix: c.StorageFactory.ResourcePrefix(resource), } } diff --git a/pkg/registry/generic/options.go b/pkg/registry/generic/options.go index 74e95e71fb4..b856ca4f2e5 100644 --- a/pkg/registry/generic/options.go +++ b/pkg/registry/generic/options.go @@ -20,9 +20,10 @@ import "k8s.io/kubernetes/pkg/storage/storagebackend" // RESTOptions is set of configuration options to generic registries. type RESTOptions struct { - StorageConfig *storagebackend.Config - Decorator StorageDecorator - DeleteCollectionWorkers int + StorageConfig *storagebackend.Config + Decorator StorageDecorator - ResourcePrefix string + EnableGarbageCollection bool + DeleteCollectionWorkers int + ResourcePrefix string } diff --git a/pkg/registry/generic/registry/store.go b/pkg/registry/generic/registry/store.go index fd49e3ee116..e48f87efe3a 100644 --- a/pkg/registry/generic/registry/store.go +++ b/pkg/registry/generic/registry/store.go @@ -42,10 +42,6 @@ import ( "github.com/golang/glog" ) -// EnableGarbageCollector affects the handling of Update and Delete requests. It -// must be synced with the corresponding flag in kube-controller-manager. -var EnableGarbageCollector bool - // Store implements generic.Registry. // It's intended to be embeddable, so that you can implement any // non-generic functions if needed. @@ -93,6 +89,10 @@ type Store struct { // Called to cleanup storage clients. DestroyFunc func() + // EnableGarbageCollection affects the handling of Update and Delete requests. It + // must be synced with the corresponding flag in kube-controller-manager. + EnableGarbageCollection bool + // DeleteCollectionWorkers is the maximum number of workers in a single // DeleteCollection call. DeleteCollectionWorkers int @@ -272,7 +272,7 @@ func (e *Store) Create(ctx api.Context, obj runtime.Object) (runtime.Object, err // it further checks if the object's DeletionGracePeriodSeconds is 0. If so, it // returns true. func (e *Store) shouldDelete(ctx api.Context, key string, obj, existing runtime.Object) bool { - if !EnableGarbageCollector { + if !e.EnableGarbageCollection { return false } newMeta, err := api.ObjectMetaFor(obj) @@ -694,7 +694,7 @@ func (e *Store) Delete(ctx api.Context, name string, options *api.DeleteOptions) var ignoreNotFound bool var deleteImmediately bool = true var lastExisting, out runtime.Object - if !EnableGarbageCollector { + if !e.EnableGarbageCollection { // TODO: remove the check on graceful, because we support no-op updates now. if graceful { err, ignoreNotFound, deleteImmediately, out, lastExisting = e.updateForGracefulDeletion(ctx, name, key, options, preconditions, obj) diff --git a/pkg/registry/generic/registry/store_test.go b/pkg/registry/generic/registry/store_test.go index bdf1b6a8a31..5240ad039e7 100644 --- a/pkg/registry/generic/registry/store_test.go +++ b/pkg/registry/generic/registry/store_test.go @@ -618,9 +618,7 @@ func TestStoreDelete(t *testing.T) { } func TestGracefulStoreHandleFinalizers(t *testing.T) { - EnableGarbageCollector = true initialGeneration := int64(1) - defer func() { EnableGarbageCollector = false }() podWithFinalizer := &api.Pod{ ObjectMeta: api.ObjectMeta{Name: "foo", Finalizers: []string{"foo.com/x"}, Generation: initialGeneration}, Spec: api.PodSpec{NodeName: "machine"}, @@ -628,6 +626,7 @@ func TestGracefulStoreHandleFinalizers(t *testing.T) { testContext := api.WithNamespace(api.NewContext(), "test") destroyFunc, registry := NewTestGenericStoreRegistry(t) + registry.EnableGarbageCollection = true defaultDeleteStrategy := testRESTStrategy{api.Scheme, api.SimpleNameGenerator, true, false, true} registry.DeleteStrategy = testGracefulStrategy{defaultDeleteStrategy} defer destroyFunc() @@ -678,9 +677,7 @@ func TestGracefulStoreHandleFinalizers(t *testing.T) { } func TestNonGracefulStoreHandleFinalizers(t *testing.T) { - EnableGarbageCollector = true initialGeneration := int64(1) - defer func() { EnableGarbageCollector = false }() podWithFinalizer := &api.Pod{ ObjectMeta: api.ObjectMeta{Name: "foo", Finalizers: []string{"foo.com/x"}, Generation: initialGeneration}, Spec: api.PodSpec{NodeName: "machine"}, @@ -688,6 +685,7 @@ func TestNonGracefulStoreHandleFinalizers(t *testing.T) { testContext := api.WithNamespace(api.NewContext(), "test") destroyFunc, registry := NewTestGenericStoreRegistry(t) + registry.EnableGarbageCollection = true defer destroyFunc() // create pod _, err := registry.Create(testContext, podWithFinalizer) @@ -755,9 +753,7 @@ func TestNonGracefulStoreHandleFinalizers(t *testing.T) { } func TestStoreDeleteWithOrphanDependents(t *testing.T) { - EnableGarbageCollector = true initialGeneration := int64(1) - defer func() { EnableGarbageCollector = false }() podWithOrphanFinalizer := func(name string) *api.Pod { return &api.Pod{ ObjectMeta: api.ObjectMeta{Name: name, Finalizers: []string{"foo.com/x", api.FinalizerOrphan, "bar.com/y"}, Generation: initialGeneration}, @@ -984,6 +980,7 @@ func TestStoreDeleteWithOrphanDependents(t *testing.T) { testContext := api.WithNamespace(api.NewContext(), "test") destroyFunc, registry := NewTestGenericStoreRegistry(t) + registry.EnableGarbageCollection = true defer destroyFunc() for _, tc := range testcases { diff --git a/test/integration/garbagecollector/garbage_collector_test.go b/test/integration/garbagecollector/garbage_collector_test.go index 25a8205f90a..8691d549eae 100644 --- a/test/integration/garbagecollector/garbage_collector_test.go +++ b/test/integration/garbagecollector/garbage_collector_test.go @@ -38,7 +38,6 @@ import ( "k8s.io/kubernetes/pkg/client/typed/dynamic" "k8s.io/kubernetes/pkg/controller/garbagecollector" "k8s.io/kubernetes/pkg/controller/garbagecollector/metaonly" - "k8s.io/kubernetes/pkg/registry/generic/registry" "k8s.io/kubernetes/pkg/runtime/serializer" "k8s.io/kubernetes/pkg/types" "k8s.io/kubernetes/pkg/util/wait" @@ -121,6 +120,7 @@ func newOwnerRC(name, namespace string) *v1.ReplicationController { func setup(t *testing.T) (*httptest.Server, *garbagecollector.GarbageCollector, clientset.Interface) { masterConfig := framework.NewIntegrationTestMasterConfig() masterConfig.EnableCoreControllers = false + masterConfig.EnableGarbageCollection = true _, s := framework.RunAMaster(masterConfig) clientSet, err := clientset.NewForConfig(&restclient.Config{Host: s.URL}) @@ -153,9 +153,6 @@ func TestCascadingDeletion(t *testing.T) { ns := framework.CreateTestingNamespace("gc-cascading-deletion", s, t) defer framework.DeleteTestingNamespace(ns, s, t) - oldEnableGarbageCollector := registry.EnableGarbageCollector - registry.EnableGarbageCollector = true - defer func() { registry.EnableGarbageCollector = oldEnableGarbageCollector }() rcClient := clientSet.Core().ReplicationControllers(ns.Name) podClient := clientSet.Core().Pods(ns.Name) @@ -262,9 +259,6 @@ func TestCreateWithNonExistentOwner(t *testing.T) { ns := framework.CreateTestingNamespace("gc-non-existing-owner", s, t) defer framework.DeleteTestingNamespace(ns, s, t) - oldEnableGarbageCollector := registry.EnableGarbageCollector - registry.EnableGarbageCollector = true - defer func() { registry.EnableGarbageCollector = oldEnableGarbageCollector }() podClient := clientSet.Core().Pods(ns.Name) pod := newPod(garbageCollectedPodName, ns.Name, []v1.OwnerReference{{UID: "doesn't matter", Name: toBeDeletedRCName}}) @@ -367,9 +361,6 @@ func TestStressingCascadingDeletion(t *testing.T) { ns := framework.CreateTestingNamespace("gc-stressing-cascading-deletion", s, t) defer framework.DeleteTestingNamespace(ns, s, t) - oldEnableGarbageCollector := registry.EnableGarbageCollector - registry.EnableGarbageCollector = true - defer func() { registry.EnableGarbageCollector = oldEnableGarbageCollector }() stopCh := make(chan struct{}) go gc.Run(5, stopCh) defer close(stopCh) @@ -452,9 +443,6 @@ func TestOrphaning(t *testing.T) { ns := framework.CreateTestingNamespace("gc-orphaning", s, t) defer framework.DeleteTestingNamespace(ns, s, t) - oldEnableGarbageCollector := registry.EnableGarbageCollector - registry.EnableGarbageCollector = true - defer func() { registry.EnableGarbageCollector = oldEnableGarbageCollector }() podClient := clientSet.Core().Pods(ns.Name) rcClient := clientSet.Core().ReplicationControllers(ns.Name) // create the RC with the orphan finalizer set From 716bac3bbb3223635528297fa5f86bc005969806 Mon Sep 17 00:00:00 2001 From: Clayton Coleman Date: Mon, 12 Sep 2016 19:24:03 -0400 Subject: [PATCH 2/2] All REST that set DeleteCollectionWorkers should set EnableGC --- federation/registry/cluster/etcd/etcd.go | 1 + pkg/registry/certificates/etcd/etcd.go | 1 + pkg/registry/clusterrole/etcd/etcd.go | 1 + pkg/registry/clusterrolebinding/etcd/etcd.go | 1 + pkg/registry/configmap/etcd/etcd.go | 1 + pkg/registry/controller/etcd/etcd.go | 1 + pkg/registry/daemonset/etcd/etcd.go | 1 + pkg/registry/deployment/etcd/etcd.go | 1 + pkg/registry/endpoint/etcd/etcd.go | 1 + pkg/registry/event/etcd/etcd.go | 4 +++- pkg/registry/horizontalpodautoscaler/etcd/etcd.go | 1 + pkg/registry/ingress/etcd/etcd.go | 1 + pkg/registry/job/etcd/etcd.go | 1 + pkg/registry/limitrange/etcd/etcd.go | 1 + pkg/registry/namespace/etcd/etcd.go | 1 + pkg/registry/networkpolicy/etcd/etcd.go | 1 + pkg/registry/node/etcd/etcd.go | 1 + pkg/registry/persistentvolume/etcd/etcd.go | 1 + pkg/registry/persistentvolumeclaim/etcd/etcd.go | 1 + pkg/registry/petset/etcd/etcd.go | 1 + pkg/registry/pod/etcd/etcd.go | 1 + pkg/registry/poddisruptionbudget/etcd/etcd.go | 1 + pkg/registry/podsecuritypolicy/etcd/etcd.go | 1 + pkg/registry/podtemplate/etcd/etcd.go | 1 + pkg/registry/replicaset/etcd/etcd.go | 1 + pkg/registry/resourcequota/etcd/etcd.go | 1 + pkg/registry/role/etcd/etcd.go | 1 + pkg/registry/rolebinding/etcd/etcd.go | 1 + pkg/registry/scheduledjob/etcd/etcd.go | 1 + pkg/registry/secret/etcd/etcd.go | 1 + pkg/registry/service/etcd/etcd.go | 1 + pkg/registry/serviceaccount/etcd/etcd.go | 1 + pkg/registry/storageclass/etcd/etcd.go | 1 + pkg/registry/thirdpartyresource/etcd/etcd.go | 1 + pkg/registry/thirdpartyresourcedata/etcd/etcd.go | 1 + 35 files changed, 37 insertions(+), 1 deletion(-) diff --git a/federation/registry/cluster/etcd/etcd.go b/federation/registry/cluster/etcd/etcd.go index 2e699511d58..547f6c0468d 100644 --- a/federation/registry/cluster/etcd/etcd.go +++ b/federation/registry/cluster/etcd/etcd.go @@ -73,6 +73,7 @@ func NewREST(opts generic.RESTOptions) (*REST, *StatusREST) { }, PredicateFunc: cluster.MatchCluster, QualifiedResource: federation.Resource("clusters"), + EnableGarbageCollection: opts.EnableGarbageCollection, DeleteCollectionWorkers: opts.DeleteCollectionWorkers, CreateStrategy: cluster.Strategy, diff --git a/pkg/registry/certificates/etcd/etcd.go b/pkg/registry/certificates/etcd/etcd.go index cefe494de08..3a4e1e295ca 100644 --- a/pkg/registry/certificates/etcd/etcd.go +++ b/pkg/registry/certificates/etcd/etcd.go @@ -66,6 +66,7 @@ func NewREST(opts generic.RESTOptions) (*REST, *StatusREST, *ApprovalREST) { return csrregistry.Matcher(label, field) }, QualifiedResource: certificates.Resource("certificatesigningrequests"), + EnableGarbageCollection: opts.EnableGarbageCollection, DeleteCollectionWorkers: opts.DeleteCollectionWorkers, CreateStrategy: csrregistry.Strategy, diff --git a/pkg/registry/clusterrole/etcd/etcd.go b/pkg/registry/clusterrole/etcd/etcd.go index 034621a4dcc..4e7b5baff9d 100644 --- a/pkg/registry/clusterrole/etcd/etcd.go +++ b/pkg/registry/clusterrole/etcd/etcd.go @@ -61,6 +61,7 @@ func NewREST(opts generic.RESTOptions) *REST { }, PredicateFunc: clusterrole.Matcher, QualifiedResource: rbac.Resource("clusterroles"), + EnableGarbageCollection: opts.EnableGarbageCollection, DeleteCollectionWorkers: opts.DeleteCollectionWorkers, CreateStrategy: clusterrole.Strategy, diff --git a/pkg/registry/clusterrolebinding/etcd/etcd.go b/pkg/registry/clusterrolebinding/etcd/etcd.go index ae88503efb8..99bf7005290 100644 --- a/pkg/registry/clusterrolebinding/etcd/etcd.go +++ b/pkg/registry/clusterrolebinding/etcd/etcd.go @@ -61,6 +61,7 @@ func NewREST(opts generic.RESTOptions) *REST { }, PredicateFunc: clusterrolebinding.Matcher, QualifiedResource: rbac.Resource("clusterrolebindings"), + EnableGarbageCollection: opts.EnableGarbageCollection, DeleteCollectionWorkers: opts.DeleteCollectionWorkers, CreateStrategy: clusterrolebinding.Strategy, diff --git a/pkg/registry/configmap/etcd/etcd.go b/pkg/registry/configmap/etcd/etcd.go index 74c54090a4c..b16ce94b719 100644 --- a/pkg/registry/configmap/etcd/etcd.go +++ b/pkg/registry/configmap/etcd/etcd.go @@ -75,6 +75,7 @@ func NewREST(opts generic.RESTOptions) *REST { QualifiedResource: api.Resource("configmaps"), + EnableGarbageCollection: opts.EnableGarbageCollection, DeleteCollectionWorkers: opts.DeleteCollectionWorkers, CreateStrategy: configmap.Strategy, diff --git a/pkg/registry/controller/etcd/etcd.go b/pkg/registry/controller/etcd/etcd.go index 3fb538dbf9b..04ef3bb0254 100644 --- a/pkg/registry/controller/etcd/etcd.go +++ b/pkg/registry/controller/etcd/etcd.go @@ -95,6 +95,7 @@ func NewREST(opts generic.RESTOptions) (*REST, *StatusREST) { PredicateFunc: controller.MatchController, QualifiedResource: api.Resource("replicationcontrollers"), + EnableGarbageCollection: opts.EnableGarbageCollection, DeleteCollectionWorkers: opts.DeleteCollectionWorkers, // Used to validate controller creation diff --git a/pkg/registry/daemonset/etcd/etcd.go b/pkg/registry/daemonset/etcd/etcd.go index cf3ee4593a3..d72e100b830 100644 --- a/pkg/registry/daemonset/etcd/etcd.go +++ b/pkg/registry/daemonset/etcd/etcd.go @@ -70,6 +70,7 @@ func NewREST(opts generic.RESTOptions) (*REST, *StatusREST) { // Used to match objects based on labels/fields for list and watch PredicateFunc: daemonset.MatchDaemonSet, QualifiedResource: extensions.Resource("daemonsets"), + EnableGarbageCollection: opts.EnableGarbageCollection, DeleteCollectionWorkers: opts.DeleteCollectionWorkers, // Used to validate daemon set creation diff --git a/pkg/registry/deployment/etcd/etcd.go b/pkg/registry/deployment/etcd/etcd.go index 1e93d6a90aa..2b46a602eaa 100644 --- a/pkg/registry/deployment/etcd/etcd.go +++ b/pkg/registry/deployment/etcd/etcd.go @@ -93,6 +93,7 @@ func NewREST(opts generic.RESTOptions) (*REST, *StatusREST, *RollbackREST) { // Used to match objects based on labels/fields for list. PredicateFunc: deployment.MatchDeployment, QualifiedResource: extensions.Resource("deployments"), + EnableGarbageCollection: opts.EnableGarbageCollection, DeleteCollectionWorkers: opts.DeleteCollectionWorkers, // Used to validate deployment creation. diff --git a/pkg/registry/endpoint/etcd/etcd.go b/pkg/registry/endpoint/etcd/etcd.go index ed70ffbf2bf..22f4380fb0d 100644 --- a/pkg/registry/endpoint/etcd/etcd.go +++ b/pkg/registry/endpoint/etcd/etcd.go @@ -59,6 +59,7 @@ func NewREST(opts generic.RESTOptions) *REST { }, PredicateFunc: endpoint.MatchEndpoints, QualifiedResource: api.Resource("endpoints"), + EnableGarbageCollection: opts.EnableGarbageCollection, DeleteCollectionWorkers: opts.DeleteCollectionWorkers, CreateStrategy: endpoint.Strategy, diff --git a/pkg/registry/event/etcd/etcd.go b/pkg/registry/event/etcd/etcd.go index 01574a5fa2b..2aead663beb 100644 --- a/pkg/registry/event/etcd/etcd.go +++ b/pkg/registry/event/etcd/etcd.go @@ -52,7 +52,9 @@ func NewREST(opts generic.RESTOptions, ttl uint64) *REST { TTLFunc: func(runtime.Object, uint64, bool) (uint64, error) { return ttl, nil }, - QualifiedResource: api.Resource("events"), + QualifiedResource: api.Resource("events"), + + EnableGarbageCollection: opts.EnableGarbageCollection, DeleteCollectionWorkers: opts.DeleteCollectionWorkers, CreateStrategy: event.Strategy, diff --git a/pkg/registry/horizontalpodautoscaler/etcd/etcd.go b/pkg/registry/horizontalpodautoscaler/etcd/etcd.go index 7a34f36f7f4..8aac99a605b 100644 --- a/pkg/registry/horizontalpodautoscaler/etcd/etcd.go +++ b/pkg/registry/horizontalpodautoscaler/etcd/etcd.go @@ -68,6 +68,7 @@ func NewREST(opts generic.RESTOptions) (*REST, *StatusREST) { // Used to match objects based on labels/fields for list PredicateFunc: horizontalpodautoscaler.MatchAutoscaler, QualifiedResource: autoscaling.Resource("horizontalpodautoscalers"), + EnableGarbageCollection: opts.EnableGarbageCollection, DeleteCollectionWorkers: opts.DeleteCollectionWorkers, // Used to validate autoscaler creation diff --git a/pkg/registry/ingress/etcd/etcd.go b/pkg/registry/ingress/etcd/etcd.go index 3b991c9046d..e258a51bdc5 100644 --- a/pkg/registry/ingress/etcd/etcd.go +++ b/pkg/registry/ingress/etcd/etcd.go @@ -70,6 +70,7 @@ func NewREST(opts generic.RESTOptions) (*REST, *StatusREST) { // Used to match objects based on labels/fields for list and watch PredicateFunc: ingress.MatchIngress, QualifiedResource: extensions.Resource("ingresses"), + EnableGarbageCollection: opts.EnableGarbageCollection, DeleteCollectionWorkers: opts.DeleteCollectionWorkers, // Used to validate controller creation diff --git a/pkg/registry/job/etcd/etcd.go b/pkg/registry/job/etcd/etcd.go index 08507a77c47..3eba57b88f3 100644 --- a/pkg/registry/job/etcd/etcd.go +++ b/pkg/registry/job/etcd/etcd.go @@ -70,6 +70,7 @@ func NewREST(opts generic.RESTOptions) (*REST, *StatusREST) { // Used to match objects based on labels/fields for list and watch PredicateFunc: job.MatchJob, QualifiedResource: batch.Resource("jobs"), + EnableGarbageCollection: opts.EnableGarbageCollection, DeleteCollectionWorkers: opts.DeleteCollectionWorkers, // Used to validate job creation diff --git a/pkg/registry/limitrange/etcd/etcd.go b/pkg/registry/limitrange/etcd/etcd.go index ddfd4662fd9..c32f3fb49ef 100644 --- a/pkg/registry/limitrange/etcd/etcd.go +++ b/pkg/registry/limitrange/etcd/etcd.go @@ -59,6 +59,7 @@ func NewREST(opts generic.RESTOptions) *REST { }, PredicateFunc: limitrange.MatchLimitRange, QualifiedResource: api.Resource("limitranges"), + EnableGarbageCollection: opts.EnableGarbageCollection, DeleteCollectionWorkers: opts.DeleteCollectionWorkers, CreateStrategy: limitrange.Strategy, diff --git a/pkg/registry/namespace/etcd/etcd.go b/pkg/registry/namespace/etcd/etcd.go index 047692b4596..b4b34738588 100644 --- a/pkg/registry/namespace/etcd/etcd.go +++ b/pkg/registry/namespace/etcd/etcd.go @@ -77,6 +77,7 @@ func NewREST(opts generic.RESTOptions) (*REST, *StatusREST, *FinalizeREST) { }, PredicateFunc: namespace.MatchNamespace, QualifiedResource: api.Resource("namespaces"), + EnableGarbageCollection: opts.EnableGarbageCollection, DeleteCollectionWorkers: opts.DeleteCollectionWorkers, CreateStrategy: namespace.Strategy, diff --git a/pkg/registry/networkpolicy/etcd/etcd.go b/pkg/registry/networkpolicy/etcd/etcd.go index 00460004ece..496a298dad8 100644 --- a/pkg/registry/networkpolicy/etcd/etcd.go +++ b/pkg/registry/networkpolicy/etcd/etcd.go @@ -69,6 +69,7 @@ func NewREST(opts generic.RESTOptions) *REST { // Used to match objects based on labels/fields for list and watch PredicateFunc: networkpolicy.MatchNetworkPolicy, QualifiedResource: extensionsapi.Resource("networkpolicies"), + EnableGarbageCollection: opts.EnableGarbageCollection, DeleteCollectionWorkers: opts.DeleteCollectionWorkers, // Used to validate controller creation diff --git a/pkg/registry/node/etcd/etcd.go b/pkg/registry/node/etcd/etcd.go index 862cfe98987..3d5a458d7a4 100644 --- a/pkg/registry/node/etcd/etcd.go +++ b/pkg/registry/node/etcd/etcd.go @@ -92,6 +92,7 @@ func NewStorage(opts generic.RESTOptions, connection client.ConnectionInfoGetter }, PredicateFunc: node.MatchNode, QualifiedResource: api.Resource("nodes"), + EnableGarbageCollection: opts.EnableGarbageCollection, DeleteCollectionWorkers: opts.DeleteCollectionWorkers, CreateStrategy: node.Strategy, diff --git a/pkg/registry/persistentvolume/etcd/etcd.go b/pkg/registry/persistentvolume/etcd/etcd.go index 3ae4c636127..71c99d734dd 100644 --- a/pkg/registry/persistentvolume/etcd/etcd.go +++ b/pkg/registry/persistentvolume/etcd/etcd.go @@ -60,6 +60,7 @@ func NewREST(opts generic.RESTOptions) (*REST, *StatusREST) { }, PredicateFunc: persistentvolume.MatchPersistentVolumes, QualifiedResource: api.Resource("persistentvolumes"), + EnableGarbageCollection: opts.EnableGarbageCollection, DeleteCollectionWorkers: opts.DeleteCollectionWorkers, CreateStrategy: persistentvolume.Strategy, diff --git a/pkg/registry/persistentvolumeclaim/etcd/etcd.go b/pkg/registry/persistentvolumeclaim/etcd/etcd.go index 677e9317a9e..d2aa6d0616d 100644 --- a/pkg/registry/persistentvolumeclaim/etcd/etcd.go +++ b/pkg/registry/persistentvolumeclaim/etcd/etcd.go @@ -60,6 +60,7 @@ func NewREST(opts generic.RESTOptions) (*REST, *StatusREST) { }, PredicateFunc: persistentvolumeclaim.MatchPersistentVolumeClaim, QualifiedResource: api.Resource("persistentvolumeclaims"), + EnableGarbageCollection: opts.EnableGarbageCollection, DeleteCollectionWorkers: opts.DeleteCollectionWorkers, CreateStrategy: persistentvolumeclaim.Strategy, diff --git a/pkg/registry/petset/etcd/etcd.go b/pkg/registry/petset/etcd/etcd.go index e52367930a2..db728df3211 100644 --- a/pkg/registry/petset/etcd/etcd.go +++ b/pkg/registry/petset/etcd/etcd.go @@ -70,6 +70,7 @@ func NewREST(opts generic.RESTOptions) (*REST, *StatusREST) { // Used to match objects based on labels/fields for list and watch PredicateFunc: petset.MatchPetSet, QualifiedResource: appsapi.Resource("petsets"), + EnableGarbageCollection: opts.EnableGarbageCollection, DeleteCollectionWorkers: opts.DeleteCollectionWorkers, // Used to validate controller creation diff --git a/pkg/registry/pod/etcd/etcd.go b/pkg/registry/pod/etcd/etcd.go index a5650beec6e..ac8a52a166f 100644 --- a/pkg/registry/pod/etcd/etcd.go +++ b/pkg/registry/pod/etcd/etcd.go @@ -87,6 +87,7 @@ func NewStorage(opts generic.RESTOptions, k client.ConnectionInfoGetter, proxyTr }, PredicateFunc: pod.MatchPod, QualifiedResource: api.Resource("pods"), + EnableGarbageCollection: opts.EnableGarbageCollection, DeleteCollectionWorkers: opts.DeleteCollectionWorkers, CreateStrategy: pod.Strategy, diff --git a/pkg/registry/poddisruptionbudget/etcd/etcd.go b/pkg/registry/poddisruptionbudget/etcd/etcd.go index 3bf66204335..6007abc4f30 100644 --- a/pkg/registry/poddisruptionbudget/etcd/etcd.go +++ b/pkg/registry/poddisruptionbudget/etcd/etcd.go @@ -70,6 +70,7 @@ func NewREST(opts generic.RESTOptions) (*REST, *StatusREST) { // Used to match objects based on labels/fields for list and watch PredicateFunc: poddisruptionbudget.MatchPodDisruptionBudget, QualifiedResource: policyapi.Resource("poddisruptionbudgets"), + EnableGarbageCollection: opts.EnableGarbageCollection, DeleteCollectionWorkers: opts.DeleteCollectionWorkers, // Used to validate controller creation diff --git a/pkg/registry/podsecuritypolicy/etcd/etcd.go b/pkg/registry/podsecuritypolicy/etcd/etcd.go index 2a62230cff6..49d8b09504a 100644 --- a/pkg/registry/podsecuritypolicy/etcd/etcd.go +++ b/pkg/registry/podsecuritypolicy/etcd/etcd.go @@ -61,6 +61,7 @@ func NewREST(opts generic.RESTOptions) *REST { }, PredicateFunc: podsecuritypolicy.MatchPodSecurityPolicy, QualifiedResource: extensions.Resource("podsecuritypolicies"), + EnableGarbageCollection: opts.EnableGarbageCollection, DeleteCollectionWorkers: opts.DeleteCollectionWorkers, CreateStrategy: podsecuritypolicy.Strategy, diff --git a/pkg/registry/podtemplate/etcd/etcd.go b/pkg/registry/podtemplate/etcd/etcd.go index 0371ad5ad96..1102834c4d6 100644 --- a/pkg/registry/podtemplate/etcd/etcd.go +++ b/pkg/registry/podtemplate/etcd/etcd.go @@ -59,6 +59,7 @@ func NewREST(opts generic.RESTOptions) *REST { }, PredicateFunc: podtemplate.MatchPodTemplate, QualifiedResource: api.Resource("podtemplates"), + EnableGarbageCollection: opts.EnableGarbageCollection, DeleteCollectionWorkers: opts.DeleteCollectionWorkers, CreateStrategy: podtemplate.Strategy, diff --git a/pkg/registry/replicaset/etcd/etcd.go b/pkg/registry/replicaset/etcd/etcd.go index ce078ff3e4c..b6e5c4a6f23 100644 --- a/pkg/registry/replicaset/etcd/etcd.go +++ b/pkg/registry/replicaset/etcd/etcd.go @@ -93,6 +93,7 @@ func NewREST(opts generic.RESTOptions) (*REST, *StatusREST) { // Used to match objects based on labels/fields for list and watch PredicateFunc: replicaset.MatchReplicaSet, QualifiedResource: api.Resource("replicasets"), + EnableGarbageCollection: opts.EnableGarbageCollection, DeleteCollectionWorkers: opts.DeleteCollectionWorkers, // Used to validate ReplicaSet creation diff --git a/pkg/registry/resourcequota/etcd/etcd.go b/pkg/registry/resourcequota/etcd/etcd.go index 6d2c55341a1..fec21959c63 100644 --- a/pkg/registry/resourcequota/etcd/etcd.go +++ b/pkg/registry/resourcequota/etcd/etcd.go @@ -60,6 +60,7 @@ func NewREST(opts generic.RESTOptions) (*REST, *StatusREST) { }, PredicateFunc: resourcequota.MatchResourceQuota, QualifiedResource: api.Resource("resourcequotas"), + EnableGarbageCollection: opts.EnableGarbageCollection, DeleteCollectionWorkers: opts.DeleteCollectionWorkers, CreateStrategy: resourcequota.Strategy, diff --git a/pkg/registry/role/etcd/etcd.go b/pkg/registry/role/etcd/etcd.go index 2464fb1b21e..7443fb45f78 100644 --- a/pkg/registry/role/etcd/etcd.go +++ b/pkg/registry/role/etcd/etcd.go @@ -61,6 +61,7 @@ func NewREST(opts generic.RESTOptions) *REST { }, PredicateFunc: role.Matcher, QualifiedResource: rbac.Resource("roles"), + EnableGarbageCollection: opts.EnableGarbageCollection, DeleteCollectionWorkers: opts.DeleteCollectionWorkers, CreateStrategy: role.Strategy, diff --git a/pkg/registry/rolebinding/etcd/etcd.go b/pkg/registry/rolebinding/etcd/etcd.go index c5b5c97a55d..82e5eabd016 100644 --- a/pkg/registry/rolebinding/etcd/etcd.go +++ b/pkg/registry/rolebinding/etcd/etcd.go @@ -61,6 +61,7 @@ func NewREST(opts generic.RESTOptions) *REST { }, PredicateFunc: rolebinding.Matcher, QualifiedResource: rbac.Resource("rolebindings"), + EnableGarbageCollection: opts.EnableGarbageCollection, DeleteCollectionWorkers: opts.DeleteCollectionWorkers, CreateStrategy: rolebinding.Strategy, diff --git a/pkg/registry/scheduledjob/etcd/etcd.go b/pkg/registry/scheduledjob/etcd/etcd.go index d67e0ace747..fbb42d5869c 100644 --- a/pkg/registry/scheduledjob/etcd/etcd.go +++ b/pkg/registry/scheduledjob/etcd/etcd.go @@ -70,6 +70,7 @@ func NewREST(opts generic.RESTOptions) (*REST, *StatusREST) { // Used to match objects based on labels/fields for list and watch PredicateFunc: scheduledjob.MatchScheduledJob, QualifiedResource: batch.Resource("scheduledjobs"), + EnableGarbageCollection: opts.EnableGarbageCollection, DeleteCollectionWorkers: opts.DeleteCollectionWorkers, // Used to validate scheduled job creation diff --git a/pkg/registry/secret/etcd/etcd.go b/pkg/registry/secret/etcd/etcd.go index 0d9151c5501..a6c02225d0a 100644 --- a/pkg/registry/secret/etcd/etcd.go +++ b/pkg/registry/secret/etcd/etcd.go @@ -59,6 +59,7 @@ func NewREST(opts generic.RESTOptions) *REST { }, PredicateFunc: secret.Matcher, QualifiedResource: api.Resource("secrets"), + EnableGarbageCollection: opts.EnableGarbageCollection, DeleteCollectionWorkers: opts.DeleteCollectionWorkers, CreateStrategy: secret.Strategy, diff --git a/pkg/registry/service/etcd/etcd.go b/pkg/registry/service/etcd/etcd.go index ac91b6db3c2..3059fa33a63 100644 --- a/pkg/registry/service/etcd/etcd.go +++ b/pkg/registry/service/etcd/etcd.go @@ -60,6 +60,7 @@ func NewREST(opts generic.RESTOptions) (*REST, *StatusREST) { }, PredicateFunc: service.MatchServices, QualifiedResource: api.Resource("services"), + EnableGarbageCollection: opts.EnableGarbageCollection, DeleteCollectionWorkers: opts.DeleteCollectionWorkers, CreateStrategy: service.Strategy, diff --git a/pkg/registry/serviceaccount/etcd/etcd.go b/pkg/registry/serviceaccount/etcd/etcd.go index 22b853e83a8..ddf94362f88 100644 --- a/pkg/registry/serviceaccount/etcd/etcd.go +++ b/pkg/registry/serviceaccount/etcd/etcd.go @@ -59,6 +59,7 @@ func NewREST(opts generic.RESTOptions) *REST { }, PredicateFunc: serviceaccount.Matcher, QualifiedResource: api.Resource("serviceaccounts"), + EnableGarbageCollection: opts.EnableGarbageCollection, DeleteCollectionWorkers: opts.DeleteCollectionWorkers, CreateStrategy: serviceaccount.Strategy, diff --git a/pkg/registry/storageclass/etcd/etcd.go b/pkg/registry/storageclass/etcd/etcd.go index 44ea28bcb33..db0005ba147 100644 --- a/pkg/registry/storageclass/etcd/etcd.go +++ b/pkg/registry/storageclass/etcd/etcd.go @@ -60,6 +60,7 @@ func NewREST(opts generic.RESTOptions) *REST { }, PredicateFunc: storageclass.MatchStorageClasses, QualifiedResource: storageapi.Resource("storageclasses"), + EnableGarbageCollection: opts.EnableGarbageCollection, DeleteCollectionWorkers: opts.DeleteCollectionWorkers, CreateStrategy: storageclass.Strategy, diff --git a/pkg/registry/thirdpartyresource/etcd/etcd.go b/pkg/registry/thirdpartyresource/etcd/etcd.go index e9e974d6889..21fae8bb6b1 100644 --- a/pkg/registry/thirdpartyresource/etcd/etcd.go +++ b/pkg/registry/thirdpartyresource/etcd/etcd.go @@ -51,6 +51,7 @@ func NewREST(opts generic.RESTOptions) *REST { }, PredicateFunc: thirdpartyresource.Matcher, QualifiedResource: extensions.Resource("thirdpartyresources"), + EnableGarbageCollection: opts.EnableGarbageCollection, DeleteCollectionWorkers: opts.DeleteCollectionWorkers, CreateStrategy: thirdpartyresource.Strategy, UpdateStrategy: thirdpartyresource.Strategy, diff --git a/pkg/registry/thirdpartyresourcedata/etcd/etcd.go b/pkg/registry/thirdpartyresourcedata/etcd/etcd.go index eeda2785bb5..21a803a0f28 100644 --- a/pkg/registry/thirdpartyresourcedata/etcd/etcd.go +++ b/pkg/registry/thirdpartyresourcedata/etcd/etcd.go @@ -54,6 +54,7 @@ func NewREST(opts generic.RESTOptions, group, kind string) *REST { }, PredicateFunc: thirdpartyresourcedata.Matcher, QualifiedResource: extensions.Resource("thirdpartyresourcedatas"), + EnableGarbageCollection: opts.EnableGarbageCollection, DeleteCollectionWorkers: opts.DeleteCollectionWorkers, CreateStrategy: thirdpartyresourcedata.Strategy, UpdateStrategy: thirdpartyresourcedata.Strategy,