mirror of
https://github.com/k3s-io/kubernetes.git
synced 2025-08-06 02:34:03 +00:00
Merge pull request #32533 from smarterclayton/rest_options_gc
Automatic merge from submit-queue EnableGarbageCollection should be part of generic.RESTOptions
This commit is contained in:
commit
6946cce099
@ -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) {
|
|||||||
"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(®istry.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) {
|
|||||||
},
|
},
|
||||||
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,
|
||||||
|
@ -75,6 +75,7 @@ type Config struct {
|
|||||||
EnableIndex bool
|
EnableIndex bool
|
||||||
EnableProfiling bool
|
EnableProfiling bool
|
||||||
EnableWatchCache bool
|
EnableWatchCache bool
|
||||||
|
EnableGarbageCollection bool
|
||||||
APIPrefix string
|
APIPrefix string
|
||||||
APIGroupPrefix string
|
APIGroupPrefix string
|
||||||
CorsAllowedOriginList []string
|
CorsAllowedOriginList []string
|
||||||
@ -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 {
|
|||||||
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 {
|
|||||||
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) {
|
|||||||
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
|
|||||||
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) {
|
|||||||
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 {
|
|||||||
},
|
},
|
||||||
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 {
|
|||||||
},
|
},
|
||||||
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 {
|
|||||||
|
|
||||||
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) {
|
|||||||
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) {
|
|||||||
// 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) {
|
|||||||
// 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 {
|
|||||||
},
|
},
|
||||||
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,
|
||||||
|
@ -53,6 +53,8 @@ func NewREST(opts generic.RESTOptions, ttl uint64) *REST {
|
|||||||
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,
|
||||||
|
@ -22,7 +22,8 @@ import "k8s.io/kubernetes/pkg/storage/storagebackend"
|
|||||||
type RESTOptions struct {
|
type RESTOptions struct {
|
||||||
StorageConfig *storagebackend.Config
|
StorageConfig *storagebackend.Config
|
||||||
Decorator StorageDecorator
|
Decorator StorageDecorator
|
||||||
DeleteCollectionWorkers int
|
|
||||||
|
|
||||||
|
EnableGarbageCollection bool
|
||||||
|
DeleteCollectionWorkers int
|
||||||
ResourcePrefix string
|
ResourcePrefix string
|
||||||
}
|
}
|
||||||
|
@ -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 {
|
|||||||
// 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
|
|||||||
// 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)
|
|||||||
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) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
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) {
|
|||||||
|
|
||||||
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) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
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) {
|
|||||||
|
|
||||||
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) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
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) {
|
|||||||
|
|
||||||
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) {
|
|||||||
// 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) {
|
|||||||
// 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) {
|
|||||||
// 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 {
|
|||||||
},
|
},
|
||||||
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) {
|
|||||||
},
|
},
|
||||||
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 {
|
|||||||
// 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
|
|||||||
},
|
},
|
||||||
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) {
|
|||||||
},
|
},
|
||||||
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) {
|
|||||||
},
|
},
|
||||||
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) {
|
|||||||
// 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
|
|||||||
},
|
},
|
||||||
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) {
|
|||||||
// 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 {
|
|||||||
},
|
},
|
||||||
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 {
|
|||||||
},
|
},
|
||||||
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) {
|
|||||||
// 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) {
|
|||||||
},
|
},
|
||||||
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 {
|
|||||||
},
|
},
|
||||||
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 {
|
|||||||
},
|
},
|
||||||
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) {
|
|||||||
// 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 {
|
|||||||
},
|
},
|
||||||
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) {
|
|||||||
},
|
},
|
||||||
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 {
|
|||||||
},
|
},
|
||||||
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 {
|
|||||||
},
|
},
|
||||||
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 {
|
|||||||
},
|
},
|
||||||
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 {
|
|||||||
},
|
},
|
||||||
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 (
|
|||||||
"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 {
|
|||||||
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) {
|
|||||||
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) {
|
|||||||
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) {
|
|||||||
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) {
|
|||||||
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
|
||||||
|
Loading…
Reference in New Issue
Block a user