in pkg/scheduler/preemption/preemption.go [324:353]
func workloadFits(wlReq cache.FlavorResourceQuantities, cq *cache.ClusterQueue, allowBorrowing bool) bool {
for _, rg := range cq.ResourceGroups {
for _, flvQuotas := range rg.Flavors {
flvReq, found := wlReq[flvQuotas.Name]
if !found {
// Workload doesn't request this flavor.
continue
}
cqResUsage := cq.Usage[flvQuotas.Name]
var cohortResUsage, cohortResRequestable map[corev1.ResourceName]int64
if cq.Cohort != nil {
cohortResUsage = cq.Cohort.Usage[flvQuotas.Name]
cohortResRequestable = cq.Cohort.RequestableResources[flvQuotas.Name]
}
for rName, rReq := range flvReq {
limit := flvQuotas.Resources[rName].Nominal
if flvQuotas.Resources[rName].BorrowingLimit != nil && allowBorrowing {
limit += *flvQuotas.Resources[rName].BorrowingLimit
}
if cqResUsage[rName]+rReq > limit {
return false
}
if cq.Cohort != nil && cohortResUsage[rName]+rReq > cohortResRequestable[rName] {
return false
}
}
}
}
return true
}