diff --git a/wa/framework/execution.py b/wa/framework/execution.py index 6a24c226..5c30ce38 100644 --- a/wa/framework/execution.py +++ b/wa/framework/execution.py @@ -506,10 +506,10 @@ class Runner(object): log.indent() if self.context.reboot_policy.reboot_on_each_job: self.logger.info('Rebooting on new job.') - self.context.tm.reboot() + self.context.tm.reboot(context) elif self.context.reboot_policy.reboot_on_each_spec and context.spec_changed: self.logger.info('Rebooting on new spec.') - self.context.tm.reboot() + self.context.tm.reboot(context) with signal.wrap('JOB', self, context): context.tm.start() @@ -526,7 +526,7 @@ class Runner(object): if isinstance(e, TargetNotRespondingError): raise e elif isinstance(e, TargetError): - context.tm.verify_target_responsive(context.reboot_policy.can_reboot) + context.tm.verify_target_responsive(context) finally: self.logger.info('Completing job {}'.format(job.id)) self.send(signal.JOB_COMPLETED) @@ -558,7 +558,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.reboot_policy.can_reboot) + context.tm.verify_target_responsive(context) self.context.record_ui_state('setup-error') raise e @@ -574,7 +574,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.reboot_policy.can_reboot) + context.tm.verify_target_responsive(context) self.context.record_ui_state('run-error') raise e finally: @@ -586,7 +586,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.reboot_policy.can_reboot) + context.tm.verify_target_responsive(context) self.context.record_ui_state('output-error') raise diff --git a/wa/framework/instrument.py b/wa/framework/instrument.py index 8dd8769d..4d27996b 100644 --- a/wa/framework/instrument.py +++ b/wa/framework/instrument.py @@ -259,7 +259,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.reboot_policy.can_reboot) + context.tm.verify_target_responsive(context) else: if context.current_job: context.set_status('PARTIAL') diff --git a/wa/framework/target/manager.py b/wa/framework/target/manager.py index 44ca6fc2..e8e4f5ef 100644 --- a/wa/framework/target/manager.py +++ b/wa/framework/target/manager.py @@ -74,9 +74,9 @@ class TargetManager(object): def get_target_info(self): return get_target_info(self.target) - def reboot(self): - with signal.wrap('REBOOT'): - self.target.reboot() + def reboot(self, context, hard=False): + with signal.wrap('REBOOT', self, context): + self.target.reboot(hard) def merge_runtime_parameters(self, parameters): return self.rpm.merge_runtime_parameters(parameters) @@ -87,14 +87,15 @@ class TargetManager(object): def commit_runtime_parameters(self, parameters): self.rpm.commit_runtime_parameters(parameters) - def verify_target_responsive(self, can_reboot=True): + def verify_target_responsive(self, context): + can_reboot = context.reboot_policy.can_reboot if not self.target.check_responsive(explode=False): self.is_responsive = False 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.reboot(context, hard=True) self.is_responsive = True raise ExecutionError('Target became unresponsive but was recovered.') else: