Add logging error when UpdatePod finds no existing PodGroup with the pod to update

This commit is contained in:
Ania Borowiec
2026-01-23 09:31:42 +00:00
parent 028015267e
commit 48c4605408
5 changed files with 34 additions and 11 deletions

View File

@@ -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,

View File

@@ -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)

View File

@@ -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)
}

View File

@@ -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()

View File

@@ -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,