From 1eb4b6b915e363a4da4a373d758bf539d2b50160 Mon Sep 17 00:00:00 2001 From: Frame Date: Mon, 4 Mar 2024 16:58:59 +0800 Subject: [PATCH] koordlet: revise cgroupRoot param in podsInformer (#1928) Signed-off-by: saintube --- .../statesinformer/impl/states_pods.go | 12 +-- .../statesinformer/impl/states_pods_test.go | 82 +++++++++++++++++++ 2 files changed, 88 insertions(+), 6 deletions(-) diff --git a/pkg/koordlet/statesinformer/impl/states_pods.go b/pkg/koordlet/statesinformer/impl/states_pods.go index 116ec27da..7287ff27e 100644 --- a/pkg/koordlet/statesinformer/impl/states_pods.go +++ b/pkg/koordlet/statesinformer/impl/states_pods.go @@ -60,21 +60,21 @@ type podsInformer struct { } func NewPodsInformer() *podsInformer { - p, err := pleg.NewPLEG(system.Conf.CgroupRootDir) - if err != nil { - klog.Fatalf("failed to create PLEG, %v", err) - } - podsInformer := &podsInformer{ podMap: map[string]*statesinformer.PodMeta{}, podHasSynced: atomic.NewBool(false), - pleg: p, podCreated: make(chan string, 1), } return podsInformer } func (s *podsInformer) Setup(ctx *PluginOption, states *PluginState) { + p, err := pleg.NewPLEG(system.Conf.CgroupRootDir) + if err != nil { + klog.Fatalf("failed to create PLEG, %v", err) + } + s.pleg = p + s.config = ctx.config nodeInformerIf := states.informerPlugins[nodeInformerName] diff --git a/pkg/koordlet/statesinformer/impl/states_pods_test.go b/pkg/koordlet/statesinformer/impl/states_pods_test.go index a61cb4425..aaa6eebbe 100644 --- a/pkg/koordlet/statesinformer/impl/states_pods_test.go +++ b/pkg/koordlet/statesinformer/impl/states_pods_test.go @@ -25,16 +25,19 @@ import ( "testing" "time" + faketopologyclientset "github.com/k8stopologyawareschedwg/noderesourcetopology-api/pkg/generated/clientset/versioned/fake" "github.com/stretchr/testify/assert" "go.uber.org/atomic" corev1 "k8s.io/api/core/v1" "k8s.io/apimachinery/pkg/api/resource" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" + fakeclientset "k8s.io/client-go/kubernetes/fake" "k8s.io/client-go/rest" "k8s.io/client-go/tools/clientcmd" kubeletconfiginternal "k8s.io/kubernetes/pkg/kubelet/apis/config" apiext "github.com/koordinator-sh/koordinator/apis/extension" + fakekoordclientset "github.com/koordinator-sh/koordinator/pkg/client/clientset/versioned/fake" "github.com/koordinator-sh/koordinator/pkg/koordlet/metrics" "github.com/koordinator-sh/koordinator/pkg/koordlet/statesinformer" "github.com/koordinator-sh/koordinator/pkg/koordlet/util/system" @@ -119,6 +122,85 @@ func (t *testErrorKubeletStub) GetKubeletConfiguration() (*kubeletconfiginternal return nil, errors.New("test error") } +func Test_podsInformer(t *testing.T) { + tempCgroupDir := t.TempDir() + type fields struct { + GetCgroupDirFn func(helper *system.FileTestUtil) string + } + type args struct { + ctx *PluginOption + states *PluginState + } + tests := []struct { + name string + fields fields + args args + }{ + { + name: "default config", + fields: fields{ + GetCgroupDirFn: nil, + }, + args: args{ + ctx: &PluginOption{ + config: NewDefaultConfig(), + KubeClient: fakeclientset.NewSimpleClientset(), + KoordClient: fakekoordclientset.NewSimpleClientset(), + TopoClient: faketopologyclientset.NewSimpleClientset(), + NodeName: "test-node", + }, + states: &PluginState{ + informerPlugins: map[PluginName]informerPlugin{ + nodeInformerName: NewNodeInformer(), + }, + }, + }, + }, + { + name: "change cgroup root", + fields: fields{ + GetCgroupDirFn: func(helper *system.FileTestUtil) string { + return tempCgroupDir + }, + }, + args: args{ + ctx: &PluginOption{ + config: NewDefaultConfig(), + KubeClient: fakeclientset.NewSimpleClientset(), + KoordClient: fakekoordclientset.NewSimpleClientset(), + TopoClient: faketopologyclientset.NewSimpleClientset(), + NodeName: "test-node", + }, + states: &PluginState{ + informerPlugins: map[PluginName]informerPlugin{ + nodeInformerName: NewNodeInformer(), + }, + }, + }, + }, + } + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + helper := system.NewFileTestUtil(t) + oldCgroupRoot := system.Conf.CgroupRootDir + if tt.fields.GetCgroupDirFn != nil { + helper.SetConf(func(conf *system.Config) { + conf.CgroupRootDir = tt.fields.GetCgroupDirFn(helper) + }, func(conf *system.Config) { + conf.CgroupRootDir = oldCgroupRoot + }) + } + defer helper.Cleanup() + pi := NewPodsInformer() + assert.NotNil(t, pi) + assert.NotPanics(t, func() { + pi.Setup(tt.args.ctx, tt.args.states) + }) + assert.NotNil(t, pi.pleg) + }) + } +} + func Test_statesInformer_syncPods(t *testing.T) { stopCh := make(chan struct{}, 1) defer close(stopCh)