def recover(self): if not self.machine.check('running'): log.error(f'{self} unable to transition from {self.machine.state}' 'to running for recovery') return if self.mesos_task_id is None: log.error(f'{self} no task ID, cannot recover') self.fail_unknown() return log.info(f'{self} recovering Mesos run') serializer = filehandler.OutputStreamSerializer(self.output_path) mesos_cluster = MesosClusterRepository.get_cluster() task = self._create_mesos_task( mesos_cluster, serializer, self.mesos_task_id, ) if not task: log.warning(f'{self} cannot recover, Mesos is disabled or ' f'invalid task ID {self.mesos_task_id!r}') self.fail_unknown() return self.watch(task) mesos_cluster.recover(task) # Reset status self.exit_status = None self.end_time = None self.transition_and_notify('running') return task
def submit_command(self): serializer = filehandler.OutputStreamSerializer(self.output_path) mesos_cluster = MesosClusterRepository.get_cluster() task = mesos_cluster.create_task( action_run_id=self.id, command=self.command, cpus=self.cpus, mem=self.mem, constraints=self.constraints, docker_image=self.docker_image, docker_parameters=self.docker_parameters, env=self.env, extra_volumes=self.extra_volumes, serializer=serializer, ) if not task: # Mesos is disabled self.fail(None) return self.mesos_task_id = task.get_mesos_id() # Watch before submitting, in case submit causes a transition self.watch(task) mesos_cluster.submit(task) return task
def build_action_command(self): """Create a new ActionCommand instance to send to the node.""" serializer = filehandler.OutputStreamSerializer(self.output_path) self.action_command = self.action_runner.create( self.id, self.command, serializer) self.watch(self.action_command) return self.action_command
def submit_command(self): serializer = filehandler.OutputStreamSerializer(self.output_path) mesos_cluster = MesosClusterRepository.get_cluster() task = self._create_mesos_task(mesos_cluster, serializer) if not task: # Mesos is disabled self.fail(self.EXIT_MESOS_DISABLED) return self.mesos_task_id = task.get_mesos_id() # Watch before submitting, in case submit causes a transition self.watch(task) mesos_cluster.submit(task) return task
def recover(self): if self.mesos_task_id is None: log.error(f'{self} no task ID, cannot recover') return if not self.machine.check('running'): log.error( f'{self} unable to transition from {self.machine.state}' 'to running for recovery' ) return log.info(f'{self} recovering Mesos run') serializer = filehandler.OutputStreamSerializer(self.output_path) mesos_cluster = MesosClusterRepository.get_cluster() task = mesos_cluster.create_task( action_run_id=self.id, command=self.command, cpus=self.cpus, mem=self.mem, constraints=self.constraints, docker_image=self.docker_image, docker_parameters=self.docker_parameters, env=self.env, extra_volumes=self.extra_volumes, serializer=serializer, task_id=self.mesos_task_id, ) if not task: log.warning( f'{self} cannot recover, Mesos is disabled or ' f'invalid task ID {self.mesos_task_id!r}' ) self.fail_unknown() return self.watch(task) mesos_cluster.recover(task) # Reset status self.exit_status = None self.end_time = None self.transition_and_notify('running') return task
def _get_serializer(self, path=None): path = filehandler.OutputPath(path) if path else self._obj.output_path return filehandler.OutputStreamSerializer(path)
def _get_serializer(self): return filehandler.OutputStreamSerializer(self._obj.output_path)