+ def _arvados_node(self):
+ return self._monitor.arvados_node.get()
+
+ def _finished(self, success_flag=None):
+ if success_flag is not None:
+ self.success = success_flag
+ return super(ComputeNodeShutdownActor, self)._finished()
+
+ def cancel_shutdown(self):
+ self._finished(success_flag=False)
+
+ def _stop_if_window_closed(orig_func):
+ @functools.wraps(orig_func)
+ def stop_wrapper(self, *args, **kwargs):
+ if (self.cancellable and
+ (not self._monitor.shutdown_eligible().get())):
+ self._logger.info(
+ "Cloud node %s shutdown cancelled - no longer eligible.",
+ self.cloud_node.id)
+ self._later.cancel_shutdown()
+ return None
+ else:
+ return orig_func(self, *args, **kwargs)
+ return stop_wrapper
+
+ @_stop_if_window_closed
+ @ComputeNodeStateChangeBase._retry()