diff --git a/wa/framework/execution.py b/wa/framework/execution.py index da2c304c..96c8b3cb 100644 --- a/wa/framework/execution.py +++ b/wa/framework/execution.py @@ -85,6 +85,10 @@ class ExecutionContext(object): def output_directory(self): return self.output.basepath + @property + def reboot_policy(self): + return self.cm.run_config.reboot_policy + def __init__(self, cm, tm, output): self.logger = logging.getLogger('context') self.cm = cm @@ -486,7 +490,7 @@ class Runner(object): if isinstance(e, TargetNotRespondingError): raise e elif isinstance(e, TargetError): - context.tm.verify_target_responsive() + context.tm.verify_target_responsive(context.reboot_policy.can_reboot) finally: self.logger.info('Completing job {}'.format(job.id)) self.send(signal.JOB_COMPLETED) @@ -518,7 +522,7 @@ class Runner(object): job.set_status(Status.FAILED) log.log_error(e, self.logger) if isinstance(e, TargetError) or isinstance(e, TimeoutError): - context.tm.verify_target_responsive() + context.tm.verify_target_responsive(context.reboot_policy.can_reboot) self.context.record_ui_state('setup-error') raise e @@ -535,7 +539,7 @@ class Runner(object): job.set_status(Status.FAILED) log.log_error(e, self.logger) if isinstance(e, TargetError) or isinstance(e, TimeoutError): - context.tm.verify_target_responsive() + context.tm.verify_target_responsive(context.reboot_policy.can_reboot) self.context.record_ui_state('run-error') raise e finally: @@ -547,7 +551,7 @@ class Runner(object): except Exception as e: job.set_status(Status.PARTIAL) if isinstance(e, TargetError) or isinstance(e, TimeoutError): - context.tm.verify_target_responsive() + context.tm.verify_target_responsive(context.reboot_policy.can_reboot) self.context.record_ui_state('output-error') raise diff --git a/wa/framework/instrument.py b/wa/framework/instrument.py index 7d5c3d8d..38c024ec 100644 --- a/wa/framework/instrument.py +++ b/wa/framework/instrument.py @@ -278,7 +278,7 @@ class ManagedCallback(object): if isinstance(e, WorkloadError): context.set_status('FAILED') elif isinstance(e, TargetError) or isinstance(e, TimeoutError): - context.tm.verify_target_responsive() + context.tm.verify_target_responsive(context.reboot_policy.can_reboot) else: if context.current_job: context.set_status('PARTIAL') diff --git a/wa/framework/target/manager.py b/wa/framework/target/manager.py index fa231f7c..3ebc1dbc 100644 --- a/wa/framework/target/manager.py +++ b/wa/framework/target/manager.py @@ -83,10 +83,12 @@ class TargetManager(object): def commit_runtime_parameters(self, parameters): self.rpm.commit_runtime_parameters(parameters) - def verify_target_responsive(self): + def verify_target_responsive(self, can_reboot=True): if not self.target.check_responsive(explode=False): self.is_responsive = False - if self.target.has('hard_reset'): + if not can_reboot: + raise TargetNotRespondingError('Target unresponsive and is not allowed to reboot.') + elif self.target.has('hard_reset'): self.logger.info('Target unresponsive; performing hard reset') self.target.reboot(hard=True) self.is_responsive = True