def testF_WMSMode(self): """ _WMSMode_ Try running things in WMS Mode. """ nRunning = getCondorRunningJobs(self.user) self.assertEqual(nRunning, 0, "User currently has %i running jobs. Test will not continue" % (nRunning)) config = self.getConfig() config.BossAir.pluginName = 'CondorPlugin' config.BossAir.submitWMSMode = True baAPI = BossAirAPI(config = config) workload = self.createTestWorkload() workloadName = "basicWorkload" changeState = ChangeState(config) nSubs = 5 nJobs = 10 cacheDir = os.path.join(self.testDir, 'CacheDir') jobGroupList = self.createJobGroups(nSubs = nSubs, nJobs = nJobs, task = workload.getTask("ReReco"), workloadSpec = os.path.join(self.testDir, 'workloadTest', workloadName), site = None) for group in jobGroupList: changeState.propagate(group.jobs, 'created', 'new') jobSubmitter = JobSubmitterPoller(config = config) jobSubmitter.algorithm() nRunning = getCondorRunningJobs(self.user) self.assertEqual(nRunning, nSubs * nJobs) baAPI.track() idleJobs = baAPI._loadByStatus(status = 'Idle') sn = "T2_US_UCSD" # Test the Site Info has been updated. Make Sure T2_US_UCSD is not in the sitelist # in BossAir_t.py baAPI.updateSiteInformation(idleJobs, sn, True) # Now kill 'em manually # command = ['condor_rm', self.user] # pipe = Popen(command, stdout = PIPE, stderr = PIPE, shell = False) # pipe.communicate() del jobSubmitter return
def changeSiteState(self, siteName, state): """ _changeSiteState_ Set a site to some of the possible states, if the state is Aborted we must do extra actions. """ setStateAction = self.wmbsDAOFactory(classname="Locations.SetState") setStateAction.execute(siteName=siteName, state=state, conn=self.getDBConn(), transaction=self.existingTransaction()) executingJobs = self.wmbsDAOFactory(classname="Jobs.ListByState") jobInfo = executingJobs.execute(state='executing') if not jobInfo: # then no jobs to look at return bossAir = BossAirAPI(self.config, noSetup=True) jobtokill = bossAir.updateSiteInformation( jobInfo, siteName, state in ("Aborted", "Draining", "Down")) if state == "Aborted": ercode = 71301 elif state == "Draining": ercode = 71302 elif state == "Down": ercode = 71303 else: ercode = 71300 bossAir.kill(jobtokill, errorCode=ercode) return
def changeSiteState(self, siteName, state): """ _changeSiteState_ Set a site to some of the possible states, if the state is Aborted we must do extra actions. """ setStateAction = self.wmbsDAOFactory(classname = "Locations.SetState") setStateAction.execute(siteName = siteName, state = state, conn = self.getDBConn(), transaction = self.existingTransaction()) executingJobs = self.wmbsDAOFactory(classname = "Jobs.ListByState") jobInfo = executingJobs.execute(state = 'executing') if not jobInfo: # then no jobs to look at return bossAir = BossAirAPI(self.config, noSetup = True) jobtokill = bossAir.updateSiteInformation(jobInfo, siteName, state in ("Aborted","Draining","Down")) if state == "Aborted": ercode=71301 elif state == "Draining": ercode=71302 elif state == "Down": ercode=71303 else: ercode=71300 bossAir.kill(jobtokill, errorCode=ercode) return
def changeSiteState(self, siteName, state): """ _changeSiteState_ Set a site to some of the possible states and perform proper actions with the jobs, according to the state """ timeNow = int(time.time()) state2ExitCode = {"Aborted": 71301, "Draining": 71302, "Down": 71303} executingJobs = self.wmbsDAOFactory(classname="Jobs.ListByState") jobInfo = executingJobs.execute(state='executing') if jobInfo: bossAir = BossAirAPI(self.config) jobtokill = bossAir.updateSiteInformation(jobInfo, siteName, state in state2ExitCode) ercode = state2ExitCode.get(state, 71300) bossAir.kill(jobtokill, errorCode=ercode) # only now that jobs were updated by the plugin, we flip the site state setStateAction = self.wmbsDAOFactory(classname="Locations.SetState") setStateAction.execute(siteName=siteName, state=state, stateTime=timeNow, conn=self.getDBConn(), transaction=self.existingTransaction()) return
def changeSiteState(self, siteName, state): """ _changeSiteState_ Set a site to some of the possible states and perform proper actions with the jobs, according to the state """ state2ExitCode = {"Aborted": 71301, "Draining": 71302, "Down": 71303} executingJobs = self.wmbsDAOFactory(classname="Jobs.ListByState") jobInfo = executingJobs.execute(state='executing') if jobInfo: bossAir = BossAirAPI(self.config, noSetup=True) jobtokill = bossAir.updateSiteInformation(jobInfo, siteName, state in state2ExitCode) ercode = state2ExitCode.get(state, 71300) bossAir.kill(jobtokill, errorCode=ercode) # only now that jobs were updated by the plugin, we flip the site state setStateAction = self.wmbsDAOFactory(classname="Locations.SetState") setStateAction.execute(siteName=siteName, state=state, conn=self.getDBConn(), transaction=self.existingTransaction()) return
def testT_updateJobInfo(self): """ _updateJobInfo_ Test the updateSiteInformation method from PyCondorPlugin.py """ nRunning = getCondorRunningJobs(self.user) self.assertEqual( nRunning, 0, "User currently has %i running jobs. Test will not continue" % (nRunning)) config = self.getConfig() config.BossAir.pluginName = 'PyCondorPlugin' config.BossAir.submitWMSMode = True baAPI = BossAirAPI(config=config) workload = self.createTestWorkload() workloadName = "basicWorkload" changeState = ChangeState(config) nSubs = 1 nJobs = 2 cacheDir = os.path.join(self.testDir, 'CacheDir') jobGroupList = self.createJobGroups(nSubs=nSubs, nJobs=nJobs, task=workload.getTask("ReReco"), workloadSpec=os.path.join( self.testDir, 'workloadTest', workloadName), site="se.T2_US_UCSD") for group in jobGroupList: changeState.propagate(group.jobs, 'created', 'new') jobSubmitter = JobSubmitterPoller(config=config) jobSubmitter.algorithm() nRunning = getCondorRunningJobs(self.user) self.assertEqual(nRunning, nSubs * nJobs) baAPI.track() idleJobs = baAPI._loadByStatus(status='Idle') ## # Make one of the sites in the sitelist to be True for ABORTED/DRAINING/DOWN # updateSiteInformation() method should edit the classAd for all the jobs # that are bound for the site # Check the Q manually using condor_q -l <job id> # jtok = baAPI.updateSiteInformation(idleJobs, "T2_US_UCSD", True) if jtok != None: baAPI.kill( jtok, errorCode=61301 ) # errorCode can be either 61301/61302/61303 (Aborted/Draining/Down) return
def testT_updateJobInfo(self): """ _updateJobInfo_ Test the updateSiteInformation method from CondorPlugin.py """ nRunning = getCondorRunningJobs(self.user) config = self.getConfig() config.BossAir.pluginName = 'CondorPlugin' baAPI = BossAirAPI(config = config) baAPI.track() idleJobs = baAPI._loadByStatus(status = 'Idle') print idleJobs for job in idleJobs : print job['id'] baAPI.updateSiteInformation(idleJobs, info = None) return
def testT_updateJobInfo(self): """ _updateJobInfo_ Test the updateSiteInformation method from CondorPlugin.py """ nRunning = getCondorRunningJobs(self.user) self.assertEqual(nRunning, 0, "User currently has %i running jobs. Test will not continue" % (nRunning)) config = self.getConfig() config.BossAir.pluginName = 'CondorPlugin' config.BossAir.submitWMSMode = True baAPI = BossAirAPI(config=config) workload = self.createTestWorkload() workloadName = "basicWorkload" changeState = ChangeState(config) nSubs = 1 nJobs = 2 dummycacheDir = os.path.join(self.testDir, 'CacheDir') jobGroupList = self.createJobGroups(nSubs=nSubs, nJobs=nJobs, task=workload.getTask("ReReco"), workloadSpec=os.path.join(self.testDir, 'workloadTest', workloadName), site="se.T2_US_UCSD") for group in jobGroupList: changeState.propagate(group.jobs, 'created', 'new') jobSubmitter = JobSubmitterPoller(config=config) jobSubmitter.algorithm() nRunning = getCondorRunningJobs(self.user) self.assertEqual(nRunning, nSubs * nJobs) baAPI.track() idleJobs = baAPI._loadByStatus(status='Idle') ## # Make one of the sites in the sitelist to be True for ABORTED/DRAINING/DOWN # updateSiteInformation() method should edit the classAd for all the jobs # that are bound for the site # Check the Q manually using condor_q -l <job id> # jtok = baAPI.updateSiteInformation(idleJobs, "T2_US_UCSD", True) if jtok != None: baAPI.kill(jtok, errorCode=71301) # errorCode can be either 71301/71302/71303 (Aborted/Draining/Down) return
def testF_WMSMode(self): """ _WMSMode_ Try running things in WMS Mode. """ nRunning = getCondorRunningJobs(self.user) self.assertEqual( nRunning, 0, "User currently has %i running jobs. Test will not continue" % (nRunning)) config = self.getConfig() config.BossAir.pluginName = 'CondorPlugin' config.BossAir.submitWMSMode = True baAPI = BossAirAPI(config=config) workload = self.createTestWorkload() workloadName = "basicWorkload" changeState = ChangeState(config) nSubs = 5 nJobs = 10 dummycacheDir = os.path.join(self.testDir, 'CacheDir') jobGroupList = self.createJobGroups(nSubs=nSubs, nJobs=nJobs, task=workload.getTask("ReReco"), workloadSpec=os.path.join( self.testDir, 'workloadTest', workloadName), site=None) for group in jobGroupList: changeState.propagate(group.jobs, 'created', 'new') jobSubmitter = JobSubmitterPoller(config=config) jobSubmitter.algorithm() nRunning = getCondorRunningJobs(self.user) self.assertEqual(nRunning, nSubs * nJobs) baAPI.track() idleJobs = baAPI._loadByStatus(status='Idle') sn = "T2_US_UCSD" # Test the Site Info has been updated. Make Sure T2_US_UCSD is not in the sitelist # in BossAir_t.py baAPI.updateSiteInformation(idleJobs, sn, True) # Now kill 'em manually # command = ['condor_rm', self.user] # pipe = Popen(command, stdout = PIPE, stderr = PIPE, shell = False) # pipe.communicate() del jobSubmitter return