mirror of
https://github.com/k3s-io/kubernetes.git
synced 2025-07-24 20:24:09 +00:00
GC doesn't have to create monitors in the constructor
This commit is contained in:
parent
b6bdd64b10
commit
50db32cf8c
@ -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",
|
||||||
|
@ -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,
|
||||||
|
@ -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
|
||||||
}
|
}
|
||||||
|
@ -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)
|
||||||
}
|
}
|
||||||
|
@ -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,
|
||||||
|
Loading…
Reference in New Issue
Block a user