in pkg/scheduler/api/job_info.go [687:713]
func (ji *JobInfo) CheckTaskMinAvailable() bool {
// if job minAvailable is less than sumof(task minAvailable), skip this check
if ji.MinAvailable < ji.TaskMinAvailableTotal {
return true
}
actual := map[TaskID]int32{}
for status, tasks := range ji.TaskStatusIndex {
if AllocatedStatus(status) ||
status == Succeeded ||
status == Pipelined ||
status == Pending {
for _, task := range tasks {
actual[getTaskID(task.Pod)]++
}
}
}
klog.V(4).Infof("job %s/%s actual: %+v, ji.TaskMinAvailable: %+v", ji.Name, ji.Namespace, actual, ji.TaskMinAvailable)
for task, minAvailable := range ji.TaskMinAvailable {
if act, ok := actual[task]; !ok || act < minAvailable {
return false
}
}
return true
}