From c0981c463f955d04e1242e58c2089fc060fc8156 Mon Sep 17 00:00:00 2001 From: Dominik Pajak Date: Fri, 25 Jul 2025 08:39:15 +0000 Subject: [PATCH 1/3] Followup --- .../flavorassigner/flavorassigner.go | 7 +------ pkg/scheduler/preemption/preemption_oracle.go | 21 ++++++++++--------- 2 files changed, 12 insertions(+), 16 deletions(-) diff --git a/pkg/scheduler/flavorassigner/flavorassigner.go b/pkg/scheduler/flavorassigner/flavorassigner.go index 59fca06a3b2..c5fd89e8343 100644 --- a/pkg/scheduler/flavorassigner/flavorassigner.go +++ b/pkg/scheduler/flavorassigner/flavorassigner.go @@ -327,11 +327,6 @@ const ( fit ) -func preferToAvoidBorrowing(fungiblityConfig kueue.FlavorFungibility) bool { - return (fungiblityConfig.WhenCanBorrow == kueue.TryNextFlavor && fungiblityConfig.WhenCanPreempt == kueue.Preempt) || - (fungiblityConfig.WhenCanBorrow == kueue.TryNextFlavor && fungiblityConfig.WhenCanPreempt == kueue.TryNextFlavor) -} - // isPreferred returns true if mode a is better than b according to the selected policy func isPreferred(a, b granularMode, fungiblityConfig kueue.FlavorFungibility) bool { if a.preemptionMode == noFit { @@ -349,7 +344,7 @@ func isPreferred(a, b granularMode, fungiblityConfig kueue.FlavorFungibility) bo } } - if preferToAvoidBorrowing(fungiblityConfig) { + if fungiblityConfig.WhenCanBorrow == kueue.TryNextFlavor { if a.needsBorrowing != b.needsBorrowing { return !a.needsBorrowing } diff --git a/pkg/scheduler/preemption/preemption_oracle.go b/pkg/scheduler/preemption/preemption_oracle.go index dd91128bbae..a3a39ef136c 100644 --- a/pkg/scheduler/preemption/preemption_oracle.go +++ b/pkg/scheduler/preemption/preemption_oracle.go @@ -48,18 +48,19 @@ func (p *PreemptionOracle) SimulatePreemption(log logr.Logger, cq *cache.Cluster workloadUsage: workload.Usage{Quota: resources.FlavorResourceQuantities{fr: quantity}}, }) - if len(candidates) > 0 { - workloadsToPreempt := make([]*workload.Info, len(candidates)) - for i, c := range candidates { - workloadsToPreempt[i] = c.WorkloadInfo - } - revertRemoval := cq.SimulateWorkloadRemoval(workloadsToPreempt) - defer revertRemoval() - } - borrowAfterPreemptions, _ := classical.FindHeightOfLowestSubtreeThatFits(cq, fr, quantity) if len(candidates) == 0 { - return preemptioncommon.NoCandidates, borrowAfterPreemptions + borrow, _ := classical.FindHeightOfLowestSubtreeThatFits(cq, fr, quantity) + return preemptioncommon.NoCandidates, borrow } + + workloadsToPreempt := make([]*workload.Info, len(candidates)) + for i, c := range candidates { + workloadsToPreempt[i] = c.WorkloadInfo + } + revertRemoval := cq.SimulateWorkloadRemoval(workloadsToPreempt) + defer revertRemoval() + borrowAfterPreemptions, _ := classical.FindHeightOfLowestSubtreeThatFits(cq, fr, quantity) + for _, candidate := range candidates { if candidate.WorkloadInfo.ClusterQueue == cq.Name { return preemptioncommon.Preempt, borrowAfterPreemptions From c449ab5f65ce5c575ba2112ddfd17f995094bdb7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Dominik=20Paj=C4=85k?= Date: Fri, 25 Jul 2025 11:02:21 +0200 Subject: [PATCH 2/3] Update pkg/scheduler/preemption/preemption_oracle.go Co-authored-by: gabesaba <15304068+gabesaba@users.noreply.github.com> --- pkg/scheduler/preemption/preemption_oracle.go | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/pkg/scheduler/preemption/preemption_oracle.go b/pkg/scheduler/preemption/preemption_oracle.go index a3a39ef136c..6632075f5bb 100644 --- a/pkg/scheduler/preemption/preemption_oracle.go +++ b/pkg/scheduler/preemption/preemption_oracle.go @@ -58,8 +58,9 @@ func (p *PreemptionOracle) SimulatePreemption(log logr.Logger, cq *cache.Cluster workloadsToPreempt[i] = c.WorkloadInfo } revertRemoval := cq.SimulateWorkloadRemoval(workloadsToPreempt) - defer revertRemoval() borrowAfterPreemptions, _ := classical.FindHeightOfLowestSubtreeThatFits(cq, fr, quantity) + revertRemoval() + for _, candidate := range candidates { if candidate.WorkloadInfo.ClusterQueue == cq.Name { From 1be6c96dcd5b96b5686ad6c27f4fd4243b624e3c Mon Sep 17 00:00:00 2001 From: Dominik Pajak Date: Fri, 25 Jul 2025 09:04:08 +0000 Subject: [PATCH 3/3] Fix whitespaces --- pkg/scheduler/preemption/preemption_oracle.go | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/pkg/scheduler/preemption/preemption_oracle.go b/pkg/scheduler/preemption/preemption_oracle.go index 6632075f5bb..0ea3d4af6c0 100644 --- a/pkg/scheduler/preemption/preemption_oracle.go +++ b/pkg/scheduler/preemption/preemption_oracle.go @@ -59,8 +59,7 @@ func (p *PreemptionOracle) SimulatePreemption(log logr.Logger, cq *cache.Cluster } revertRemoval := cq.SimulateWorkloadRemoval(workloadsToPreempt) borrowAfterPreemptions, _ := classical.FindHeightOfLowestSubtreeThatFits(cq, fr, quantity) - revertRemoval() - + revertRemoval() for _, candidate := range candidates { if candidate.WorkloadInfo.ClusterQueue == cq.Name {