Commit 6946cce0 authored by Kubernetes Submit Queue's avatar Kubernetes Submit Queue Committed by GitHub

Merge pull request #32533 from smarterclayton/rest_options_gc

Automatic merge from submit-queue EnableGarbageCollection should be part of generic.RESTOptions
parents dab16bf8 716bac3b
...@@ -24,7 +24,6 @@ import ( ...@@ -24,7 +24,6 @@ import (
genericoptions "k8s.io/kubernetes/pkg/genericapiserver/options" genericoptions "k8s.io/kubernetes/pkg/genericapiserver/options"
kubeletclient "k8s.io/kubernetes/pkg/kubelet/client" kubeletclient "k8s.io/kubernetes/pkg/kubelet/client"
"k8s.io/kubernetes/pkg/master/ports" "k8s.io/kubernetes/pkg/master/ports"
"k8s.io/kubernetes/pkg/registry/generic/registry"
"github.com/spf13/pflag" "github.com/spf13/pflag"
) )
...@@ -123,8 +122,4 @@ func (s *APIServer) AddFlags(fs *pflag.FlagSet) { ...@@ -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, "+ "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 "+ "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.") "after we fix all the clients that send malformed updates.")
fs.BoolVar(&registry.EnableGarbageCollector, "enable-garbage-collector", true, ""+
"Enables the generic garbage collector. MUST be synced with the corresponding flag "+
"of the kube-controller-manager.")
} }
...@@ -73,6 +73,7 @@ func NewREST(opts generic.RESTOptions) (*REST, *StatusREST) { ...@@ -73,6 +73,7 @@ func NewREST(opts generic.RESTOptions) (*REST, *StatusREST) {
}, },
PredicateFunc: cluster.MatchCluster, PredicateFunc: cluster.MatchCluster,
QualifiedResource: federation.Resource("clusters"), QualifiedResource: federation.Resource("clusters"),
EnableGarbageCollection: opts.EnableGarbageCollection,
DeleteCollectionWorkers: opts.DeleteCollectionWorkers, DeleteCollectionWorkers: opts.DeleteCollectionWorkers,
CreateStrategy: cluster.Strategy, CreateStrategy: cluster.Strategy,
......
...@@ -72,13 +72,14 @@ type Config struct { ...@@ -72,13 +72,14 @@ type Config struct {
// Allows api group versions or specific resources to be conditionally enabled/disabled. // Allows api group versions or specific resources to be conditionally enabled/disabled.
APIResourceConfigSource APIResourceConfigSource APIResourceConfigSource APIResourceConfigSource
// allow downstream consumers to disable the index route // allow downstream consumers to disable the index route
EnableIndex bool EnableIndex bool
EnableProfiling bool EnableProfiling bool
EnableWatchCache bool EnableWatchCache bool
APIPrefix string EnableGarbageCollection bool
APIGroupPrefix string APIPrefix string
CorsAllowedOriginList []string APIGroupPrefix string
Authenticator authenticator.Request CorsAllowedOriginList []string
Authenticator authenticator.Request
// TODO(roberthbailey): Remove once the server no longer supports http basic auth. // TODO(roberthbailey): Remove once the server no longer supports http basic auth.
SupportsBasicAuth bool SupportsBasicAuth bool
Authorizer authorizer.Authorizer Authorizer authorizer.Authorizer
...@@ -169,6 +170,7 @@ func NewConfig(options *options.ServerRunOptions) *Config { ...@@ -169,6 +170,7 @@ func NewConfig(options *options.ServerRunOptions) *Config {
AuditLogMaxAge: options.AuditLogMaxAge, AuditLogMaxAge: options.AuditLogMaxAge,
AuditLogMaxBackups: options.AuditLogMaxBackups, AuditLogMaxBackups: options.AuditLogMaxBackups,
AuditLogMaxSize: options.AuditLogMaxSize, AuditLogMaxSize: options.AuditLogMaxSize,
EnableGarbageCollection: options.EnableGarbageCollection,
EnableIndex: true, EnableIndex: true,
EnableLogsSupport: options.EnableLogsSupport, EnableLogsSupport: options.EnableLogsSupport,
EnableProfiling: options.EnableProfiling, EnableProfiling: options.EnableProfiling,
......
...@@ -83,6 +83,7 @@ type ServerRunOptions struct { ...@@ -83,6 +83,7 @@ type ServerRunOptions struct {
AuditLogMaxAge int AuditLogMaxAge int
AuditLogMaxBackups int AuditLogMaxBackups int
AuditLogMaxSize int AuditLogMaxSize int
EnableGarbageCollection bool
EnableLogsSupport bool EnableLogsSupport bool
EnableProfiling bool EnableProfiling bool
EnableSwaggerUI bool EnableSwaggerUI bool
...@@ -133,6 +134,7 @@ func NewServerRunOptions() *ServerRunOptions { ...@@ -133,6 +134,7 @@ func NewServerRunOptions() *ServerRunOptions {
DefaultStorageMediaType: "application/json", DefaultStorageMediaType: "application/json",
DefaultStorageVersions: registered.AllPreferredGroupVersions(), DefaultStorageVersions: registered.AllPreferredGroupVersions(),
DeleteCollectionWorkers: 1, DeleteCollectionWorkers: 1,
EnableGarbageCollection: true,
EnableLogsSupport: true, EnableLogsSupport: true,
EnableProfiling: true, EnableProfiling: true,
EnableWatchCache: true, EnableWatchCache: true,
...@@ -306,6 +308,10 @@ func (s *ServerRunOptions) AddUniversalFlags(fs *pflag.FlagSet) { ...@@ -306,6 +308,10 @@ func (s *ServerRunOptions) AddUniversalFlags(fs *pflag.FlagSet) {
fs.IntVar(&s.AuditLogMaxSize, "audit-log-maxsize", s.AuditLogMaxSize, 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.") "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, fs.BoolVar(&s.EnableProfiling, "profiling", s.EnableProfiling,
"Enable profiling via web interface host:port/debug/pprof/") "Enable profiling via web interface host:port/debug/pprof/")
......
...@@ -781,6 +781,7 @@ func (m *Master) GetRESTOptionsOrDie(c *Config, resource unversioned.GroupResour ...@@ -781,6 +781,7 @@ func (m *Master) GetRESTOptionsOrDie(c *Config, resource unversioned.GroupResour
StorageConfig: storageConfig, StorageConfig: storageConfig,
Decorator: m.StorageDecorator(), Decorator: m.StorageDecorator(),
DeleteCollectionWorkers: m.deleteCollectionWorkers, DeleteCollectionWorkers: m.deleteCollectionWorkers,
EnableGarbageCollection: c.Config.EnableGarbageCollection,
ResourcePrefix: c.StorageFactory.ResourcePrefix(resource), ResourcePrefix: c.StorageFactory.ResourcePrefix(resource),
} }
} }
......
...@@ -66,6 +66,7 @@ func NewREST(opts generic.RESTOptions) (*REST, *StatusREST, *ApprovalREST) { ...@@ -66,6 +66,7 @@ func NewREST(opts generic.RESTOptions) (*REST, *StatusREST, *ApprovalREST) {
return csrregistry.Matcher(label, field) return csrregistry.Matcher(label, field)
}, },
QualifiedResource: certificates.Resource("certificatesigningrequests"), QualifiedResource: certificates.Resource("certificatesigningrequests"),
EnableGarbageCollection: opts.EnableGarbageCollection,
DeleteCollectionWorkers: opts.DeleteCollectionWorkers, DeleteCollectionWorkers: opts.DeleteCollectionWorkers,
CreateStrategy: csrregistry.Strategy, CreateStrategy: csrregistry.Strategy,
......
...@@ -61,6 +61,7 @@ func NewREST(opts generic.RESTOptions) *REST { ...@@ -61,6 +61,7 @@ func NewREST(opts generic.RESTOptions) *REST {
}, },
PredicateFunc: clusterrole.Matcher, PredicateFunc: clusterrole.Matcher,
QualifiedResource: rbac.Resource("clusterroles"), QualifiedResource: rbac.Resource("clusterroles"),
EnableGarbageCollection: opts.EnableGarbageCollection,
DeleteCollectionWorkers: opts.DeleteCollectionWorkers, DeleteCollectionWorkers: opts.DeleteCollectionWorkers,
CreateStrategy: clusterrole.Strategy, CreateStrategy: clusterrole.Strategy,
......
...@@ -61,6 +61,7 @@ func NewREST(opts generic.RESTOptions) *REST { ...@@ -61,6 +61,7 @@ func NewREST(opts generic.RESTOptions) *REST {
}, },
PredicateFunc: clusterrolebinding.Matcher, PredicateFunc: clusterrolebinding.Matcher,
QualifiedResource: rbac.Resource("clusterrolebindings"), QualifiedResource: rbac.Resource("clusterrolebindings"),
EnableGarbageCollection: opts.EnableGarbageCollection,
DeleteCollectionWorkers: opts.DeleteCollectionWorkers, DeleteCollectionWorkers: opts.DeleteCollectionWorkers,
CreateStrategy: clusterrolebinding.Strategy, CreateStrategy: clusterrolebinding.Strategy,
......
...@@ -75,6 +75,7 @@ func NewREST(opts generic.RESTOptions) *REST { ...@@ -75,6 +75,7 @@ func NewREST(opts generic.RESTOptions) *REST {
QualifiedResource: api.Resource("configmaps"), QualifiedResource: api.Resource("configmaps"),
EnableGarbageCollection: opts.EnableGarbageCollection,
DeleteCollectionWorkers: opts.DeleteCollectionWorkers, DeleteCollectionWorkers: opts.DeleteCollectionWorkers,
CreateStrategy: configmap.Strategy, CreateStrategy: configmap.Strategy,
......
...@@ -95,6 +95,7 @@ func NewREST(opts generic.RESTOptions) (*REST, *StatusREST) { ...@@ -95,6 +95,7 @@ func NewREST(opts generic.RESTOptions) (*REST, *StatusREST) {
PredicateFunc: controller.MatchController, PredicateFunc: controller.MatchController,
QualifiedResource: api.Resource("replicationcontrollers"), QualifiedResource: api.Resource("replicationcontrollers"),
EnableGarbageCollection: opts.EnableGarbageCollection,
DeleteCollectionWorkers: opts.DeleteCollectionWorkers, DeleteCollectionWorkers: opts.DeleteCollectionWorkers,
// Used to validate controller creation // Used to validate controller creation
......
...@@ -70,6 +70,7 @@ func NewREST(opts generic.RESTOptions) (*REST, *StatusREST) { ...@@ -70,6 +70,7 @@ func NewREST(opts generic.RESTOptions) (*REST, *StatusREST) {
// Used to match objects based on labels/fields for list and watch // Used to match objects based on labels/fields for list and watch
PredicateFunc: daemonset.MatchDaemonSet, PredicateFunc: daemonset.MatchDaemonSet,
QualifiedResource: extensions.Resource("daemonsets"), QualifiedResource: extensions.Resource("daemonsets"),
EnableGarbageCollection: opts.EnableGarbageCollection,
DeleteCollectionWorkers: opts.DeleteCollectionWorkers, DeleteCollectionWorkers: opts.DeleteCollectionWorkers,
// Used to validate daemon set creation // Used to validate daemon set creation
......
...@@ -93,6 +93,7 @@ func NewREST(opts generic.RESTOptions) (*REST, *StatusREST, *RollbackREST) { ...@@ -93,6 +93,7 @@ func NewREST(opts generic.RESTOptions) (*REST, *StatusREST, *RollbackREST) {
// Used to match objects based on labels/fields for list. // Used to match objects based on labels/fields for list.
PredicateFunc: deployment.MatchDeployment, PredicateFunc: deployment.MatchDeployment,
QualifiedResource: extensions.Resource("deployments"), QualifiedResource: extensions.Resource("deployments"),
EnableGarbageCollection: opts.EnableGarbageCollection,
DeleteCollectionWorkers: opts.DeleteCollectionWorkers, DeleteCollectionWorkers: opts.DeleteCollectionWorkers,
// Used to validate deployment creation. // Used to validate deployment creation.
......
...@@ -59,6 +59,7 @@ func NewREST(opts generic.RESTOptions) *REST { ...@@ -59,6 +59,7 @@ func NewREST(opts generic.RESTOptions) *REST {
}, },
PredicateFunc: endpoint.MatchEndpoints, PredicateFunc: endpoint.MatchEndpoints,
QualifiedResource: api.Resource("endpoints"), QualifiedResource: api.Resource("endpoints"),
EnableGarbageCollection: opts.EnableGarbageCollection,
DeleteCollectionWorkers: opts.DeleteCollectionWorkers, DeleteCollectionWorkers: opts.DeleteCollectionWorkers,
CreateStrategy: endpoint.Strategy, CreateStrategy: endpoint.Strategy,
......
...@@ -52,7 +52,9 @@ func NewREST(opts generic.RESTOptions, ttl uint64) *REST { ...@@ -52,7 +52,9 @@ func NewREST(opts generic.RESTOptions, ttl uint64) *REST {
TTLFunc: func(runtime.Object, uint64, bool) (uint64, error) { TTLFunc: func(runtime.Object, uint64, bool) (uint64, error) {
return ttl, nil return ttl, nil
}, },
QualifiedResource: api.Resource("events"), QualifiedResource: api.Resource("events"),
EnableGarbageCollection: opts.EnableGarbageCollection,
DeleteCollectionWorkers: opts.DeleteCollectionWorkers, DeleteCollectionWorkers: opts.DeleteCollectionWorkers,
CreateStrategy: event.Strategy, CreateStrategy: event.Strategy,
......
...@@ -20,9 +20,10 @@ import "k8s.io/kubernetes/pkg/storage/storagebackend" ...@@ -20,9 +20,10 @@ import "k8s.io/kubernetes/pkg/storage/storagebackend"
// RESTOptions is set of configuration options to generic registries. // RESTOptions is set of configuration options to generic registries.
type RESTOptions struct { type RESTOptions struct {
StorageConfig *storagebackend.Config StorageConfig *storagebackend.Config
Decorator StorageDecorator Decorator StorageDecorator
DeleteCollectionWorkers int
ResourcePrefix string EnableGarbageCollection bool
DeleteCollectionWorkers int
ResourcePrefix string
} }
...@@ -42,10 +42,6 @@ import ( ...@@ -42,10 +42,6 @@ import (
"github.com/golang/glog" "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. // Store implements generic.Registry.
// It's intended to be embeddable, so that you can implement any // It's intended to be embeddable, so that you can implement any
// non-generic functions if needed. // non-generic functions if needed.
...@@ -93,6 +89,10 @@ type Store struct { ...@@ -93,6 +89,10 @@ type Store struct {
// Called to cleanup storage clients. // Called to cleanup storage clients.
DestroyFunc func() 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 // DeleteCollectionWorkers is the maximum number of workers in a single
// DeleteCollection call. // DeleteCollection call.
DeleteCollectionWorkers int DeleteCollectionWorkers int
...@@ -272,7 +272,7 @@ func (e *Store) Create(ctx api.Context, obj runtime.Object) (runtime.Object, err ...@@ -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 // it further checks if the object's DeletionGracePeriodSeconds is 0. If so, it
// returns true. // returns true.
func (e *Store) shouldDelete(ctx api.Context, key string, obj, existing runtime.Object) bool { func (e *Store) shouldDelete(ctx api.Context, key string, obj, existing runtime.Object) bool {
if !EnableGarbageCollector { if !e.EnableGarbageCollection {
return false return false
} }
newMeta, err := api.ObjectMetaFor(obj) newMeta, err := api.ObjectMetaFor(obj)
...@@ -694,7 +694,7 @@ func (e *Store) Delete(ctx api.Context, name string, options *api.DeleteOptions) ...@@ -694,7 +694,7 @@ func (e *Store) Delete(ctx api.Context, name string, options *api.DeleteOptions)
var ignoreNotFound bool var ignoreNotFound bool
var deleteImmediately bool = true var deleteImmediately bool = true
var lastExisting, out runtime.Object var lastExisting, out runtime.Object
if !EnableGarbageCollector { if !e.EnableGarbageCollection {
// TODO: remove the check on graceful, because we support no-op updates now. // TODO: remove the check on graceful, because we support no-op updates now.
if graceful { if graceful {
err, ignoreNotFound, deleteImmediately, out, lastExisting = e.updateForGracefulDeletion(ctx, name, key, options, preconditions, obj) err, ignoreNotFound, deleteImmediately, out, lastExisting = e.updateForGracefulDeletion(ctx, name, key, options, preconditions, obj)
......
...@@ -618,9 +618,7 @@ func TestStoreDelete(t *testing.T) { ...@@ -618,9 +618,7 @@ func TestStoreDelete(t *testing.T) {
} }
func TestGracefulStoreHandleFinalizers(t *testing.T) { func TestGracefulStoreHandleFinalizers(t *testing.T) {
EnableGarbageCollector = true
initialGeneration := int64(1) initialGeneration := int64(1)
defer func() { EnableGarbageCollector = false }()
podWithFinalizer := &api.Pod{ podWithFinalizer := &api.Pod{
ObjectMeta: api.ObjectMeta{Name: "foo", Finalizers: []string{"foo.com/x"}, Generation: initialGeneration}, ObjectMeta: api.ObjectMeta{Name: "foo", Finalizers: []string{"foo.com/x"}, Generation: initialGeneration},
Spec: api.PodSpec{NodeName: "machine"}, Spec: api.PodSpec{NodeName: "machine"},
...@@ -628,6 +626,7 @@ func TestGracefulStoreHandleFinalizers(t *testing.T) { ...@@ -628,6 +626,7 @@ func TestGracefulStoreHandleFinalizers(t *testing.T) {
testContext := api.WithNamespace(api.NewContext(), "test") testContext := api.WithNamespace(api.NewContext(), "test")
destroyFunc, registry := NewTestGenericStoreRegistry(t) destroyFunc, registry := NewTestGenericStoreRegistry(t)
registry.EnableGarbageCollection = true
defaultDeleteStrategy := testRESTStrategy{api.Scheme, api.SimpleNameGenerator, true, false, true} defaultDeleteStrategy := testRESTStrategy{api.Scheme, api.SimpleNameGenerator, true, false, true}
registry.DeleteStrategy = testGracefulStrategy{defaultDeleteStrategy} registry.DeleteStrategy = testGracefulStrategy{defaultDeleteStrategy}
defer destroyFunc() defer destroyFunc()
...@@ -678,9 +677,7 @@ func TestGracefulStoreHandleFinalizers(t *testing.T) { ...@@ -678,9 +677,7 @@ func TestGracefulStoreHandleFinalizers(t *testing.T) {
} }
func TestNonGracefulStoreHandleFinalizers(t *testing.T) { func TestNonGracefulStoreHandleFinalizers(t *testing.T) {
EnableGarbageCollector = true
initialGeneration := int64(1) initialGeneration := int64(1)
defer func() { EnableGarbageCollector = false }()
podWithFinalizer := &api.Pod{ podWithFinalizer := &api.Pod{
ObjectMeta: api.ObjectMeta{Name: "foo", Finalizers: []string{"foo.com/x"}, Generation: initialGeneration}, ObjectMeta: api.ObjectMeta{Name: "foo", Finalizers: []string{"foo.com/x"}, Generation: initialGeneration},
Spec: api.PodSpec{NodeName: "machine"}, Spec: api.PodSpec{NodeName: "machine"},
...@@ -688,6 +685,7 @@ func TestNonGracefulStoreHandleFinalizers(t *testing.T) { ...@@ -688,6 +685,7 @@ func TestNonGracefulStoreHandleFinalizers(t *testing.T) {
testContext := api.WithNamespace(api.NewContext(), "test") testContext := api.WithNamespace(api.NewContext(), "test")
destroyFunc, registry := NewTestGenericStoreRegistry(t) destroyFunc, registry := NewTestGenericStoreRegistry(t)
registry.EnableGarbageCollection = true
defer destroyFunc() defer destroyFunc()
// create pod // create pod
_, err := registry.Create(testContext, podWithFinalizer) _, err := registry.Create(testContext, podWithFinalizer)
...@@ -755,9 +753,7 @@ func TestNonGracefulStoreHandleFinalizers(t *testing.T) { ...@@ -755,9 +753,7 @@ func TestNonGracefulStoreHandleFinalizers(t *testing.T) {
} }
func TestStoreDeleteWithOrphanDependents(t *testing.T) { func TestStoreDeleteWithOrphanDependents(t *testing.T) {
EnableGarbageCollector = true
initialGeneration := int64(1) initialGeneration := int64(1)
defer func() { EnableGarbageCollector = false }()
podWithOrphanFinalizer := func(name string) *api.Pod { podWithOrphanFinalizer := func(name string) *api.Pod {
return &api.Pod{ return &api.Pod{
ObjectMeta: api.ObjectMeta{Name: name, Finalizers: []string{"foo.com/x", api.FinalizerOrphan, "bar.com/y"}, Generation: initialGeneration}, 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) { ...@@ -984,6 +980,7 @@ func TestStoreDeleteWithOrphanDependents(t *testing.T) {
testContext := api.WithNamespace(api.NewContext(), "test") testContext := api.WithNamespace(api.NewContext(), "test")
destroyFunc, registry := NewTestGenericStoreRegistry(t) destroyFunc, registry := NewTestGenericStoreRegistry(t)
registry.EnableGarbageCollection = true
defer destroyFunc() defer destroyFunc()
for _, tc := range testcases { for _, tc := range testcases {
......
...@@ -68,6 +68,7 @@ func NewREST(opts generic.RESTOptions) (*REST, *StatusREST) { ...@@ -68,6 +68,7 @@ func NewREST(opts generic.RESTOptions) (*REST, *StatusREST) {
// Used to match objects based on labels/fields for list // Used to match objects based on labels/fields for list
PredicateFunc: horizontalpodautoscaler.MatchAutoscaler, PredicateFunc: horizontalpodautoscaler.MatchAutoscaler,
QualifiedResource: autoscaling.Resource("horizontalpodautoscalers"), QualifiedResource: autoscaling.Resource("horizontalpodautoscalers"),
EnableGarbageCollection: opts.EnableGarbageCollection,
DeleteCollectionWorkers: opts.DeleteCollectionWorkers, DeleteCollectionWorkers: opts.DeleteCollectionWorkers,
// Used to validate autoscaler creation // Used to validate autoscaler creation
......
...@@ -70,6 +70,7 @@ func NewREST(opts generic.RESTOptions) (*REST, *StatusREST) { ...@@ -70,6 +70,7 @@ func NewREST(opts generic.RESTOptions) (*REST, *StatusREST) {
// Used to match objects based on labels/fields for list and watch // Used to match objects based on labels/fields for list and watch
PredicateFunc: ingress.MatchIngress, PredicateFunc: ingress.MatchIngress,
QualifiedResource: extensions.Resource("ingresses"), QualifiedResource: extensions.Resource("ingresses"),
EnableGarbageCollection: opts.EnableGarbageCollection,
DeleteCollectionWorkers: opts.DeleteCollectionWorkers, DeleteCollectionWorkers: opts.DeleteCollectionWorkers,
// Used to validate controller creation // Used to validate controller creation
......
...@@ -70,6 +70,7 @@ func NewREST(opts generic.RESTOptions) (*REST, *StatusREST) { ...@@ -70,6 +70,7 @@ func NewREST(opts generic.RESTOptions) (*REST, *StatusREST) {
// Used to match objects based on labels/fields for list and watch // Used to match objects based on labels/fields for list and watch
PredicateFunc: job.MatchJob, PredicateFunc: job.MatchJob,
QualifiedResource: batch.Resource("jobs"), QualifiedResource: batch.Resource("jobs"),
EnableGarbageCollection: opts.EnableGarbageCollection,
DeleteCollectionWorkers: opts.DeleteCollectionWorkers, DeleteCollectionWorkers: opts.DeleteCollectionWorkers,
// Used to validate job creation // Used to validate job creation
......
...@@ -59,6 +59,7 @@ func NewREST(opts generic.RESTOptions) *REST { ...@@ -59,6 +59,7 @@ func NewREST(opts generic.RESTOptions) *REST {
}, },
PredicateFunc: limitrange.MatchLimitRange, PredicateFunc: limitrange.MatchLimitRange,
QualifiedResource: api.Resource("limitranges"), QualifiedResource: api.Resource("limitranges"),
EnableGarbageCollection: opts.EnableGarbageCollection,
DeleteCollectionWorkers: opts.DeleteCollectionWorkers, DeleteCollectionWorkers: opts.DeleteCollectionWorkers,
CreateStrategy: limitrange.Strategy, CreateStrategy: limitrange.Strategy,
......
...@@ -77,6 +77,7 @@ func NewREST(opts generic.RESTOptions) (*REST, *StatusREST, *FinalizeREST) { ...@@ -77,6 +77,7 @@ func NewREST(opts generic.RESTOptions) (*REST, *StatusREST, *FinalizeREST) {
}, },
PredicateFunc: namespace.MatchNamespace, PredicateFunc: namespace.MatchNamespace,
QualifiedResource: api.Resource("namespaces"), QualifiedResource: api.Resource("namespaces"),
EnableGarbageCollection: opts.EnableGarbageCollection,
DeleteCollectionWorkers: opts.DeleteCollectionWorkers, DeleteCollectionWorkers: opts.DeleteCollectionWorkers,
CreateStrategy: namespace.Strategy, CreateStrategy: namespace.Strategy,
......
...@@ -69,6 +69,7 @@ func NewREST(opts generic.RESTOptions) *REST { ...@@ -69,6 +69,7 @@ func NewREST(opts generic.RESTOptions) *REST {
// Used to match objects based on labels/fields for list and watch // Used to match objects based on labels/fields for list and watch
PredicateFunc: networkpolicy.MatchNetworkPolicy, PredicateFunc: networkpolicy.MatchNetworkPolicy,
QualifiedResource: extensionsapi.Resource("networkpolicies"), QualifiedResource: extensionsapi.Resource("networkpolicies"),
EnableGarbageCollection: opts.EnableGarbageCollection,
DeleteCollectionWorkers: opts.DeleteCollectionWorkers, DeleteCollectionWorkers: opts.DeleteCollectionWorkers,
// Used to validate controller creation // Used to validate controller creation
......
...@@ -92,6 +92,7 @@ func NewStorage(opts generic.RESTOptions, connection client.ConnectionInfoGetter ...@@ -92,6 +92,7 @@ func NewStorage(opts generic.RESTOptions, connection client.ConnectionInfoGetter
}, },
PredicateFunc: node.MatchNode, PredicateFunc: node.MatchNode,
QualifiedResource: api.Resource("nodes"), QualifiedResource: api.Resource("nodes"),
EnableGarbageCollection: opts.EnableGarbageCollection,
DeleteCollectionWorkers: opts.DeleteCollectionWorkers, DeleteCollectionWorkers: opts.DeleteCollectionWorkers,
CreateStrategy: node.Strategy, CreateStrategy: node.Strategy,
......
...@@ -60,6 +60,7 @@ func NewREST(opts generic.RESTOptions) (*REST, *StatusREST) { ...@@ -60,6 +60,7 @@ func NewREST(opts generic.RESTOptions) (*REST, *StatusREST) {
}, },
PredicateFunc: persistentvolume.MatchPersistentVolumes, PredicateFunc: persistentvolume.MatchPersistentVolumes,
QualifiedResource: api.Resource("persistentvolumes"), QualifiedResource: api.Resource("persistentvolumes"),
EnableGarbageCollection: opts.EnableGarbageCollection,
DeleteCollectionWorkers: opts.DeleteCollectionWorkers, DeleteCollectionWorkers: opts.DeleteCollectionWorkers,
CreateStrategy: persistentvolume.Strategy, CreateStrategy: persistentvolume.Strategy,
......
...@@ -60,6 +60,7 @@ func NewREST(opts generic.RESTOptions) (*REST, *StatusREST) { ...@@ -60,6 +60,7 @@ func NewREST(opts generic.RESTOptions) (*REST, *StatusREST) {
}, },
PredicateFunc: persistentvolumeclaim.MatchPersistentVolumeClaim, PredicateFunc: persistentvolumeclaim.MatchPersistentVolumeClaim,
QualifiedResource: api.Resource("persistentvolumeclaims"), QualifiedResource: api.Resource("persistentvolumeclaims"),
EnableGarbageCollection: opts.EnableGarbageCollection,
DeleteCollectionWorkers: opts.DeleteCollectionWorkers, DeleteCollectionWorkers: opts.DeleteCollectionWorkers,
CreateStrategy: persistentvolumeclaim.Strategy, CreateStrategy: persistentvolumeclaim.Strategy,
......
...@@ -70,6 +70,7 @@ func NewREST(opts generic.RESTOptions) (*REST, *StatusREST) { ...@@ -70,6 +70,7 @@ func NewREST(opts generic.RESTOptions) (*REST, *StatusREST) {
// Used to match objects based on labels/fields for list and watch // Used to match objects based on labels/fields for list and watch
PredicateFunc: petset.MatchPetSet, PredicateFunc: petset.MatchPetSet,
QualifiedResource: appsapi.Resource("petsets"), QualifiedResource: appsapi.Resource("petsets"),
EnableGarbageCollection: opts.EnableGarbageCollection,
DeleteCollectionWorkers: opts.DeleteCollectionWorkers, DeleteCollectionWorkers: opts.DeleteCollectionWorkers,
// Used to validate controller creation // Used to validate controller creation
......
...@@ -87,6 +87,7 @@ func NewStorage(opts generic.RESTOptions, k client.ConnectionInfoGetter, proxyTr ...@@ -87,6 +87,7 @@ func NewStorage(opts generic.RESTOptions, k client.ConnectionInfoGetter, proxyTr
}, },
PredicateFunc: pod.MatchPod, PredicateFunc: pod.MatchPod,
QualifiedResource: api.Resource("pods"), QualifiedResource: api.Resource("pods"),
EnableGarbageCollection: opts.EnableGarbageCollection,
DeleteCollectionWorkers: opts.DeleteCollectionWorkers, DeleteCollectionWorkers: opts.DeleteCollectionWorkers,
CreateStrategy: pod.Strategy, CreateStrategy: pod.Strategy,
......
...@@ -70,6 +70,7 @@ func NewREST(opts generic.RESTOptions) (*REST, *StatusREST) { ...@@ -70,6 +70,7 @@ func NewREST(opts generic.RESTOptions) (*REST, *StatusREST) {
// Used to match objects based on labels/fields for list and watch // Used to match objects based on labels/fields for list and watch
PredicateFunc: poddisruptionbudget.MatchPodDisruptionBudget, PredicateFunc: poddisruptionbudget.MatchPodDisruptionBudget,
QualifiedResource: policyapi.Resource("poddisruptionbudgets"), QualifiedResource: policyapi.Resource("poddisruptionbudgets"),
EnableGarbageCollection: opts.EnableGarbageCollection,
DeleteCollectionWorkers: opts.DeleteCollectionWorkers, DeleteCollectionWorkers: opts.DeleteCollectionWorkers,
// Used to validate controller creation // Used to validate controller creation
......
...@@ -61,6 +61,7 @@ func NewREST(opts generic.RESTOptions) *REST { ...@@ -61,6 +61,7 @@ func NewREST(opts generic.RESTOptions) *REST {
}, },
PredicateFunc: podsecuritypolicy.MatchPodSecurityPolicy, PredicateFunc: podsecuritypolicy.MatchPodSecurityPolicy,
QualifiedResource: extensions.Resource("podsecuritypolicies"), QualifiedResource: extensions.Resource("podsecuritypolicies"),
EnableGarbageCollection: opts.EnableGarbageCollection,
DeleteCollectionWorkers: opts.DeleteCollectionWorkers, DeleteCollectionWorkers: opts.DeleteCollectionWorkers,
CreateStrategy: podsecuritypolicy.Strategy, CreateStrategy: podsecuritypolicy.Strategy,
......
...@@ -59,6 +59,7 @@ func NewREST(opts generic.RESTOptions) *REST { ...@@ -59,6 +59,7 @@ func NewREST(opts generic.RESTOptions) *REST {
}, },
PredicateFunc: podtemplate.MatchPodTemplate, PredicateFunc: podtemplate.MatchPodTemplate,
QualifiedResource: api.Resource("podtemplates"), QualifiedResource: api.Resource("podtemplates"),
EnableGarbageCollection: opts.EnableGarbageCollection,
DeleteCollectionWorkers: opts.DeleteCollectionWorkers, DeleteCollectionWorkers: opts.DeleteCollectionWorkers,
CreateStrategy: podtemplate.Strategy, CreateStrategy: podtemplate.Strategy,
......
...@@ -93,6 +93,7 @@ func NewREST(opts generic.RESTOptions) (*REST, *StatusREST) { ...@@ -93,6 +93,7 @@ func NewREST(opts generic.RESTOptions) (*REST, *StatusREST) {
// Used to match objects based on labels/fields for list and watch // Used to match objects based on labels/fields for list and watch
PredicateFunc: replicaset.MatchReplicaSet, PredicateFunc: replicaset.MatchReplicaSet,
QualifiedResource: api.Resource("replicasets"), QualifiedResource: api.Resource("replicasets"),
EnableGarbageCollection: opts.EnableGarbageCollection,
DeleteCollectionWorkers: opts.DeleteCollectionWorkers, DeleteCollectionWorkers: opts.DeleteCollectionWorkers,
// Used to validate ReplicaSet creation // Used to validate ReplicaSet creation
......
...@@ -60,6 +60,7 @@ func NewREST(opts generic.RESTOptions) (*REST, *StatusREST) { ...@@ -60,6 +60,7 @@ func NewREST(opts generic.RESTOptions) (*REST, *StatusREST) {
}, },
PredicateFunc: resourcequota.MatchResourceQuota, PredicateFunc: resourcequota.MatchResourceQuota,
QualifiedResource: api.Resource("resourcequotas"), QualifiedResource: api.Resource("resourcequotas"),
EnableGarbageCollection: opts.EnableGarbageCollection,
DeleteCollectionWorkers: opts.DeleteCollectionWorkers, DeleteCollectionWorkers: opts.DeleteCollectionWorkers,
CreateStrategy: resourcequota.Strategy, CreateStrategy: resourcequota.Strategy,
......
...@@ -61,6 +61,7 @@ func NewREST(opts generic.RESTOptions) *REST { ...@@ -61,6 +61,7 @@ func NewREST(opts generic.RESTOptions) *REST {
}, },
PredicateFunc: role.Matcher, PredicateFunc: role.Matcher,
QualifiedResource: rbac.Resource("roles"), QualifiedResource: rbac.Resource("roles"),
EnableGarbageCollection: opts.EnableGarbageCollection,
DeleteCollectionWorkers: opts.DeleteCollectionWorkers, DeleteCollectionWorkers: opts.DeleteCollectionWorkers,
CreateStrategy: role.Strategy, CreateStrategy: role.Strategy,
......
...@@ -61,6 +61,7 @@ func NewREST(opts generic.RESTOptions) *REST { ...@@ -61,6 +61,7 @@ func NewREST(opts generic.RESTOptions) *REST {
}, },
PredicateFunc: rolebinding.Matcher, PredicateFunc: rolebinding.Matcher,
QualifiedResource: rbac.Resource("rolebindings"), QualifiedResource: rbac.Resource("rolebindings"),
EnableGarbageCollection: opts.EnableGarbageCollection,
DeleteCollectionWorkers: opts.DeleteCollectionWorkers, DeleteCollectionWorkers: opts.DeleteCollectionWorkers,
CreateStrategy: rolebinding.Strategy, CreateStrategy: rolebinding.Strategy,
......
...@@ -70,6 +70,7 @@ func NewREST(opts generic.RESTOptions) (*REST, *StatusREST) { ...@@ -70,6 +70,7 @@ func NewREST(opts generic.RESTOptions) (*REST, *StatusREST) {
// Used to match objects based on labels/fields for list and watch // Used to match objects based on labels/fields for list and watch
PredicateFunc: scheduledjob.MatchScheduledJob, PredicateFunc: scheduledjob.MatchScheduledJob,
QualifiedResource: batch.Resource("scheduledjobs"), QualifiedResource: batch.Resource("scheduledjobs"),
EnableGarbageCollection: opts.EnableGarbageCollection,
DeleteCollectionWorkers: opts.DeleteCollectionWorkers, DeleteCollectionWorkers: opts.DeleteCollectionWorkers,
// Used to validate scheduled job creation // Used to validate scheduled job creation
......
...@@ -59,6 +59,7 @@ func NewREST(opts generic.RESTOptions) *REST { ...@@ -59,6 +59,7 @@ func NewREST(opts generic.RESTOptions) *REST {
}, },
PredicateFunc: secret.Matcher, PredicateFunc: secret.Matcher,
QualifiedResource: api.Resource("secrets"), QualifiedResource: api.Resource("secrets"),
EnableGarbageCollection: opts.EnableGarbageCollection,
DeleteCollectionWorkers: opts.DeleteCollectionWorkers, DeleteCollectionWorkers: opts.DeleteCollectionWorkers,
CreateStrategy: secret.Strategy, CreateStrategy: secret.Strategy,
......
...@@ -60,6 +60,7 @@ func NewREST(opts generic.RESTOptions) (*REST, *StatusREST) { ...@@ -60,6 +60,7 @@ func NewREST(opts generic.RESTOptions) (*REST, *StatusREST) {
}, },
PredicateFunc: service.MatchServices, PredicateFunc: service.MatchServices,
QualifiedResource: api.Resource("services"), QualifiedResource: api.Resource("services"),
EnableGarbageCollection: opts.EnableGarbageCollection,
DeleteCollectionWorkers: opts.DeleteCollectionWorkers, DeleteCollectionWorkers: opts.DeleteCollectionWorkers,
CreateStrategy: service.Strategy, CreateStrategy: service.Strategy,
......
...@@ -59,6 +59,7 @@ func NewREST(opts generic.RESTOptions) *REST { ...@@ -59,6 +59,7 @@ func NewREST(opts generic.RESTOptions) *REST {
}, },
PredicateFunc: serviceaccount.Matcher, PredicateFunc: serviceaccount.Matcher,
QualifiedResource: api.Resource("serviceaccounts"), QualifiedResource: api.Resource("serviceaccounts"),
EnableGarbageCollection: opts.EnableGarbageCollection,
DeleteCollectionWorkers: opts.DeleteCollectionWorkers, DeleteCollectionWorkers: opts.DeleteCollectionWorkers,
CreateStrategy: serviceaccount.Strategy, CreateStrategy: serviceaccount.Strategy,
......
...@@ -60,6 +60,7 @@ func NewREST(opts generic.RESTOptions) *REST { ...@@ -60,6 +60,7 @@ func NewREST(opts generic.RESTOptions) *REST {
}, },
PredicateFunc: storageclass.MatchStorageClasses, PredicateFunc: storageclass.MatchStorageClasses,
QualifiedResource: storageapi.Resource("storageclasses"), QualifiedResource: storageapi.Resource("storageclasses"),
EnableGarbageCollection: opts.EnableGarbageCollection,
DeleteCollectionWorkers: opts.DeleteCollectionWorkers, DeleteCollectionWorkers: opts.DeleteCollectionWorkers,
CreateStrategy: storageclass.Strategy, CreateStrategy: storageclass.Strategy,
......
...@@ -51,6 +51,7 @@ func NewREST(opts generic.RESTOptions) *REST { ...@@ -51,6 +51,7 @@ func NewREST(opts generic.RESTOptions) *REST {
}, },
PredicateFunc: thirdpartyresource.Matcher, PredicateFunc: thirdpartyresource.Matcher,
QualifiedResource: extensions.Resource("thirdpartyresources"), QualifiedResource: extensions.Resource("thirdpartyresources"),
EnableGarbageCollection: opts.EnableGarbageCollection,
DeleteCollectionWorkers: opts.DeleteCollectionWorkers, DeleteCollectionWorkers: opts.DeleteCollectionWorkers,
CreateStrategy: thirdpartyresource.Strategy, CreateStrategy: thirdpartyresource.Strategy,
UpdateStrategy: thirdpartyresource.Strategy, UpdateStrategy: thirdpartyresource.Strategy,
......
...@@ -54,6 +54,7 @@ func NewREST(opts generic.RESTOptions, group, kind string) *REST { ...@@ -54,6 +54,7 @@ func NewREST(opts generic.RESTOptions, group, kind string) *REST {
}, },
PredicateFunc: thirdpartyresourcedata.Matcher, PredicateFunc: thirdpartyresourcedata.Matcher,
QualifiedResource: extensions.Resource("thirdpartyresourcedatas"), QualifiedResource: extensions.Resource("thirdpartyresourcedatas"),
EnableGarbageCollection: opts.EnableGarbageCollection,
DeleteCollectionWorkers: opts.DeleteCollectionWorkers, DeleteCollectionWorkers: opts.DeleteCollectionWorkers,
CreateStrategy: thirdpartyresourcedata.Strategy, CreateStrategy: thirdpartyresourcedata.Strategy,
UpdateStrategy: thirdpartyresourcedata.Strategy, UpdateStrategy: thirdpartyresourcedata.Strategy,
......
...@@ -38,7 +38,6 @@ import ( ...@@ -38,7 +38,6 @@ import (
"k8s.io/kubernetes/pkg/client/typed/dynamic" "k8s.io/kubernetes/pkg/client/typed/dynamic"
"k8s.io/kubernetes/pkg/controller/garbagecollector" "k8s.io/kubernetes/pkg/controller/garbagecollector"
"k8s.io/kubernetes/pkg/controller/garbagecollector/metaonly" "k8s.io/kubernetes/pkg/controller/garbagecollector/metaonly"
"k8s.io/kubernetes/pkg/registry/generic/registry"
"k8s.io/kubernetes/pkg/runtime/serializer" "k8s.io/kubernetes/pkg/runtime/serializer"
"k8s.io/kubernetes/pkg/types" "k8s.io/kubernetes/pkg/types"
"k8s.io/kubernetes/pkg/util/wait" "k8s.io/kubernetes/pkg/util/wait"
...@@ -121,6 +120,7 @@ func newOwnerRC(name, namespace string) *v1.ReplicationController { ...@@ -121,6 +120,7 @@ func newOwnerRC(name, namespace string) *v1.ReplicationController {
func setup(t *testing.T) (*httptest.Server, *garbagecollector.GarbageCollector, clientset.Interface) { func setup(t *testing.T) (*httptest.Server, *garbagecollector.GarbageCollector, clientset.Interface) {
masterConfig := framework.NewIntegrationTestMasterConfig() masterConfig := framework.NewIntegrationTestMasterConfig()
masterConfig.EnableCoreControllers = false masterConfig.EnableCoreControllers = false
masterConfig.EnableGarbageCollection = true
_, s := framework.RunAMaster(masterConfig) _, s := framework.RunAMaster(masterConfig)
clientSet, err := clientset.NewForConfig(&restclient.Config{Host: s.URL}) clientSet, err := clientset.NewForConfig(&restclient.Config{Host: s.URL})
...@@ -153,9 +153,6 @@ func TestCascadingDeletion(t *testing.T) { ...@@ -153,9 +153,6 @@ func TestCascadingDeletion(t *testing.T) {
ns := framework.CreateTestingNamespace("gc-cascading-deletion", s, t) ns := framework.CreateTestingNamespace("gc-cascading-deletion", s, t)
defer framework.DeleteTestingNamespace(ns, 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) rcClient := clientSet.Core().ReplicationControllers(ns.Name)
podClient := clientSet.Core().Pods(ns.Name) podClient := clientSet.Core().Pods(ns.Name)
...@@ -262,9 +259,6 @@ func TestCreateWithNonExistentOwner(t *testing.T) { ...@@ -262,9 +259,6 @@ func TestCreateWithNonExistentOwner(t *testing.T) {
ns := framework.CreateTestingNamespace("gc-non-existing-owner", s, t) ns := framework.CreateTestingNamespace("gc-non-existing-owner", s, t)
defer framework.DeleteTestingNamespace(ns, 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) podClient := clientSet.Core().Pods(ns.Name)
pod := newPod(garbageCollectedPodName, ns.Name, []v1.OwnerReference{{UID: "doesn't matter", Name: toBeDeletedRCName}}) pod := newPod(garbageCollectedPodName, ns.Name, []v1.OwnerReference{{UID: "doesn't matter", Name: toBeDeletedRCName}})
...@@ -367,9 +361,6 @@ func TestStressingCascadingDeletion(t *testing.T) { ...@@ -367,9 +361,6 @@ func TestStressingCascadingDeletion(t *testing.T) {
ns := framework.CreateTestingNamespace("gc-stressing-cascading-deletion", s, t) ns := framework.CreateTestingNamespace("gc-stressing-cascading-deletion", s, t)
defer framework.DeleteTestingNamespace(ns, s, t) defer framework.DeleteTestingNamespace(ns, s, t)
oldEnableGarbageCollector := registry.EnableGarbageCollector
registry.EnableGarbageCollector = true
defer func() { registry.EnableGarbageCollector = oldEnableGarbageCollector }()
stopCh := make(chan struct{}) stopCh := make(chan struct{})
go gc.Run(5, stopCh) go gc.Run(5, stopCh)
defer close(stopCh) defer close(stopCh)
...@@ -452,9 +443,6 @@ func TestOrphaning(t *testing.T) { ...@@ -452,9 +443,6 @@ func TestOrphaning(t *testing.T) {
ns := framework.CreateTestingNamespace("gc-orphaning", s, t) ns := framework.CreateTestingNamespace("gc-orphaning", s, t)
defer framework.DeleteTestingNamespace(ns, 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) podClient := clientSet.Core().Pods(ns.Name)
rcClient := clientSet.Core().ReplicationControllers(ns.Name) rcClient := clientSet.Core().ReplicationControllers(ns.Name)
// create the RC with the orphan finalizer set // create the RC with the orphan finalizer set
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment