diff --git a/pkg/controller/admissionchecks/multikueue/workload_test.go b/pkg/controller/admissionchecks/multikueue/workload_test.go index 8f3417d70f..ff42469ebb 100644 --- a/pkg/controller/admissionchecks/multikueue/workload_test.go +++ b/pkg/controller/admissionchecks/multikueue/workload_test.go @@ -64,7 +64,7 @@ func TestWlReconcile(t *testing.T) { } baseWorkloadBuilder := utiltesting.MakeWorkload("wl1", TestNamespace) - baseJobBuilder := testingjob.MakeJob("job1", TestNamespace) + baseJobBuilder := testingjob.MakeJob("job1", TestNamespace).Suspend(false) baseJobManagedByKueueBuilder := baseJobBuilder.Clone().ManagedBy(kueue.MultiKueueControllerName) cases := map[string]struct { diff --git a/pkg/controller/jobs/job/job_multikueue_adapter.go b/pkg/controller/jobs/job/job_multikueue_adapter.go index a2b254dca3..a39a3f2b91 100644 --- a/pkg/controller/jobs/job/job_multikueue_adapter.go +++ b/pkg/controller/jobs/job/job_multikueue_adapter.go @@ -28,6 +28,7 @@ import ( "k8s.io/apimachinery/pkg/types" "k8s.io/klog/v2" "k8s.io/utils/ptr" + ctrl "sigs.k8s.io/controller-runtime" "sigs.k8s.io/controller-runtime/pkg/client" kueue "sigs.k8s.io/kueue/apis/kueue/v1beta1" @@ -43,6 +44,8 @@ type multikueueAdapter struct{} var _ jobframework.MultiKueueAdapter = (*multikueueAdapter)(nil) func (b *multikueueAdapter) SyncJob(ctx context.Context, localClient client.Client, remoteClient client.Client, key types.NamespacedName, workloadName, origin string) error { + log := ctrl.LoggerFrom(ctx) + localJob := batchv1.Job{} err := localClient.Get(ctx, key, &localJob) if err != nil { @@ -57,6 +60,12 @@ func (b *multikueueAdapter) SyncJob(ctx context.Context, localClient client.Clie // the remote job exists if err == nil { + if fromObject(&localJob).IsSuspended() { + // Ensure the job is unsuspended before updating its status; otherwise, it will fail when patching the spec. + log.V(2).Info("Skipping the sync since the local job is still suspended") + return nil + } + if features.Enabled(features.MultiKueueBatchJobWithManagedBy) { return clientutil.PatchStatus(ctx, localClient, &localJob, func() (bool, error) { localJob.Status = remoteJob.Status diff --git a/pkg/controller/jobs/job/job_multikueue_adapter_test.go b/pkg/controller/jobs/job/job_multikueue_adapter_test.go index 1b8d863774..590e6d6f14 100644 --- a/pkg/controller/jobs/job/job_multikueue_adapter_test.go +++ b/pkg/controller/jobs/job/job_multikueue_adapter_test.go @@ -48,7 +48,7 @@ func TestMultikueueAdapter(t *testing.T) { cmpopts.EquateEmpty(), } - baseJobBuilder := utiltestingjob.MakeJob("job1", TestNamespace) + baseJobBuilder := utiltestingjob.MakeJob("job1", TestNamespace).Suspend(false) baseJobManagedByKueueBuilder := baseJobBuilder.Clone().ManagedBy(kueue.MultiKueueControllerName) cases := map[string]struct {