| Index: frontend/planner/rpc_utils.py
|
| diff --git a/frontend/planner/rpc_utils.py b/frontend/planner/rpc_utils.py
|
| index 79a6dcc0e02c6654629c7cd7a30b113af5e10c1d..78f8e64dfc605d3c41ef1493286a751089d756c5 100644
|
| --- a/frontend/planner/rpc_utils.py
|
| +++ b/frontend/planner/rpc_utils.py
|
| @@ -2,6 +2,7 @@ import common
|
| import os
|
| from autotest_lib.frontend.afe import models as afe_models, model_logic
|
| from autotest_lib.frontend.planner import models, model_attributes
|
| +from autotest_lib.frontend.planner import failure_actions
|
| from autotest_lib.client.common_lib import global_config, utils
|
|
|
|
|
| @@ -111,8 +112,8 @@ def compute_next_test_config(plan, host):
|
| afe_job_ids = afe_jobs.values_list('afe_job', flat=True)
|
| hqes = afe_models.HostQueueEntry.objects.filter(job__id__in=afe_job_ids,
|
| host=host.host)
|
| - if not hqes:
|
| - return test_config.id
|
| + if not hqes and not bool(test_config.skipped_hosts.filter(host=host)):
|
| + return test_config
|
| for hqe in hqes:
|
| if not hqe.complete:
|
| # HostQueueEntry still active for this host,
|
| @@ -159,3 +160,50 @@ def add_test_run(plan, planner_job, tko_test, hostname, status):
|
| host=planner_host)
|
| test_run.status = status
|
| test_run.save()
|
| +
|
| +
|
| +def _site_process_host_action_dummy(host, action):
|
| + return False
|
| +
|
| +
|
| +def process_host_action(host, action):
|
| + """
|
| + Takes the specified action on the host
|
| + """
|
| + HostAction = failure_actions.HostAction
|
| + if action not in HostAction.values:
|
| + raise ValueError('Unexpected host action %s' % action)
|
| +
|
| + site_process = utils.import_site_function(
|
| + __file__, 'autotest_lib.frontend.planner.site_rpc_utils',
|
| + 'site_process_host_action', _site_process_host_action_dummy)
|
| +
|
| + if not site_process(host, action):
|
| + # site_process_host_action returns True and and only if it matched a
|
| + # site-specific processing option
|
| + if action == HostAction.BLOCK:
|
| + host.blocked = True
|
| + elif action == HostAction.UNBLOCK:
|
| + host.blocked = False
|
| + else:
|
| + assert action == HostAction.REINSTALL
|
| + raise NotImplemented('TODO: implement reinstall')
|
| +
|
| + host.save()
|
| +
|
| +
|
| +def process_test_action(planner_job, action):
|
| + """
|
| + Takes the specified action for this planner job
|
| + """
|
| + TestAction = failure_actions.TestAction
|
| + if action not in TestAction.values:
|
| + raise ValueError('Unexpected test action %s' % action)
|
| +
|
| + if action == TestAction.SKIP:
|
| + # Do nothing
|
| + pass
|
| + else:
|
| + assert action == TestAction.RERUN
|
| + planner_job.requires_rerun = True
|
| + planner_job.save()
|
|
|