GC doesn't have to create monitors in the constructor

This commit is contained in:
Lukasz Szaszkiewicz 2020-06-05 12:18:53 +02:00
parent b6bdd64b10
commit 50db32cf8c
5 changed files with 5 additions and 22 deletions

View File

@ -118,7 +118,6 @@ go_library(
"//staging/src/k8s.io/apiserver/pkg/server/mux:go_default_library", "//staging/src/k8s.io/apiserver/pkg/server/mux:go_default_library",
"//staging/src/k8s.io/apiserver/pkg/util/feature:go_default_library", "//staging/src/k8s.io/apiserver/pkg/util/feature:go_default_library",
"//staging/src/k8s.io/client-go/discovery/cached:go_default_library", "//staging/src/k8s.io/client-go/discovery/cached:go_default_library",
"//staging/src/k8s.io/client-go/discovery/cached/memory:go_default_library",
"//staging/src/k8s.io/client-go/dynamic:go_default_library", "//staging/src/k8s.io/client-go/dynamic:go_default_library",
"//staging/src/k8s.io/client-go/informers:go_default_library", "//staging/src/k8s.io/client-go/informers:go_default_library",
"//staging/src/k8s.io/client-go/informers/storage/v1:go_default_library", "//staging/src/k8s.io/client-go/informers/storage/v1:go_default_library",

View File

@ -33,7 +33,6 @@ import (
v1 "k8s.io/api/core/v1" v1 "k8s.io/api/core/v1"
"k8s.io/apimachinery/pkg/runtime/schema" "k8s.io/apimachinery/pkg/runtime/schema"
utilfeature "k8s.io/apiserver/pkg/util/feature" utilfeature "k8s.io/apiserver/pkg/util/feature"
cacheddiscovery "k8s.io/client-go/discovery/cached/memory"
storagev1informer "k8s.io/client-go/informers/storage/v1" storagev1informer "k8s.io/client-go/informers/storage/v1"
clientset "k8s.io/client-go/kubernetes" clientset "k8s.io/client-go/kubernetes"
"k8s.io/client-go/metadata" "k8s.io/client-go/metadata"
@ -500,7 +499,6 @@ func startGarbageCollectorController(ctx ControllerContext) (http.Handler, bool,
} }
gcClientset := ctx.ClientBuilder.ClientOrDie("generic-garbage-collector") gcClientset := ctx.ClientBuilder.ClientOrDie("generic-garbage-collector")
discoveryClient := cacheddiscovery.NewMemCacheClient(gcClientset.Discovery())
config := ctx.ClientBuilder.ConfigOrDie("generic-garbage-collector") config := ctx.ClientBuilder.ConfigOrDie("generic-garbage-collector")
metadataClient, err := metadata.NewForConfig(config) metadataClient, err := metadata.NewForConfig(config)
@ -508,8 +506,6 @@ func startGarbageCollectorController(ctx ControllerContext) (http.Handler, bool,
return nil, true, err return nil, true, err
} }
// Get an initial set of deletable resources to prime the garbage collector.
deletableResources := garbagecollector.GetDeletableResources(discoveryClient)
ignoredResources := make(map[schema.GroupResource]struct{}) ignoredResources := make(map[schema.GroupResource]struct{})
for _, r := range ctx.ComponentConfig.GarbageCollectorController.GCIgnoredResources { for _, r := range ctx.ComponentConfig.GarbageCollectorController.GCIgnoredResources {
ignoredResources[schema.GroupResource{Group: r.Group, Resource: r.Resource}] = struct{}{} ignoredResources[schema.GroupResource{Group: r.Group, Resource: r.Resource}] = struct{}{}
@ -517,7 +513,6 @@ func startGarbageCollectorController(ctx ControllerContext) (http.Handler, bool,
garbageCollector, err := garbagecollector.NewGarbageCollector( garbageCollector, err := garbagecollector.NewGarbageCollector(
metadataClient, metadataClient,
ctx.RESTMapper, ctx.RESTMapper,
deletableResources,
ignoredResources, ignoredResources,
ctx.ObjectOrMetadataInformerFactory, ctx.ObjectOrMetadataInformerFactory,
ctx.InformersStarted, ctx.InformersStarted,

View File

@ -76,7 +76,6 @@ type GarbageCollector struct {
func NewGarbageCollector( func NewGarbageCollector(
metadataClient metadata.Interface, metadataClient metadata.Interface,
mapper resettableRESTMapper, mapper resettableRESTMapper,
deletableResources map[schema.GroupVersionResource]struct{},
ignoredResources map[schema.GroupResource]struct{}, ignoredResources map[schema.GroupResource]struct{},
sharedInformers controller.InformerFactory, sharedInformers controller.InformerFactory,
informersStarted <-chan struct{}, informersStarted <-chan struct{},
@ -91,7 +90,7 @@ func NewGarbageCollector(
attemptToOrphan: attemptToOrphan, attemptToOrphan: attemptToOrphan,
absentOwnerCache: absentOwnerCache, absentOwnerCache: absentOwnerCache,
} }
gb := &GraphBuilder{ gc.dependencyGraphBuilder = &GraphBuilder{
metadataClient: metadataClient, metadataClient: metadataClient,
informersStarted: informersStarted, informersStarted: informersStarted,
restMapper: mapper, restMapper: mapper,
@ -105,10 +104,6 @@ func NewGarbageCollector(
sharedInformers: sharedInformers, sharedInformers: sharedInformers,
ignoredResources: ignoredResources, ignoredResources: ignoredResources,
} }
if err := gb.syncMonitors(deletableResources); err != nil {
utilruntime.HandleError(fmt.Errorf("failed to sync all monitors: %v", err))
}
gc.dependencyGraphBuilder = gb
return gc, nil return gc, nil
} }

View File

@ -81,12 +81,12 @@ func TestGarbageCollectorConstruction(t *testing.T) {
// construction will not fail. // construction will not fail.
alwaysStarted := make(chan struct{}) alwaysStarted := make(chan struct{})
close(alwaysStarted) close(alwaysStarted)
gc, err := NewGarbageCollector(metadataClient, rm, twoResources, map[schema.GroupResource]struct{}{}, gc, err := NewGarbageCollector(metadataClient, rm, map[schema.GroupResource]struct{}{},
controller.NewInformerFactory(sharedInformers, metadataInformers), alwaysStarted) controller.NewInformerFactory(sharedInformers, metadataInformers), alwaysStarted)
if err != nil { if err != nil {
t.Fatal(err) t.Fatal(err)
} }
assert.Equal(t, 1, len(gc.dependencyGraphBuilder.monitors)) assert.Equal(t, 0, len(gc.dependencyGraphBuilder.monitors))
// Make sure resource monitor syncing creates and stops resource monitors. // Make sure resource monitor syncing creates and stops resource monitors.
tweakableRM.Add(schema.GroupVersionKind{Group: "tpr.io", Version: "v1", Kind: "unknown"}, nil) tweakableRM.Add(schema.GroupVersionKind{Group: "tpr.io", Version: "v1", Kind: "unknown"}, nil)
@ -198,12 +198,11 @@ func setupGC(t *testing.T, config *restclient.Config) garbageCollector {
t.Fatal(err) t.Fatal(err)
} }
podResource := map[schema.GroupVersionResource]struct{}{{Version: "v1", Resource: "pods"}: {}}
client := fake.NewSimpleClientset() client := fake.NewSimpleClientset()
sharedInformers := informers.NewSharedInformerFactory(client, 0) sharedInformers := informers.NewSharedInformerFactory(client, 0)
alwaysStarted := make(chan struct{}) alwaysStarted := make(chan struct{})
close(alwaysStarted) close(alwaysStarted)
gc, err := NewGarbageCollector(metadataClient, &testRESTMapper{testrestmapper.TestOnlyStaticRESTMapper(legacyscheme.Scheme)}, podResource, ignoredResources, sharedInformers, alwaysStarted) gc, err := NewGarbageCollector(metadataClient, &testRESTMapper{testrestmapper.TestOnlyStaticRESTMapper(legacyscheme.Scheme)}, ignoredResources, sharedInformers, alwaysStarted)
if err != nil { if err != nil {
t.Fatal(err) t.Fatal(err)
} }
@ -827,13 +826,10 @@ func TestGarbageCollectorSync(t *testing.T) {
t.Fatal(err) t.Fatal(err)
} }
podResource := map[schema.GroupVersionResource]struct{}{
{Group: "", Version: "v1", Resource: "pods"}: {},
}
sharedInformers := informers.NewSharedInformerFactory(client, 0) sharedInformers := informers.NewSharedInformerFactory(client, 0)
alwaysStarted := make(chan struct{}) alwaysStarted := make(chan struct{})
close(alwaysStarted) close(alwaysStarted)
gc, err := NewGarbageCollector(metadataClient, rm, podResource, map[schema.GroupResource]struct{}{}, sharedInformers, alwaysStarted) gc, err := NewGarbageCollector(metadataClient, rm, map[schema.GroupResource]struct{}{}, sharedInformers, alwaysStarted)
if err != nil { if err != nil {
t.Fatal(err) t.Fatal(err)
} }

View File

@ -232,7 +232,6 @@ func setupWithServer(t *testing.T, result *kubeapiservertesting.TestServer, work
discoveryClient := cacheddiscovery.NewMemCacheClient(clientSet.Discovery()) discoveryClient := cacheddiscovery.NewMemCacheClient(clientSet.Discovery())
restMapper := restmapper.NewDeferredDiscoveryRESTMapper(discoveryClient) restMapper := restmapper.NewDeferredDiscoveryRESTMapper(discoveryClient)
restMapper.Reset() restMapper.Reset()
deletableResources := garbagecollector.GetDeletableResources(discoveryClient)
config := *result.ClientConfig config := *result.ClientConfig
metadataClient, err := metadata.NewForConfig(&config) metadataClient, err := metadata.NewForConfig(&config)
if err != nil { if err != nil {
@ -249,7 +248,6 @@ func setupWithServer(t *testing.T, result *kubeapiservertesting.TestServer, work
gc, err := garbagecollector.NewGarbageCollector( gc, err := garbagecollector.NewGarbageCollector(
metadataClient, metadataClient,
restMapper, restMapper,
deletableResources,
garbagecollector.DefaultIgnoredResources(), garbagecollector.DefaultIgnoredResources(),
controller.NewInformerFactory(sharedInformers, metadataInformers), controller.NewInformerFactory(sharedInformers, metadataInformers),
alwaysStarted, alwaysStarted,