diff --git a/pkg/controller/core/workload_controller.go b/pkg/controller/core/workload_controller.go index 0334ece100..158ccc3c20 100644 --- a/pkg/controller/core/workload_controller.go +++ b/pkg/controller/core/workload_controller.go @@ -257,6 +257,9 @@ func (r *WorkloadReconciler) Reconcile(ctx context.Context, req ctrl.Request) (c } func (r *WorkloadReconciler) isScaledDown(wl *kueue.Workload) bool { + if !features.Enabled(features.ResizableJobs) { + return false + } podSetSize := len(wl.Spec.PodSets) for i := 1; i < podSetSize; i++ { if ptr.Deref(wl.Status.Admission.PodSetAssignments[i].Count, 0) > wl.Spec.PodSets[i].Count { @@ -267,32 +270,34 @@ func (r *WorkloadReconciler) isScaledDown(wl *kueue.Workload) bool { } func (r *WorkloadReconciler) downSizeJobIfNecessary(wl *kueue.Workload, ctx context.Context) error { - statusUpdate := false + updateStatus := false podSetSize := len(wl.Spec.PodSets) for i := 1; i < podSetSize; i++ { - if ptr.Deref(wl.Status.Admission.PodSetAssignments[i].Count, 0) > wl.Spec.PodSets[i].Count { - // Get Resource Requests and Usage values - originalResourceRequests := limitrange.TotalRequests(&wl.Spec.PodSets[i].Template.Spec) - currentAssignedResourceUsage := wl.Status.Admission.PodSetAssignments[i].ResourceUsage - - diff := ptr.Deref(wl.Status.Admission.PodSetAssignments[i].Count, 0) - wl.Spec.PodSets[i].Count - for k := range currentAssignedResourceUsage { - resourceQuantity := originalResourceRequests[k] - resourceQuantity.Mul(int64(diff)) - originalResourceRequests[k] = resourceQuantity - - assignedResourceQuantity := currentAssignedResourceUsage[k] - assignedResourceQuantity.Sub(originalResourceRequests[k]) - currentAssignedResourceUsage[k] = assignedResourceQuantity - } + if ptr.Deref(wl.Status.Admission.PodSetAssignments[i].Count, 0) <= wl.Spec.PodSets[i].Count { + continue + } + // Get Resource Requests and Usage values + originalResourceRequests := limitrange.TotalRequests(&wl.Spec.PodSets[i].Template.Spec) + currentAssignedResourceUsage := wl.Status.Admission.PodSetAssignments[i].ResourceUsage + + diff := ptr.Deref(wl.Status.Admission.PodSetAssignments[i].Count, 0) - wl.Spec.PodSets[i].Count + for k := range currentAssignedResourceUsage { + resourceQuantity := originalResourceRequests[k] + resourceQuantity.Mul(int64(diff)) + originalResourceRequests[k] = resourceQuantity + + assignedResourceQuantity := currentAssignedResourceUsage[k] + assignedResourceQuantity.Sub(originalResourceRequests[k]) + currentAssignedResourceUsage[k] = assignedResourceQuantity + } - wl.Status.Admission.PodSetAssignments[i].Count = ptr.To(wl.Spec.PodSets[i].Count) - wl.Status.Admission.PodSetAssignments[i].ResourceUsage = currentAssignedResourceUsage + wl.Status.Admission.PodSetAssignments[i].Count = ptr.To(wl.Spec.PodSets[i].Count) + wl.Status.Admission.PodSetAssignments[i].ResourceUsage = currentAssignedResourceUsage + + updateStatus = true - statusUpdate = true - } } - if statusUpdate { + if updateStatus { // Update Status workload.SyncAdmittedCondition(wl) if err := workload.ApplyAdmissionStatus(ctx, r.client, wl, true); err != nil { diff --git a/pkg/controller/jobs/raycluster/raycluster_controller.go b/pkg/controller/jobs/raycluster/raycluster_controller.go index 1cafa4b7c2..0ae3f4faee 100644 --- a/pkg/controller/jobs/raycluster/raycluster_controller.go +++ b/pkg/controller/jobs/raycluster/raycluster_controller.go @@ -89,14 +89,16 @@ func (j *RayCluster) GVK() schema.GroupVersionKind { } func (j *RayCluster) IsResizable(wl *kueue.Workload) bool { - if features.Enabled(features.ResizableJobs) { - pods := j.PodSets() - for i := 1; i < len(pods); i++ { - if wl.Spec.PodSets[i].Count > pods[i].Count { - return true - } + if !features.Enabled(features.ResizableJobs) { + return false + } + pods := j.PodSets() + for i := 1; i < len(pods); i++ { + if wl.Spec.PodSets[i].Count > pods[i].Count { + return true } } + return false }