mirror of
https://github.com/ARM-software/workload-automation.git
synced 2025-03-22 10:38:37 +00:00
fw/target: fix signals reboot on unresponsive
- Add "hard" parameter to TargetManager's reboot(). - Pass in context to TargetManager's reboot() and verify_target_responsive() -- this is needed for signal dispatch. - Call self.reboot() instead of self.target.reboot() when attempting a reset for unresponsive targets inside TargetManager, in order to ensure that appropriate signals are dispatched.
This commit is contained in:
parent
e816980471
commit
2f99137ad5
@ -506,10 +506,10 @@ class Runner(object):
|
|||||||
log.indent()
|
log.indent()
|
||||||
if self.context.reboot_policy.reboot_on_each_job:
|
if self.context.reboot_policy.reboot_on_each_job:
|
||||||
self.logger.info('Rebooting on new 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:
|
elif self.context.reboot_policy.reboot_on_each_spec and context.spec_changed:
|
||||||
self.logger.info('Rebooting on new spec.')
|
self.logger.info('Rebooting on new spec.')
|
||||||
self.context.tm.reboot()
|
self.context.tm.reboot(context)
|
||||||
|
|
||||||
with signal.wrap('JOB', self, context):
|
with signal.wrap('JOB', self, context):
|
||||||
context.tm.start()
|
context.tm.start()
|
||||||
@ -526,7 +526,7 @@ class Runner(object):
|
|||||||
if isinstance(e, TargetNotRespondingError):
|
if isinstance(e, TargetNotRespondingError):
|
||||||
raise e
|
raise e
|
||||||
elif isinstance(e, TargetError):
|
elif isinstance(e, TargetError):
|
||||||
context.tm.verify_target_responsive(context.reboot_policy.can_reboot)
|
context.tm.verify_target_responsive(context)
|
||||||
finally:
|
finally:
|
||||||
self.logger.info('Completing job {}'.format(job.id))
|
self.logger.info('Completing job {}'.format(job.id))
|
||||||
self.send(signal.JOB_COMPLETED)
|
self.send(signal.JOB_COMPLETED)
|
||||||
@ -558,7 +558,7 @@ class Runner(object):
|
|||||||
job.set_status(Status.FAILED)
|
job.set_status(Status.FAILED)
|
||||||
log.log_error(e, self.logger)
|
log.log_error(e, self.logger)
|
||||||
if isinstance(e, TargetError) or isinstance(e, TimeoutError):
|
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')
|
self.context.record_ui_state('setup-error')
|
||||||
raise e
|
raise e
|
||||||
|
|
||||||
@ -574,7 +574,7 @@ class Runner(object):
|
|||||||
job.set_status(Status.FAILED)
|
job.set_status(Status.FAILED)
|
||||||
log.log_error(e, self.logger)
|
log.log_error(e, self.logger)
|
||||||
if isinstance(e, TargetError) or isinstance(e, TimeoutError):
|
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')
|
self.context.record_ui_state('run-error')
|
||||||
raise e
|
raise e
|
||||||
finally:
|
finally:
|
||||||
@ -586,7 +586,7 @@ class Runner(object):
|
|||||||
except Exception as e:
|
except Exception as e:
|
||||||
job.set_status(Status.PARTIAL)
|
job.set_status(Status.PARTIAL)
|
||||||
if isinstance(e, TargetError) or isinstance(e, TimeoutError):
|
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')
|
self.context.record_ui_state('output-error')
|
||||||
raise
|
raise
|
||||||
|
|
||||||
|
@ -259,7 +259,7 @@ class ManagedCallback(object):
|
|||||||
if isinstance(e, WorkloadError):
|
if isinstance(e, WorkloadError):
|
||||||
context.set_status('FAILED')
|
context.set_status('FAILED')
|
||||||
elif isinstance(e, TargetError) or isinstance(e, TimeoutError):
|
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:
|
else:
|
||||||
if context.current_job:
|
if context.current_job:
|
||||||
context.set_status('PARTIAL')
|
context.set_status('PARTIAL')
|
||||||
|
@ -74,9 +74,9 @@ class TargetManager(object):
|
|||||||
def get_target_info(self):
|
def get_target_info(self):
|
||||||
return get_target_info(self.target)
|
return get_target_info(self.target)
|
||||||
|
|
||||||
def reboot(self):
|
def reboot(self, context, hard=False):
|
||||||
with signal.wrap('REBOOT'):
|
with signal.wrap('REBOOT', self, context):
|
||||||
self.target.reboot()
|
self.target.reboot(hard)
|
||||||
|
|
||||||
def merge_runtime_parameters(self, parameters):
|
def merge_runtime_parameters(self, parameters):
|
||||||
return self.rpm.merge_runtime_parameters(parameters)
|
return self.rpm.merge_runtime_parameters(parameters)
|
||||||
@ -87,14 +87,15 @@ class TargetManager(object):
|
|||||||
def commit_runtime_parameters(self, parameters):
|
def commit_runtime_parameters(self, parameters):
|
||||||
self.rpm.commit_runtime_parameters(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):
|
if not self.target.check_responsive(explode=False):
|
||||||
self.is_responsive = False
|
self.is_responsive = False
|
||||||
if not can_reboot:
|
if not can_reboot:
|
||||||
raise TargetNotRespondingError('Target unresponsive and is not allowed to reboot.')
|
raise TargetNotRespondingError('Target unresponsive and is not allowed to reboot.')
|
||||||
elif self.target.has('hard_reset'):
|
elif self.target.has('hard_reset'):
|
||||||
self.logger.info('Target unresponsive; performing hard reset')
|
self.logger.info('Target unresponsive; performing hard reset')
|
||||||
self.target.reboot(hard=True)
|
self.reboot(context, hard=True)
|
||||||
self.is_responsive = True
|
self.is_responsive = True
|
||||||
raise ExecutionError('Target became unresponsive but was recovered.')
|
raise ExecutionError('Target became unresponsive but was recovered.')
|
||||||
else:
|
else:
|
||||||
|
Loading…
x
Reference in New Issue
Block a user