def testExecutionAlias(self):
     adm_executionalias = "adm_dummy"
     ## Default
     os.unlink(Admin.FILENAME)
     Admin.create(self.cfg.test_dir, None, None, None)
     adm = Admin(Admin.FILENAME)
     self.assertEqual(adm.getExecutionAlias(), None)
     ## Set value
     adm.setExecutionAlias(adm_executionalias)
     self.assertEqual(adm.getExecutionAlias(), adm_executionalias)
     ## Missing key
     adm.me.clear()
     self.assertEqual(adm.getExecutionAlias(), None)
Beispiel #2
0
def getStatus(jobID):
    """
    @param jobID: the url of the job
    @type jobID: string
    @return: the current status of the job
    @rtype: string
    @raise MobyleError: if the job has no number or if the job doesn't exist anymore
    @raise OSError: if the user is not the owner of the process
    """
    from Mobyle.JobState import JobState, normUri
    from urlparse import urlparse
    from Mobyle.StatusManager import StatusManager

    path = normUri(jobID)
    protocol, host, path, a, b, c = urlparse(path)
    if protocol == "http":
        raise NotImplementedError, "trying to querying a distant server"

    if path[-9:] == "index.xml":
        path = path[:-10]
    sm = StatusManager()

    oldStatus = sm.getStatus(path)
    #'killed' , 'finished' , 'error' the status cannot change anymore
    #'building' these jobs have not yet batch number

    #  ( 'finished' , 'error' , 'killed' , 'building' ):
    if not oldStatus.isQueryable():
        return oldStatus
    else:
        adm = Admin(path)
        batch = adm.getExecutionAlias()
        jobNum = adm.getNumber()

        if batch is None or jobNum is None:
            return oldStatus
        try:
            exec_engine = executionLoader(jobID=jobID)
            newStatus = exec_engine.getStatus(jobNum)
        except MobyleError, err:
            u_log.error(str(err), exc_info=True)
            raise err
        if not newStatus.isKnown():
            return oldStatus
        if newStatus != oldStatus:
            sm.setStatus(path, newStatus)
        return newStatus
Beispiel #3
0
def isExecuting(jobID):
    """
    @param jobID: the url of the job
    @type jobID: string
    @return True if the job is currently executing ( submitted , running , pending , hold ).
    False otherwise ( building, finished , error , killed )
    @rtype: boolean
    @raise MobyleError: if the job has no number 
    @raise OSError: if the user is not the owner of the process
    """
    from Mobyle.JobState import normUri
    from urlparse import urlparse
    from Mobyle.StatusManager import StatusManager

    path = normUri(jobID)
    protocol, host, path, a, b, c = urlparse(path)
    if protocol == "http":
        raise NotImplementedError, "trying to querying a distant server"

    if path[-9:] == "index.xml":
        path = path[:-10]
    adm = Admin(path)
    batch = adm.getExecutionAlias()
    jobNum = adm.getNumber()

    if batch is None or jobNum is None:
        sm = StatusManager()
        status = sm.getStatus(path)
        if not status.isQueryable():
            return False
        else:
            raise MobyleError("inconsistency in .admin file %s" % path)
    try:
        execKlass = executionLoader(jobID=jobID)
        newStatus = execKlass.getStatus(jobNum)
    except MobyleError, err:
        u_log.error(str(err), exc_info=True)
        raise err
Beispiel #4
0
def executionLoader(jobID=None, alias=None, execution_config=None):
    assert (
        bool(jobID) + bool(alias) + bool(execution_config) == 1
    ), "please provide either a jobID, an alias or an execution_config"
    from Mobyle.ConfigManager import Config

    cfg = Config()
    if not execution_config:
        if jobID:
            from Mobyle.JobState import normUri
            from urlparse import urlparse

            path = normUri(jobID)
            protocol, host, path, a, b, c = urlparse(path)
            if protocol == "http":
                raise NotImplementedError, "trying to instanciate an Execution system from a remote Job"
            if path[-9:] == "index.xml":
                path = path[:-10]
            adm = Admin(path)
            alias = adm.getExecutionAlias()
        if not alias:
            msg = "cant determine the Execution system for %s " % (jobID)
            u_log.error(msg)
            raise MobyleError(msg)
        try:
            execution_config = cfg.getExecutionConfigFromAlias(alias)
        except KeyError:
            msg = "the ExecutionConfig alias %s doesn't match with any alias in Config" % alias
            u_log.critical(msg)
            raise MobyleError(msg)
    klass_name = execution_config.execution_class_name
    try:
        module = __import__("Mobyle.Execution.%s" % klass_name)
    except ImportError, err:
        msg = "The Execution.%s module is missing" % klass_name
        u_log.critical(msg)
        raise MobyleError, msg