def initializeHandler( cls, serviceInfoDict ): try: from DIRAC.WorkloadManagementSystem.DB.JobDB import JobDB cls.__jobDB = JobDB() except Exception as excp: return S_ERROR( "Could not connect to JobDB: %s" % str( excp ) ) cls.setFailedOnTooFrozen( False ) cls.setFreezeOnFailedDispatch( False ) cls.setFreezeOnUnknownExecutor( False ) cls.setAllowedClients( "JobManager" ) JobState.checkDBAccess() JobState.cleanTaskQueues() period = cls.srv_getCSOption( "LoadJobPeriod", 60 ) result = ThreadScheduler.gThreadScheduler.addPeriodicTask( period, cls.__loadJobs ) if not result[ 'OK' ]: return result cls.__loadTaskId = result[ 'Value' ] return cls.__loadJobs()
def initializeHandler(cls, serviceInfoDict): try: from DIRAC.WorkloadManagementSystem.DB.JobDB import JobDB cls.__jobDB = JobDB() except Exception as excp: return S_ERROR("Could not connect to JobDB: %s" % str(excp)) cls.setFailedOnTooFrozen(False) cls.setFreezeOnFailedDispatch(False) cls.setFreezeOnUnknownExecutor(False) cls.setAllowedClients("JobManager") JobState.checkDBAccess() JobState.cleanTaskQueues() period = cls.srv_getCSOption("LoadJobPeriod", 60) result = ThreadScheduler.gThreadScheduler.addPeriodicTask( period, cls.__loadJobs) if not result['OK']: return result cls.__loadTaskId = result['Value'] return cls.__loadJobs()
class OptimizationMindHandler( ExecutorMindHandler ): __jobDB = False __optimizationStates = [ 'Received', 'Checking' ] __loadTaskId = False MSG_DEFINITIONS = { 'OptimizeJobs' : { 'jids' : ( types.ListType, types.TupleType ) } } auth_msg_OptimizeJobs = [ 'all' ] def msg_OptimizeJobs( self, msgObj ): jids = msgObj.jids for jid in jids: try: jid = int( jid ) except ValueError: self.log.error( "Job ID %s has to be an integer" % jid ) continue #Forget and add task to ensure state is reset self.forgetTask( jid ) result = self.executeTask( jid, CachedJobState( jid ) ) if not result[ 'OK' ]: self.log.error( "Could not add job %s to optimization: %s" % ( jid, result[ 'Value' ] ) ) else: self.log.info( "Received new job %s" % jid ) return S_OK() @classmethod def __loadJobs( cls, eTypes = None ): log = cls.log if cls.__loadTaskId: period = cls.srv_getCSOption( "LoadJobPeriod", 300 ) ThreadScheduler.gThreadScheduler.setTaskPeriod( cls.__loadTaskId, period ) if not eTypes: eConn = cls.getExecutorsConnected() eTypes = [ eType for eType in eConn if eConn[ eType ] > 0 ] if not eTypes: log.info( "No optimizer connected. Skipping load" ) return S_OK() log.info( "Getting jobs for %s" % ",".join( eTypes ) ) checkingMinors = [ eType.split("/")[1] for eType in eTypes if eType != "WorkloadManagement/JobPath" ] for opState in cls.__optimizationStates: #For Received states if opState == "Received": if 'WorkloadManagement/JobPath' not in eTypes: continue jobCond = { 'Status' : opState } #For checking states if opState == "Checking": if not checkingMinors: continue jobCond = { 'Status': opState, 'MinorStatus' : checkingMinors } #Do the magic jobTypeCondition = cls.srv_getCSOption( "JobTypeRestriction", [] ) if jobTypeCondition: jobCond[ 'JobType' ] = jobTypeCondition result = cls.__jobDB.selectJobs( jobCond, limit = cls.srv_getCSOption( "JobQueryLimit", 10000 ) ) if not result[ 'OK' ]: return result jidList = result[ 'Value' ] knownJids = cls.getTaskIds() added = 0 for jid in jidList: jid = long( jid ) if jid not in knownJids: #Same as before. Check that the state is ok. cls.executeTask( jid, CachedJobState( jid ) ) added += 1 log.info( "Added %s/%s jobs for %s state" % ( added, len( jidList ), opState ) ) return S_OK() @classmethod def initializeHandler( cls, serviceInfoDict ): try: from DIRAC.WorkloadManagementSystem.DB.JobDB import JobDB cls.__jobDB = JobDB() except Exception, excp: return S_ERROR( "Could not connect to JobDB: %s" % str( excp ) ) cls.setFailedOnTooFrozen( False ) cls.setFreezeOnFailedDispatch( False ) cls.setFreezeOnUnknownExecutor( False ) cls.setAllowedClients( "JobManager" ) JobState.checkDBAccess() JobState.cleanTaskQueues() period = cls.srv_getCSOption( "LoadJobPeriod", 60 ) result = ThreadScheduler.gThreadScheduler.addPeriodicTask( period, cls.__loadJobs ) if not result[ 'OK' ]: return result cls.__loadTaskId = result[ 'Value' ] return cls.__loadJobs()