def __init__(self, runner, args, job_number=None, name=None, working_dir=None, log_dir=None, wait_for=None): """Create a new SchedulerJob instance """ self.job_number = job_number self.job_name = name self.log_dir = log_dir if wait_for: self.waiting_for = list(wait_for) else: self.waiting_for = list() self.command = ' '.join([str(arg) for arg in args]) if name is None: name = args[0] if working_dir is None: working_dir = os.getcwd() else: working_dir = os.path.abspath(working_dir) Job.__init__(self, runner, name, working_dir, args[0], args[1:]) self._restarts = 0
def test_failing_job_with_simplejobrunner(self): """Test Job using SimpleJobRunner to run failing shell command """ # Create a job cmd = "ls" args = ("*.whereisit", ) job = Job(SimpleJobRunner(), "failing_cmd", self.working_dir, cmd, args) # Start the job job_id = job.start() # Wait to let job complete and check time.sleep(1) job.update() self.assertEqual(job.name, "failing_cmd") self.assertEqual(job.working_dir, self.working_dir) self.assertEqual(job.script, cmd) self.assertEqual(job.args, args) self.assertEqual(job.label, None) self.assertEqual(job.group_label, None) self.assertEqual(job.job_id, job_id) self.assertNotEqual(job.log, None) self.assertNotEqual(job.start_time, None) self.assertNotEqual(job.end_time, None) self.assertFalse(job.isRunning()) self.assertEqual(job.exit_status, 2) self.assertFalse(job.errorState()) self.assertEqual(job.status(), "Finished")
def __init__(self,runner,args,job_number=None,name=None,working_dir=None, log_dir=None,wait_for=[]): """Create a new SchedulerJob instance """ self.job_number = job_number self.job_name = name self.log_dir = log_dir self.waiting_for = list(wait_for) if name is None: name = args[0] if working_dir is None: working_dir = os.getcwd() else: working_dir = os.path.abspath(working_dir) Job.__init__(self,runner,name,working_dir,args[0],args[1:])
def test_failing_job_with_simplejobrunner(self): """Test Job using SimpleJobRunner to run failing shell command """ # Create a job cmd = "ls" args = ("*.whereisit",) job = Job(SimpleJobRunner(),"failing_cmd",self.working_dir,cmd,args) # Start the job job_id = job.start() # Wait to let job complete and check time.sleep(1) job.update() self.assertEqual(job.name,"failing_cmd") self.assertEqual(job.working_dir,self.working_dir) self.assertEqual(job.script,cmd) self.assertEqual(job.args,args) self.assertEqual(job.label,None) self.assertEqual(job.group_label,None) self.assertEqual(job.job_id,job_id) self.assertNotEqual(job.log,None) self.assertNotEqual(job.start_time,None) self.assertNotEqual(job.end_time,None) self.assertFalse(job.isRunning()) self.assertEqual(job.exit_status,2) self.assertFalse(job.errorState()) self.assertEqual(job.status(),"Finished")
def start(self): """Start the job running Overrides the 'start' method in the base 'Job' class. Returns: Id for job """ if self.log_dir is not None: runner_log_dir = self.runner.log_dir self.runner.set_log_dir(self.log_dir) job_id = Job.start(self) if self.log_dir is not None: self.runner.set_log_dir(runner_log_dir) return job_id
def restart(self, max_tries=3): """Restart running the job Attempts to restart a job, by terminating the current instance and reinvoking the 'start' method. The number of times that a restart should be attempted is limited by the 'max_tries' parameter. If the restart is successful then the new job id is returned; otherwise None is returned to indicate failure. Arguments: max_tries (int): maximum number of restarts that should be attempted on this job before giving up (default: 3) Returns: Id for job """ # Check if job can be restarted if self.completed: logging.debug("Job #%s: already completed, cannot " "restart" % self.job_number) return False # Terminate the job logging.debug("Job #%s: terminating before resubmission" % self.job_number) self.terminate() # Check if we can restart self._restarts += 1 if self._restarts > max_tries: logging.debug("Job #%s: maximum number of restart " "attempts exceeded (%d)" % (self.job_number, max_tries)) return False else: logging.debug("Job #%s: restarted (attempt #%d)" % (self.job_number, self._restarts)) #return self.start() return Job.restart(self)
def test_job_with_simplejobrunner(self): """Test Job using SimpleJobRunner to run basic shell command """ # Create a job cmd = "sleep" args = ("2", ) job = Job(SimpleJobRunner(), "shell_cmd", self.working_dir, cmd, args) # Check properties before starting self.assertEqual(job.name, "shell_cmd") self.assertEqual(job.working_dir, self.working_dir) self.assertEqual(job.script, cmd) self.assertEqual(job.args, args) self.assertEqual(job.label, None) self.assertEqual(job.group_label, None) self.assertEqual(job.job_id, None) self.assertEqual(job.log, None) self.assertEqual(job.start_time, None) self.assertEqual(job.end_time, None) self.assertEqual(job.exit_status, None) # Check status self.assertFalse(job.isRunning()) self.assertFalse(job.errorState()) self.assertEqual(job.status(), "Waiting") # Start the job and check job_id = job.start() time.sleep(1) self.assertEqual(job.name, "shell_cmd") self.assertEqual(job.working_dir, self.working_dir) self.assertEqual(job.script, cmd) self.assertEqual(job.args, args) self.assertEqual(job.label, None) self.assertEqual(job.group_label, None) self.assertEqual(job.job_id, job_id) self.assertNotEqual(job.log, None) self.assertNotEqual(job.start_time, None) self.assertEqual(job.end_time, None) self.assertEqual(job.exit_status, None) self.assertTrue(job.isRunning()) self.assertFalse(job.errorState()) self.assertEqual(job.status(), "Running") # Wait to let job complete and check last time time.sleep(2) job.update() self.assertEqual(job.name, "shell_cmd") self.assertEqual(job.working_dir, self.working_dir) self.assertEqual(job.script, cmd) self.assertEqual(job.args, args) self.assertEqual(job.label, None) self.assertEqual(job.group_label, None) self.assertEqual(job.job_id, job_id) self.assertNotEqual(job.log, None) self.assertNotEqual(job.start_time, None) self.assertNotEqual(job.end_time, None) self.assertFalse(job.isRunning()) self.assertEqual(job.exit_status, 0) self.assertFalse(job.errorState()) self.assertEqual(job.status(), "Finished")
def test_job_with_simplejobrunner(self): """Test Job using SimpleJobRunner to run basic shell command """ # Create a job cmd = "sleep" args = ("2",) job = Job(SimpleJobRunner(),"shell_cmd",self.working_dir,cmd,args) # Check properties before starting self.assertEqual(job.name,"shell_cmd") self.assertEqual(job.working_dir,self.working_dir) self.assertEqual(job.script,cmd) self.assertEqual(job.args,args) self.assertEqual(job.label,None) self.assertEqual(job.group_label,None) self.assertEqual(job.job_id,None) self.assertEqual(job.log,None) self.assertEqual(job.start_time,None) self.assertEqual(job.end_time,None) self.assertEqual(job.exit_status,None) # Check status self.assertFalse(job.isRunning()) self.assertFalse(job.errorState()) self.assertEqual(job.status(),"Waiting") # Start the job and check job_id = job.start() time.sleep(1) self.assertEqual(job.name,"shell_cmd") self.assertEqual(job.working_dir,self.working_dir) self.assertEqual(job.script,cmd) self.assertEqual(job.args,args) self.assertEqual(job.label,None) self.assertEqual(job.group_label,None) self.assertEqual(job.job_id,job_id) self.assertNotEqual(job.log,None) self.assertNotEqual(job.start_time,None) self.assertEqual(job.end_time,None) self.assertEqual(job.exit_status,None) self.assertTrue(job.isRunning()) self.assertFalse(job.errorState()) self.assertEqual(job.status(),"Running") # Wait to let job complete and check last time time.sleep(2) job.update() self.assertEqual(job.name,"shell_cmd") self.assertEqual(job.working_dir,self.working_dir) self.assertEqual(job.script,cmd) self.assertEqual(job.args,args) self.assertEqual(job.label,None) self.assertEqual(job.group_label,None) self.assertEqual(job.job_id,job_id) self.assertNotEqual(job.log,None) self.assertNotEqual(job.start_time,None) self.assertNotEqual(job.end_time,None) self.assertFalse(job.isRunning()) self.assertEqual(job.exit_status,0) self.assertFalse(job.errorState()) self.assertEqual(job.status(),"Finished")