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
Example #2
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:])
Example #4
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 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 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)
Example #8
0
 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")
Example #9
0
 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")