@@ -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