Skip to content

Commit 7967b96

Browse files
committed
MinRuntime
1 parent 0ced9aa commit 7967b96

File tree

1 file changed

+28
-6
lines changed

1 file changed

+28
-6
lines changed

pkg/scheduler/plugins/minruntime/minruntime.go

Lines changed: 28 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -126,9 +126,8 @@ func (mr *minruntimePlugin) reclaimScenarioValidatorFn(scenario api.ScenarioInfo
126126
if !protected {
127127
continue
128128
}
129-
numVictimTasks := int32(len(victimInfo.Tasks))
130-
currentlyRunning := victimInfo.Job.GetActivelyRunningTasksCount()
131-
if victimInfo.Job.GetDefaultMinAvailable() > currentlyRunning-numVictimTasks {
129+
130+
if !validVictimForMinAvailable(victimInfo) {
132131
return false
133132
}
134133
}
@@ -145,9 +144,8 @@ func (mr *minruntimePlugin) preemptScenarioValidatorFn(scenario api.ScenarioInfo
145144
if !protected {
146145
continue
147146
}
148-
numVictimTasks := int32(len(victimInfo.Tasks))
149-
currentlyRunning := victimInfo.Job.GetActivelyRunningTasksCount()
150-
if victimInfo.Job.GetDefaultMinAvailable() > currentlyRunning-numVictimTasks {
147+
148+
if !validVictimForMinAvailable(victimInfo) {
151149
return false
152150
}
153151
}
@@ -212,3 +210,27 @@ func (mr *minruntimePlugin) cacheReclaimProtection(pendingJob *podgroup_info.Pod
212210
}
213211
mr.reclaimProtectionCache[pendingJob.UID][victim.UID] = protected
214212
}
213+
214+
func validVictimForMinAvailable(victimInfo *api.VictimInfo) bool {
215+
numVictimTasksPerSubGroup := map[string]int32{}
216+
for _, task := range victimInfo.Tasks {
217+
subGroupName := podgroup_info.DefaultSubGroup
218+
if task.SubGroupName != "" {
219+
subGroupName = task.SubGroupName
220+
}
221+
numVictimTasksPerSubGroup[subGroupName]++
222+
}
223+
224+
numCurrentlyRunningSubGroup := map[string]int32{}
225+
for subGroupName := range numVictimTasksPerSubGroup {
226+
numCurrentlyRunningSubGroup[subGroupName] = int32(victimInfo.Job.GetSubGroups()[subGroupName].GetNumActiveUsedTasks())
227+
}
228+
229+
for subGroupName, numVictims := range numVictimTasksPerSubGroup {
230+
subGroupCurrentlyRunning := numCurrentlyRunningSubGroup[subGroupName]
231+
if victimInfo.Job.GetSubGroups()[subGroupName].GetMinAvailable() > subGroupCurrentlyRunning-numVictims {
232+
return false
233+
}
234+
}
235+
return true
236+
}

0 commit comments

Comments
 (0)