diff --git a/pkg/scheduler/backend/workloadmanager/podgroupstate.go b/pkg/scheduler/backend/workloadmanager/podgroupstate.go index 513f0dc16d7..18e2b5c0eb2 100644 --- a/pkg/scheduler/backend/workloadmanager/podgroupstate.go +++ b/pkg/scheduler/backend/workloadmanager/podgroupstate.go @@ -17,12 +17,14 @@ limitations under the License. package workloadmanager import ( + "fmt" "sync" "time" v1 "k8s.io/api/core/v1" "k8s.io/apimachinery/pkg/types" "k8s.io/apimachinery/pkg/util/sets" + "k8s.io/klog/v2" "k8s.io/utils/ptr" ) @@ -39,6 +41,19 @@ type podGroupKey struct { replicaKey string } +func (pgk podGroupKey) GetName() string { + if pgk.replicaKey == "" { + return fmt.Sprintf("%s-%s", pgk.workloadName, pgk.podGroupName) + } + return fmt.Sprintf("%s-%s-%s", pgk.workloadName, pgk.podGroupName, pgk.replicaKey) +} + +func (pgk podGroupKey) GetNamespace() string { + return pgk.namespace +} + +var _ klog.KMetadata = &podGroupKey{} + func newPodGroupKey(namespace string, workloadRef *v1.WorkloadReference) podGroupKey { return podGroupKey{ namespace: namespace, diff --git a/pkg/scheduler/backend/workloadmanager/workloadmanager.go b/pkg/scheduler/backend/workloadmanager/workloadmanager.go index f3a69e05f5e..9664d041d41 100644 --- a/pkg/scheduler/backend/workloadmanager/workloadmanager.go +++ b/pkg/scheduler/backend/workloadmanager/workloadmanager.go @@ -21,6 +21,7 @@ import ( "sync" v1 "k8s.io/api/core/v1" + "k8s.io/klog/v2" fwk "k8s.io/kube-scheduler/framework" ) @@ -46,12 +47,15 @@ type workloadManager struct { // podGroupStates stores the runtime state for each known pod group. podGroupStates map[podGroupKey]*podGroupState + + logger klog.Logger } // New initializes a new workload manager and returns it. -func New() *workloadManager { +func New(logger klog.Logger) *workloadManager { return &workloadManager{ podGroupStates: make(map[podGroupKey]*podGroupState), + logger: logger, } } @@ -89,6 +93,7 @@ func (wm *workloadManager) UpdatePod(oldPod, newPod *v1.Pod) { state = newPodGroupState() wm.podGroupStates[key] = state state.addPod(newPod) + wm.logger.Error(nil, "UpdatePod found no existing PodGroup for pod. Created new PodGroup for the pod", "pod", klog.KObj(newPod), "podGroupKey", klog.KObj(key)) return } state.updatePod(oldPod, newPod) diff --git a/pkg/scheduler/backend/workloadmanager/workloadmanager_test.go b/pkg/scheduler/backend/workloadmanager/workloadmanager_test.go index 8596c36a38c..ae758628fc8 100644 --- a/pkg/scheduler/backend/workloadmanager/workloadmanager_test.go +++ b/pkg/scheduler/backend/workloadmanager/workloadmanager_test.go @@ -20,6 +20,7 @@ import ( "testing" v1 "k8s.io/api/core/v1" + "k8s.io/klog/v2/ktesting" st "k8s.io/kubernetes/pkg/scheduler/testing" ) @@ -76,7 +77,9 @@ func TestWorkloadManager_AddPod(t *testing.T) { for _, tt := range tests { t.Run(tt.name, func(t *testing.T) { - manager := New() + logger, _ := ktesting.NewTestContext(t) + + manager := New(logger) for _, p := range tt.initPods { manager.AddPod(p) } @@ -178,7 +181,9 @@ func TestWorkloadManager_UpdatePod(t *testing.T) { for _, tt := range tests { t.Run(tt.name, func(t *testing.T) { - manager := New() + logger, _ := ktesting.NewTestContext(t) + + manager := New(logger) manager.AddPod(tt.oldPod) if tt.assumePod { @@ -250,7 +255,9 @@ func TestWorkloadManager_DeletePod(t *testing.T) { for _, tt := range tests { t.Run(tt.name, func(t *testing.T) { - manager := New() + logger, _ := ktesting.NewTestContext(t) + + manager := New(logger) for _, p := range tt.initPods { manager.AddPod(p) } diff --git a/pkg/scheduler/framework/plugins/gangscheduling/gangscheduling_test.go b/pkg/scheduler/framework/plugins/gangscheduling/gangscheduling_test.go index 39db244116e..fd2ed5f5eec 100644 --- a/pkg/scheduler/framework/plugins/gangscheduling/gangscheduling_test.go +++ b/pkg/scheduler/framework/plugins/gangscheduling/gangscheduling_test.go @@ -17,7 +17,6 @@ limitations under the License. package gangscheduling import ( - "context" "testing" "github.com/google/go-cmp/cmp" @@ -260,11 +259,8 @@ func TestGangSchedulingFlow(t *testing.T) { for _, tt := range tests { t.Run(tt.name, func(t *testing.T) { - _, ctx := ktesting.NewTestContext(t) - ctx, cancel := context.WithCancel(ctx) - defer cancel() - - manager := workloadmanager.New() + logger, ctx := ktesting.NewTestContext(t) + manager := workloadmanager.New(logger) informerFactory := informers.NewSharedInformerFactory(fake.NewClientset(), 0) workloadInformer := informerFactory.Scheduling().V1alpha1().Workloads() diff --git a/pkg/scheduler/scheduler.go b/pkg/scheduler/scheduler.go index 88f5ab11758..80795a756c3 100644 --- a/pkg/scheduler/scheduler.go +++ b/pkg/scheduler/scheduler.go @@ -350,7 +350,7 @@ func New(ctx context.Context, } var workloadManager internalworkloadmanager.WorkloadManager if feature.DefaultFeatureGate.Enabled(features.GenericWorkload) { - workloadManager = internalworkloadmanager.New() + workloadManager = internalworkloadmanager.New(logger) } profiles, err := profile.NewMap(ctx, options.profiles, registry, recorderFactory,