@@ -223,6 +223,30 @@ def on_task_exit(self, task):
223223 self ._remove_from_running (task )
224224 self ._completed_tasks .append (task )
225225
226+ def _setup_task (self , task ):
227+ try :
228+ if self .deps_failed (task ):
229+ exc = TaskDependencyError ('dependencies failed' )
230+ task .fail ((type (exc ), exc , None ))
231+ return False
232+ elif not self .deps_succeeded (task ):
233+ return False
234+ else :
235+ task .setup (task .testcase .partition ,
236+ task .testcase .environ ,
237+ sched_flex_alloc_nodes = self .sched_flex_alloc_nodes ,
238+ sched_account = self .sched_account ,
239+ sched_partition = self .sched_partition ,
240+ sched_reservation = self .sched_reservation ,
241+ sched_nodelist = self .sched_nodelist ,
242+ sched_exclude_nodelist = self .sched_exclude_nodelist ,
243+ sched_options = self .sched_options )
244+
245+ except TaskExit :
246+ return False
247+
248+ return True
249+
226250 def runcase (self , case ):
227251 super ().runcase (case )
228252 check , partition , environ = case
@@ -241,29 +265,17 @@ def runcase(self, case):
241265 )
242266 try :
243267 partname = partition .fullname
244- if self .deps_failed (task ):
245- exc = TaskDependencyError ('dependencies failed' )
246- task .fail ((type (exc ), exc , None ))
247- return
268+ if (not self ._setup_task (task )):
269+ if not task .failed :
270+ self .printer .status (
271+ 'DEP' , '%s on %s using %s' %
272+ (check .name , partname , environ .name ),
273+ just = 'right'
274+ )
275+ self ._waiting_tasks .append (task )
248276
249- if not self .deps_succeeded (task ):
250- self .printer .status (
251- 'DEP' , '%s on %s using %s' %
252- (check .name , partname , environ .name ),
253- just = 'right'
254- )
255- self ._waiting_tasks .append (task )
256277 return
257278
258- task .setup (partition , environ ,
259- sched_flex_alloc_nodes = self .sched_flex_alloc_nodes ,
260- sched_account = self .sched_account ,
261- sched_partition = self .sched_partition ,
262- sched_reservation = self .sched_reservation ,
263- sched_nodelist = self .sched_nodelist ,
264- sched_exclude_nodelist = self .sched_exclude_nodelist ,
265- sched_options = self .sched_options )
266-
267279 if self ._running_tasks_counts [partname ] >= partition .max_jobs :
268280 # Make sure that we still exceeded the job limit
269281 getlogger ().debug ('reached job limit (%s) for partition %s' %
@@ -312,24 +324,8 @@ def _setup_all(self):
312324 # could fail on setup and be removed from the list _waiting_tasks.
313325 # This would not be not safe and could have unxpected consequences.
314326 for task in self ._waiting_tasks [:]:
315- try :
316- if self .deps_failed (task ):
317- exc = TaskDependencyError ('dependencies failed' )
318- task .fail ((type (exc ), exc , None ))
319- elif self .deps_succeeded (task ):
320- task .setup (task .testcase .partition ,
321- task .testcase .environ ,
322- sched_flex_alloc_nodes = self .sched_flex_alloc_nodes ,
323- sched_account = self .sched_account ,
324- sched_partition = self .sched_partition ,
325- sched_reservation = self .sched_reservation ,
326- sched_nodelist = self .sched_nodelist ,
327- sched_exclude_nodelist = self .sched_exclude_nodelist ,
328- sched_options = self .sched_options )
329- else :
330- still_waiting .append (task )
331- except TaskExit :
332- pass
327+ if not task .failed and not self ._setup_task (task ):
328+ still_waiting .append (task )
333329
334330 self ._waiting_tasks [:] = still_waiting
335331
0 commit comments