Skip to content

Commit de5ee3b

Browse files
committed
Add function _setup_task to avoid excessive nesting
1 parent 2d65150 commit de5ee3b

File tree

1 file changed

+34
-38
lines changed

1 file changed

+34
-38
lines changed

reframe/frontend/executors/policies.py

Lines changed: 34 additions & 38 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)