DIRAC 9.0.0a62__py3-none-any.whl → 9.0.0a63__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- DIRAC/ConfigurationSystem/Client/Helpers/Registry.py +1 -1
- DIRAC/Core/Security/DiracX.py +1 -1
- DIRAC/Core/Tornado/Client/ClientSelector.py +4 -1
- DIRAC/Core/Utilities/Extensions.py +10 -1
- DIRAC/Interfaces/API/Dirac.py +22 -13
- DIRAC/TransformationSystem/Agent/TransformationCleaningAgent.py +9 -12
- DIRAC/WorkloadManagementSystem/Agent/JobCleaningAgent.py +7 -4
- DIRAC/WorkloadManagementSystem/Agent/StalledJobAgent.py +3 -26
- DIRAC/WorkloadManagementSystem/Agent/StatesAccountingAgent.py +9 -2
- DIRAC/WorkloadManagementSystem/Agent/test/Test_Agent_JobCleaningAgent.py +7 -9
- DIRAC/WorkloadManagementSystem/Agent/test/Test_Agent_StalledJobAgent.py +1 -2
- DIRAC/WorkloadManagementSystem/Client/JobMonitoringClient.py +4 -2
- DIRAC/WorkloadManagementSystem/Client/JobStatus.py +0 -59
- DIRAC/WorkloadManagementSystem/Client/SandboxStoreClient.py +25 -1
- DIRAC/WorkloadManagementSystem/Client/WMSClient.py +2 -3
- DIRAC/WorkloadManagementSystem/FutureClient/JobStateUpdateClient.py +2 -14
- DIRAC/WorkloadManagementSystem/Service/JobManagerHandler.py +27 -128
- DIRAC/WorkloadManagementSystem/Service/JobStateUpdateHandler.py +0 -16
- DIRAC/WorkloadManagementSystem/Utilities/JobParameters.py +1 -1
- DIRAC/WorkloadManagementSystem/Utilities/PilotWrapper.py +2 -0
- DIRAC/WorkloadManagementSystem/Utilities/jobAdministration.py +138 -0
- DIRAC/WorkloadManagementSystem/Utilities/test/Test_JobAdministration.py +28 -0
- {dirac-9.0.0a62.dist-info → dirac-9.0.0a63.dist-info}/METADATA +2 -1
- {dirac-9.0.0a62.dist-info → dirac-9.0.0a63.dist-info}/RECORD +28 -30
- {dirac-9.0.0a62.dist-info → dirac-9.0.0a63.dist-info}/entry_points.txt +0 -3
- DIRAC/TransformationSystem/scripts/dirac_transformation_archive.py +0 -30
- DIRAC/TransformationSystem/scripts/dirac_transformation_clean.py +0 -30
- DIRAC/TransformationSystem/scripts/dirac_transformation_remove_output.py +0 -30
- DIRAC/WorkloadManagementSystem/Utilities/test/Test_JobManager.py +0 -58
- {dirac-9.0.0a62.dist-info → dirac-9.0.0a63.dist-info}/WHEEL +0 -0
- {dirac-9.0.0a62.dist-info → dirac-9.0.0a63.dist-info}/licenses/LICENSE +0 -0
- {dirac-9.0.0a62.dist-info → dirac-9.0.0a63.dist-info}/top_level.txt +0 -0
|
@@ -21,9 +21,7 @@ from DIRAC.Core.Utilities.JDL import jdlToBaseJobDescriptionModel
|
|
|
21
21
|
from DIRAC.Core.Utilities.JEncode import strToIntDict
|
|
22
22
|
from DIRAC.Core.Utilities.ObjectLoader import ObjectLoader
|
|
23
23
|
from DIRAC.FrameworkSystem.Client.ProxyManagerClient import gProxyManager
|
|
24
|
-
from DIRAC.StorageManagementSystem.Client.StorageManagerClient import StorageManagerClient
|
|
25
24
|
from DIRAC.WorkloadManagementSystem.Client import JobStatus
|
|
26
|
-
from DIRAC.WorkloadManagementSystem.Client.JobStatus import filterJobStateTransition
|
|
27
25
|
from DIRAC.WorkloadManagementSystem.Service.JobPolicy import (
|
|
28
26
|
RIGHT_DELETE,
|
|
29
27
|
RIGHT_KILL,
|
|
@@ -32,6 +30,7 @@ from DIRAC.WorkloadManagementSystem.Service.JobPolicy import (
|
|
|
32
30
|
RIGHT_SUBMIT,
|
|
33
31
|
JobPolicy,
|
|
34
32
|
)
|
|
33
|
+
from DIRAC.WorkloadManagementSystem.Utilities.jobAdministration import kill_delete_jobs
|
|
35
34
|
from DIRAC.WorkloadManagementSystem.Utilities.JobModel import JobDescriptionModel
|
|
36
35
|
from DIRAC.WorkloadManagementSystem.Utilities.ParametricJob import generateParametricJobs, getParameterVectorLength
|
|
37
36
|
from DIRAC.WorkloadManagementSystem.Utilities.Utils import rescheduleJobs
|
|
@@ -430,131 +429,28 @@ class JobManagerHandlerMixin:
|
|
|
430
429
|
|
|
431
430
|
return S_OK(validJobList)
|
|
432
431
|
|
|
433
|
-
|
|
434
|
-
|
|
435
|
-
and remove the pilot that ran and its logging info if the pilot is finished.
|
|
436
|
-
|
|
437
|
-
:param int jobID: job ID
|
|
438
|
-
:return: S_OK()/S_ERROR()
|
|
439
|
-
"""
|
|
440
|
-
if not (result := self.jobDB.setJobStatus(jobID, JobStatus.DELETED, "Checking accounting", force=force))["OK"]:
|
|
441
|
-
return result
|
|
442
|
-
|
|
443
|
-
if not (result := self.taskQueueDB.deleteJob(jobID))["OK"]:
|
|
444
|
-
self.log.warn("Failed to delete job from the TaskQueue")
|
|
445
|
-
|
|
446
|
-
# if it was the last job for the pilot
|
|
447
|
-
result = self.pilotAgentsDB.getPilotsForJobID(jobID)
|
|
448
|
-
if not result["OK"]:
|
|
449
|
-
self.log.error("Failed to get Pilots for JobID", result["Message"])
|
|
450
|
-
return result
|
|
451
|
-
for pilot in result["Value"]:
|
|
452
|
-
res = self.pilotAgentsDB.getJobsForPilot(pilot)
|
|
453
|
-
if not res["OK"]:
|
|
454
|
-
self.log.error("Failed to get jobs for pilot", res["Message"])
|
|
455
|
-
return res
|
|
456
|
-
if not res["Value"]: # if list of jobs for pilot is empty, delete pilot
|
|
457
|
-
result = self.pilotAgentsDB.getPilotInfo(pilotID=pilot)
|
|
458
|
-
if not result["OK"]:
|
|
459
|
-
self.log.error("Failed to get pilot info", result["Message"])
|
|
460
|
-
return result
|
|
461
|
-
ret = self.pilotAgentsDB.deletePilot(result["Value"]["PilotJobReference"])
|
|
462
|
-
if not ret["OK"]:
|
|
463
|
-
self.log.error("Failed to delete pilot from PilotAgentsDB", ret["Message"])
|
|
464
|
-
return ret
|
|
465
|
-
|
|
466
|
-
return S_OK()
|
|
432
|
+
###########################################################################
|
|
433
|
+
types_deleteJob = []
|
|
467
434
|
|
|
468
|
-
def
|
|
469
|
-
"""
|
|
435
|
+
def export_deleteJob(self, jobIDs, force=False):
|
|
436
|
+
"""Delete jobs specified in the jobIDs list
|
|
470
437
|
|
|
471
|
-
:param
|
|
472
|
-
:param bool sendKillCommand: send kill command
|
|
438
|
+
:param list jobIDs: list of job IDs
|
|
473
439
|
|
|
474
|
-
:return: S_OK
|
|
440
|
+
:return: S_OK/S_ERROR
|
|
475
441
|
"""
|
|
476
|
-
if sendKillCommand:
|
|
477
|
-
if not (result := self.jobDB.setJobCommand(jobID, "Kill"))["OK"]:
|
|
478
|
-
return result
|
|
479
|
-
|
|
480
|
-
self.log.info("Job marked for termination", jobID)
|
|
481
|
-
if not (result := self.jobDB.setJobStatus(jobID, JobStatus.KILLED, "Marked for termination", force=force))[
|
|
482
|
-
"OK"
|
|
483
|
-
]:
|
|
484
|
-
self.log.warn("Failed to set job Killed status", result["Message"])
|
|
485
|
-
if not (result := self.taskQueueDB.deleteJob(jobID))["OK"]:
|
|
486
|
-
self.log.warn("Failed to delete job from the TaskQueue", result["Message"])
|
|
487
|
-
|
|
488
|
-
return S_OK()
|
|
489
|
-
|
|
490
|
-
def _kill_delete_jobs(self, jobIDList, right, force=False):
|
|
491
|
-
"""Kill (== set the status to "KILLED") or delete (== set the status to "DELETED") jobs as necessary
|
|
492
442
|
|
|
493
|
-
|
|
494
|
-
:param str right: RIGHT_KILL or RIGHT_DELETE
|
|
495
|
-
|
|
496
|
-
:return: S_OK()/S_ERROR()
|
|
497
|
-
"""
|
|
498
|
-
jobList = self.__getJobList(jobIDList)
|
|
443
|
+
jobList = self.__getJobList(jobIDs)
|
|
499
444
|
if not jobList:
|
|
500
445
|
self.log.warn("No jobs specified")
|
|
501
446
|
return S_OK([])
|
|
502
447
|
|
|
503
|
-
validJobList, invalidJobList, nonauthJobList, ownerJobList = self.jobPolicy.evaluateJobRights(
|
|
504
|
-
|
|
505
|
-
|
|
506
|
-
|
|
507
|
-
killJobList = []
|
|
508
|
-
deleteJobList = []
|
|
509
|
-
if validJobList:
|
|
510
|
-
# Get the jobs allowed to transition to the Killed state
|
|
511
|
-
filterRes = filterJobStateTransition(validJobList, JobStatus.KILLED)
|
|
512
|
-
if not filterRes["OK"]:
|
|
513
|
-
return filterRes
|
|
514
|
-
killJobList.extend(filterRes["Value"])
|
|
515
|
-
|
|
516
|
-
if not right == RIGHT_KILL:
|
|
517
|
-
# Get the jobs allowed to transition to the Deleted state
|
|
518
|
-
filterRes = filterJobStateTransition(validJobList, JobStatus.DELETED)
|
|
519
|
-
if not filterRes["OK"]:
|
|
520
|
-
return filterRes
|
|
521
|
-
deleteJobList.extend(filterRes["Value"])
|
|
522
|
-
|
|
523
|
-
# Look for jobs that are in the Staging state to send kill signal to the stager
|
|
524
|
-
result = self.jobDB.getJobsAttributes(killJobList, ["Status"])
|
|
525
|
-
if not result["OK"]:
|
|
526
|
-
return result
|
|
527
|
-
stagingJobList = [jobID for jobID, sDict in result["Value"].items() if sDict["Status"] == JobStatus.STAGING]
|
|
528
|
-
|
|
529
|
-
for jobID in killJobList:
|
|
530
|
-
result = self.__killJob(jobID, force=force)
|
|
531
|
-
if not result["OK"]:
|
|
532
|
-
badIDs.append(jobID)
|
|
533
|
-
|
|
534
|
-
for jobID in deleteJobList:
|
|
535
|
-
result = self.__deleteJob(jobID, force=force)
|
|
536
|
-
if not result["OK"]:
|
|
537
|
-
badIDs.append(jobID)
|
|
538
|
-
|
|
539
|
-
if stagingJobList:
|
|
540
|
-
stagerClient = StorageManagerClient()
|
|
541
|
-
self.log.info("Going to send killing signal to stager as well!")
|
|
542
|
-
result = stagerClient.killTasksBySourceTaskID(stagingJobList)
|
|
543
|
-
if not result["OK"]:
|
|
544
|
-
self.log.warn("Failed to kill some Stager tasks", result["Message"])
|
|
448
|
+
validJobList, invalidJobList, nonauthJobList, ownerJobList = self.jobPolicy.evaluateJobRights(
|
|
449
|
+
jobList, RIGHT_DELETE
|
|
450
|
+
)
|
|
545
451
|
|
|
546
|
-
|
|
547
|
-
result = S_ERROR("Some jobs failed deletion")
|
|
548
|
-
if nonauthJobList:
|
|
549
|
-
self.log.warn("Non-authorized JobIDs won't be deleted", str(nonauthJobList))
|
|
550
|
-
result["NonauthorizedJobIDs"] = nonauthJobList
|
|
551
|
-
if badIDs:
|
|
552
|
-
self.log.warn("JobIDs failed to be deleted", str(badIDs))
|
|
553
|
-
result["FailedJobIDs"] = badIDs
|
|
554
|
-
return result
|
|
452
|
+
result = kill_delete_jobs(RIGHT_DELETE, validJobList, nonauthJobList, force=force)
|
|
555
453
|
|
|
556
|
-
jobsList = killJobList if right == RIGHT_KILL else deleteJobList
|
|
557
|
-
result = S_OK(jobsList)
|
|
558
454
|
result["requireProxyUpload"] = len(ownerJobList) > 0 and self.__checkIfProxyUploadIsRequired()
|
|
559
455
|
|
|
560
456
|
if invalidJobList:
|
|
@@ -563,30 +459,33 @@ class JobManagerHandlerMixin:
|
|
|
563
459
|
return result
|
|
564
460
|
|
|
565
461
|
###########################################################################
|
|
566
|
-
|
|
462
|
+
types_killJob = []
|
|
567
463
|
|
|
568
|
-
def
|
|
569
|
-
"""
|
|
464
|
+
def export_killJob(self, jobIDs, force=False):
|
|
465
|
+
"""Kill jobs specified in the jobIDs list
|
|
570
466
|
|
|
571
467
|
:param list jobIDs: list of job IDs
|
|
572
468
|
|
|
573
469
|
:return: S_OK/S_ERROR
|
|
574
470
|
"""
|
|
575
471
|
|
|
576
|
-
|
|
472
|
+
jobList = self.__getJobList(jobIDs)
|
|
473
|
+
if not jobList:
|
|
474
|
+
self.log.warn("No jobs specified")
|
|
475
|
+
return S_OK([])
|
|
577
476
|
|
|
578
|
-
|
|
579
|
-
|
|
477
|
+
validJobList, invalidJobList, nonauthJobList, ownerJobList = self.jobPolicy.evaluateJobRights(
|
|
478
|
+
jobList, RIGHT_KILL
|
|
479
|
+
)
|
|
580
480
|
|
|
581
|
-
|
|
582
|
-
"""Kill jobs specified in the jobIDs list
|
|
481
|
+
result = kill_delete_jobs(RIGHT_KILL, validJobList, nonauthJobList, force=force)
|
|
583
482
|
|
|
584
|
-
|
|
483
|
+
result["requireProxyUpload"] = len(ownerJobList) > 0 and self.__checkIfProxyUploadIsRequired()
|
|
585
484
|
|
|
586
|
-
:
|
|
587
|
-
|
|
485
|
+
if invalidJobList:
|
|
486
|
+
result["InvalidJobIDs"] = invalidJobList
|
|
588
487
|
|
|
589
|
-
return
|
|
488
|
+
return result
|
|
590
489
|
|
|
591
490
|
###########################################################################
|
|
592
491
|
types_resetJob = []
|
|
@@ -128,22 +128,6 @@ class JobStateUpdateHandlerMixin:
|
|
|
128
128
|
"""Allows the site attribute to be set for a job specified by its jobID."""
|
|
129
129
|
return cls.jobDB.setJobAttribute(int(jobID), "Site", site)
|
|
130
130
|
|
|
131
|
-
###########################################################################
|
|
132
|
-
types_setJobFlag = [[str, int], str]
|
|
133
|
-
|
|
134
|
-
@classmethod
|
|
135
|
-
def export_setJobFlag(cls, jobID, flag):
|
|
136
|
-
"""Set job flag for job with jobID"""
|
|
137
|
-
return cls.jobDB.setJobAttribute(int(jobID), flag, "True")
|
|
138
|
-
|
|
139
|
-
###########################################################################
|
|
140
|
-
types_unsetJobFlag = [[str, int], str]
|
|
141
|
-
|
|
142
|
-
@classmethod
|
|
143
|
-
def export_unsetJobFlag(cls, jobID, flag):
|
|
144
|
-
"""Unset job flag for job with jobID"""
|
|
145
|
-
return cls.jobDB.setJobAttribute(int(jobID), flag, "False")
|
|
146
|
-
|
|
147
131
|
###########################################################################
|
|
148
132
|
types_setJobApplicationStatus = [[str, int], str, str]
|
|
149
133
|
|
|
@@ -417,6 +417,8 @@ def getPilotFilesCompressedEncodedDict(pilotFiles, proxy=None):
|
|
|
417
417
|
from DIRAC.Core.Security.ProxyFile import writeChainToTemporaryFile # pylint: disable=import-error
|
|
418
418
|
|
|
419
419
|
retVal = writeChainToTemporaryFile(proxy)
|
|
420
|
+
if not retVal["OK"]:
|
|
421
|
+
raise RuntimeError("Failed to write proxy to temporary file: %s" % retVal["Message"])
|
|
420
422
|
proxyLocation = Path(retVal["Value"])
|
|
421
423
|
proxy_string = proxyLocation.read_text()
|
|
422
424
|
proxyLocation.unlink()
|
|
@@ -0,0 +1,138 @@
|
|
|
1
|
+
from DIRAC import S_ERROR, S_OK, gLogger
|
|
2
|
+
from DIRAC.StorageManagementSystem.DB.StorageManagementDB import StorageManagementDB
|
|
3
|
+
from DIRAC.WorkloadManagementSystem.Client import JobStatus
|
|
4
|
+
from DIRAC.WorkloadManagementSystem.DB.JobDB import JobDB
|
|
5
|
+
from DIRAC.WorkloadManagementSystem.DB.PilotAgentsDB import PilotAgentsDB
|
|
6
|
+
from DIRAC.WorkloadManagementSystem.DB.TaskQueueDB import TaskQueueDB
|
|
7
|
+
from DIRAC.WorkloadManagementSystem.Service.JobPolicy import RIGHT_DELETE, RIGHT_KILL
|
|
8
|
+
|
|
9
|
+
|
|
10
|
+
def _deleteJob(jobID, force=False):
|
|
11
|
+
"""Set the job status to "Deleted"
|
|
12
|
+
and remove the pilot that ran and its logging info if the pilot is finished.
|
|
13
|
+
|
|
14
|
+
:param int jobID: job ID
|
|
15
|
+
:return: S_OK()/S_ERROR()
|
|
16
|
+
"""
|
|
17
|
+
if not (result := JobDB().setJobStatus(jobID, JobStatus.DELETED, "Checking accounting", force=force))["OK"]:
|
|
18
|
+
gLogger.warn("Failed to set job Deleted status", result["Message"])
|
|
19
|
+
return result
|
|
20
|
+
|
|
21
|
+
if not (result := TaskQueueDB().deleteJob(jobID))["OK"]:
|
|
22
|
+
gLogger.warn("Failed to delete job from the TaskQueue")
|
|
23
|
+
|
|
24
|
+
# if it was the last job for the pilot
|
|
25
|
+
result = PilotAgentsDB().getPilotsForJobID(jobID)
|
|
26
|
+
if not result["OK"]:
|
|
27
|
+
gLogger.error("Failed to get Pilots for JobID", result["Message"])
|
|
28
|
+
return result
|
|
29
|
+
for pilot in result["Value"]:
|
|
30
|
+
res = PilotAgentsDB().getJobsForPilot(pilot)
|
|
31
|
+
if not res["OK"]:
|
|
32
|
+
gLogger.error("Failed to get jobs for pilot", res["Message"])
|
|
33
|
+
return res
|
|
34
|
+
if not res["Value"]: # if list of jobs for pilot is empty, delete pilot
|
|
35
|
+
result = PilotAgentsDB().getPilotInfo(pilotID=pilot)
|
|
36
|
+
if not result["OK"]:
|
|
37
|
+
gLogger.error("Failed to get pilot info", result["Message"])
|
|
38
|
+
return result
|
|
39
|
+
ret = PilotAgentsDB().deletePilot(result["Value"]["PilotJobReference"])
|
|
40
|
+
if not ret["OK"]:
|
|
41
|
+
gLogger.error("Failed to delete pilot from PilotAgentsDB", ret["Message"])
|
|
42
|
+
return ret
|
|
43
|
+
|
|
44
|
+
return S_OK()
|
|
45
|
+
|
|
46
|
+
|
|
47
|
+
def _killJob(jobID, sendKillCommand=True, force=False):
|
|
48
|
+
"""Kill one job
|
|
49
|
+
|
|
50
|
+
:param int jobID: job ID
|
|
51
|
+
:param bool sendKillCommand: send kill command
|
|
52
|
+
|
|
53
|
+
:return: S_OK()/S_ERROR()
|
|
54
|
+
"""
|
|
55
|
+
if sendKillCommand:
|
|
56
|
+
if not (result := JobDB().setJobCommand(jobID, "Kill"))["OK"]:
|
|
57
|
+
gLogger.warn("Failed to set job Kill command", result["Message"])
|
|
58
|
+
return result
|
|
59
|
+
|
|
60
|
+
gLogger.info("Job marked for termination", jobID)
|
|
61
|
+
if not (result := JobDB().setJobStatus(jobID, JobStatus.KILLED, "Marked for termination", force=force))["OK"]:
|
|
62
|
+
gLogger.warn("Failed to set job Killed status", result["Message"])
|
|
63
|
+
if not (result := TaskQueueDB().deleteJob(jobID))["OK"]:
|
|
64
|
+
gLogger.warn("Failed to delete job from the TaskQueue", result["Message"])
|
|
65
|
+
|
|
66
|
+
return S_OK()
|
|
67
|
+
|
|
68
|
+
|
|
69
|
+
def kill_delete_jobs(right, validJobList, nonauthJobList=[], force=False):
|
|
70
|
+
"""Kill (== set the status to "KILLED") or delete (== set the status to "DELETED") jobs as necessary
|
|
71
|
+
|
|
72
|
+
:param str right: RIGHT_KILL or RIGHT_DELETE
|
|
73
|
+
|
|
74
|
+
:return: S_OK()/S_ERROR()
|
|
75
|
+
"""
|
|
76
|
+
badIDs = []
|
|
77
|
+
|
|
78
|
+
killJobList = []
|
|
79
|
+
deleteJobList = []
|
|
80
|
+
if validJobList:
|
|
81
|
+
result = JobDB().getJobsAttributes(killJobList, ["Status"])
|
|
82
|
+
if not result["OK"]:
|
|
83
|
+
return result
|
|
84
|
+
jobStates = result["Value"]
|
|
85
|
+
|
|
86
|
+
# Get the jobs allowed to transition to the Killed state
|
|
87
|
+
killJobList.extend(_filterJobStateTransition(jobStates, JobStatus.KILLED))
|
|
88
|
+
|
|
89
|
+
if right == RIGHT_DELETE:
|
|
90
|
+
# Get the jobs allowed to transition to the Deleted state
|
|
91
|
+
deleteJobList.extend(_filterJobStateTransition(jobStates, JobStatus.DELETED))
|
|
92
|
+
|
|
93
|
+
for jobID in killJobList:
|
|
94
|
+
result = _killJob(jobID, force=force)
|
|
95
|
+
if not result["OK"]:
|
|
96
|
+
badIDs.append(jobID)
|
|
97
|
+
|
|
98
|
+
for jobID in deleteJobList:
|
|
99
|
+
result = _deleteJob(jobID, force=force)
|
|
100
|
+
if not result["OK"]:
|
|
101
|
+
badIDs.append(jobID)
|
|
102
|
+
|
|
103
|
+
# Look for jobs that are in the Staging state to send kill signal to the stager
|
|
104
|
+
stagingJobList = [jobID for jobID, sDict in jobStates.items() if sDict["Status"] == JobStatus.STAGING]
|
|
105
|
+
|
|
106
|
+
if stagingJobList:
|
|
107
|
+
stagerDB = StorageManagementDB()
|
|
108
|
+
gLogger.info("Going to send killing signal to stager as well!")
|
|
109
|
+
result = stagerDB.killTasksBySourceTaskID(stagingJobList)
|
|
110
|
+
if not result["OK"]:
|
|
111
|
+
gLogger.warn("Failed to kill some Stager tasks", result["Message"])
|
|
112
|
+
|
|
113
|
+
if nonauthJobList or badIDs:
|
|
114
|
+
result = S_ERROR("Some jobs failed deletion")
|
|
115
|
+
if nonauthJobList:
|
|
116
|
+
gLogger.warn("Non-authorized JobIDs won't be deleted", str(nonauthJobList))
|
|
117
|
+
result["NonauthorizedJobIDs"] = nonauthJobList
|
|
118
|
+
if badIDs:
|
|
119
|
+
gLogger.warn("JobIDs failed to be deleted", str(badIDs))
|
|
120
|
+
result["FailedJobIDs"] = badIDs
|
|
121
|
+
return result
|
|
122
|
+
|
|
123
|
+
jobsList = killJobList if right == RIGHT_KILL else deleteJobList
|
|
124
|
+
return S_OK(jobsList)
|
|
125
|
+
|
|
126
|
+
|
|
127
|
+
def _filterJobStateTransition(jobStates, candidateState):
|
|
128
|
+
"""Given a dictionary of jobs states,
|
|
129
|
+
return a list of jobs that are allowed to transition to the given candidate state.
|
|
130
|
+
"""
|
|
131
|
+
allowedJobs = []
|
|
132
|
+
|
|
133
|
+
for js in jobStates.items():
|
|
134
|
+
stateRes = JobStatus.JobsStateMachine(js[1]["Status"]).getNextState(candidateState)
|
|
135
|
+
if stateRes["OK"]:
|
|
136
|
+
if stateRes["Value"] == candidateState:
|
|
137
|
+
allowedJobs.append(js[0])
|
|
138
|
+
return allowedJobs
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
""" unit test (pytest) of JobAdministration module
|
|
2
|
+
"""
|
|
3
|
+
|
|
4
|
+
from unittest.mock import MagicMock
|
|
5
|
+
|
|
6
|
+
import pytest
|
|
7
|
+
|
|
8
|
+
# sut
|
|
9
|
+
from DIRAC.WorkloadManagementSystem.Utilities.jobAdministration import kill_delete_jobs
|
|
10
|
+
|
|
11
|
+
|
|
12
|
+
@pytest.mark.parametrize(
|
|
13
|
+
"jobIDs_list, right",
|
|
14
|
+
[
|
|
15
|
+
([], "Kill"),
|
|
16
|
+
([], "Delete"),
|
|
17
|
+
(1, "Kill"),
|
|
18
|
+
([1, 2], "Kill"),
|
|
19
|
+
],
|
|
20
|
+
)
|
|
21
|
+
def test___kill_delete_jobs(mocker, jobIDs_list, right):
|
|
22
|
+
mocker.patch("DIRAC.WorkloadManagementSystem.Utilities.jobAdministration.JobDB", MagicMock())
|
|
23
|
+
mocker.patch("DIRAC.WorkloadManagementSystem.Utilities.jobAdministration.TaskQueueDB", MagicMock())
|
|
24
|
+
mocker.patch("DIRAC.WorkloadManagementSystem.Utilities.jobAdministration.PilotAgentsDB", MagicMock())
|
|
25
|
+
mocker.patch("DIRAC.WorkloadManagementSystem.Utilities.jobAdministration.StorageManagementDB", MagicMock())
|
|
26
|
+
|
|
27
|
+
res = kill_delete_jobs(right, jobIDs_list)
|
|
28
|
+
assert res["OK"]
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: DIRAC
|
|
3
|
-
Version: 9.0.
|
|
3
|
+
Version: 9.0.0a63
|
|
4
4
|
Summary: DIRAC is an interware, meaning a software framework for distributed computing.
|
|
5
5
|
Home-page: https://github.com/DIRACGrid/DIRAC/
|
|
6
6
|
License: GPL-3.0-only
|
|
@@ -45,6 +45,7 @@ Requires-Dist: typing_extensions>=4.3.0
|
|
|
45
45
|
Requires-Dist: Authlib>=1.0.0.a2
|
|
46
46
|
Requires-Dist: pyjwt
|
|
47
47
|
Requires-Dist: dominate
|
|
48
|
+
Requires-Dist: zstandard
|
|
48
49
|
Provides-Extra: server
|
|
49
50
|
Requires-Dist: CMRESHandler; extra == "server"
|
|
50
51
|
Requires-Dist: opensearch-py; extra == "server"
|
|
@@ -66,7 +66,7 @@ DIRAC/ConfigurationSystem/Client/__init__.py,sha256=Jkxofl9cI04MqJcu_ZP8Wdk3WXOm
|
|
|
66
66
|
DIRAC/ConfigurationSystem/Client/Helpers/CSGlobals.py,sha256=_txOWvYqcRzK4n4VVEwvECe_B45PmqiYHTxjEIOP6MQ,1053
|
|
67
67
|
DIRAC/ConfigurationSystem/Client/Helpers/Operations.py,sha256=jrpeauEwV6_xXQwVEbs6DDboB8oUmzkZkB_Xg8ZgdBQ,5991
|
|
68
68
|
DIRAC/ConfigurationSystem/Client/Helpers/Path.py,sha256=ghRMD2qNaKejwg4RZ3m4LzfCG5bg1afvTnwJQydl94w,930
|
|
69
|
-
DIRAC/ConfigurationSystem/Client/Helpers/Registry.py,sha256=
|
|
69
|
+
DIRAC/ConfigurationSystem/Client/Helpers/Registry.py,sha256=svibVaHyRKRKPEs-k4pXgcTzr74qe72m4jo2Ue9Xqts,20775
|
|
70
70
|
DIRAC/ConfigurationSystem/Client/Helpers/Resources.py,sha256=8llG-BevyD33S6nYpQjr1LQxdCqyJcS1U8vLBUrT3HY,16641
|
|
71
71
|
DIRAC/ConfigurationSystem/Client/Helpers/ResourcesDefaults.py,sha256=m6s-ZvjtYcLGsuu6mkCpIzxA8rEUYnwOOw1HvjecuJQ,3314
|
|
72
72
|
DIRAC/ConfigurationSystem/Client/Helpers/__init__.py,sha256=syOASwgkZHn6b6ybYYu15wO8mrZXj7T-gIHk3EDlpjc,206
|
|
@@ -154,7 +154,7 @@ DIRAC/Core/LCG/GGUSTicketsClient.py,sha256=dlt9-cy2lptdiMa56YTV5g7uZrXaPIvbvTK-c
|
|
|
154
154
|
DIRAC/Core/LCG/GOCDBClient.py,sha256=FTxnwJqd3j99vfLkC2ouyrCsnVLFEwg_GHaq6zY1Db8,15439
|
|
155
155
|
DIRAC/Core/LCG/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
156
156
|
DIRAC/Core/LCG/test/Test_LCG.py,sha256=2VsUEgyWDC6BC2KsMz9tB6TsMHYmpg0Qfjs3utiXKcg,32871
|
|
157
|
-
DIRAC/Core/Security/DiracX.py,sha256=
|
|
157
|
+
DIRAC/Core/Security/DiracX.py,sha256=lMnqdhgONZYr96YHTwx8g0dwDgfejT5kJBicS4E3IWw,5022
|
|
158
158
|
DIRAC/Core/Security/IAMService.py,sha256=ISbNH0c7vWiZ-sx4PVS1yqxdFNvV6-xmemiJtFL6P6I,6775
|
|
159
159
|
DIRAC/Core/Security/Locations.py,sha256=Ew1-J4tAwfbgkW1_MAlIIkeBi6_MJLsefNAL8vBi7_k,8031
|
|
160
160
|
DIRAC/Core/Security/Properties.py,sha256=CjHN-YQwBiAdZyTos9b6Zpg5a6Sh_hFNUvpszxzEgnE,6180
|
|
@@ -203,7 +203,7 @@ DIRAC/Core/Security/test/certs/user/userkey.pem,sha256=Gt3JdR4GZBS-nfyPwDdm6P2nH
|
|
|
203
203
|
DIRAC/Core/Security/test/certs/voms/README,sha256=Toom4qgCLg26xptUJkrSkvEWsfmjS7YOW0OVwN2osCw,574
|
|
204
204
|
DIRAC/Core/Security/test/certs/voms/proxy.pem,sha256=aXbN-aiaQKEYMbVqKWZZqqQmM8LyLDcjNyOifkfkhbo,7784
|
|
205
205
|
DIRAC/Core/Tornado/__init__.py,sha256=cO7z-h1lVEu7RRPYeY3BZLJu-FZH9p7Gvuukw1ZgcME,31
|
|
206
|
-
DIRAC/Core/Tornado/Client/ClientSelector.py,sha256=
|
|
206
|
+
DIRAC/Core/Tornado/Client/ClientSelector.py,sha256=jII2UaAnoyD8ixLML1DLxGDfstmE2rVSqXbgBZJv5ak,4109
|
|
207
207
|
DIRAC/Core/Tornado/Client/TornadoClient.py,sha256=o4x6orUNyqhWG4GbihlHgk_2trjz1F0Zm0xcQ0MaRlo,3869
|
|
208
208
|
DIRAC/Core/Tornado/Client/__init__.py,sha256=cO7z-h1lVEu7RRPYeY3BZLJu-FZH9p7Gvuukw1ZgcME,31
|
|
209
209
|
DIRAC/Core/Tornado/Client/private/TornadoBaseClient.py,sha256=Gp7KyenLZ3Y1-Fow8r2MM5DjkUslXLtQEPfT_Hxl6ng,27704
|
|
@@ -233,7 +233,7 @@ DIRAC/Core/Utilities/DirectoryExplorer.py,sha256=t8__3M_1zparfvKbB_fR8hIB56mZtmB
|
|
|
233
233
|
DIRAC/Core/Utilities/ElasticSearchDB.py,sha256=CxYdPsqCEpe3QOHRK5jiXIlfVj9K74LbTr-QW7jl49E,22731
|
|
234
234
|
DIRAC/Core/Utilities/EventDispatcher.py,sha256=wL2jA2gFRrzMPORJ10WEQloxZPNdcfDjGHq8ENDJ86Y,3142
|
|
235
235
|
DIRAC/Core/Utilities/ExecutorDispatcher.py,sha256=npBVxBxKNmSDklJIfUMv-eadHO3oHbaASGoFZp54A0o,28893
|
|
236
|
-
DIRAC/Core/Utilities/Extensions.py,sha256=
|
|
236
|
+
DIRAC/Core/Utilities/Extensions.py,sha256=k0kgUjc50oFZ1e2XwOERJLQMSSCbnx3HwBO_xFTffSU,7535
|
|
237
237
|
DIRAC/Core/Utilities/File.py,sha256=XWaxGr_kdoQgznQr20fzWNsvkurJVfd7GMnOqRlwvJQ,8264
|
|
238
238
|
DIRAC/Core/Utilities/Glue2.py,sha256=OCxTfdKnqf-Hkt60Jz5Y0Ww0ZvA7jW-f485UVo8YrUE,16058
|
|
239
239
|
DIRAC/Core/Utilities/Grid.py,sha256=1Jf889thLUGV56k-YkzxLN0nJ3j_FIlIIkS781-0Hy0,2824
|
|
@@ -594,7 +594,7 @@ DIRAC/FrameworkSystem/scripts/dirac_stop_component.py,sha256=RJJy63ilUEV5qyP_r2i
|
|
|
594
594
|
DIRAC/FrameworkSystem/scripts/dirac_sys_sendmail.py,sha256=lJ6OO_vkaSVhXp_p79LYTZoq9jT5qLU0qXOfFEgK9fw,2453
|
|
595
595
|
DIRAC/FrameworkSystem/scripts/dirac_uninstall_component.py,sha256=FTA2zA0cACM31u_uFZgsUYC6S0Fh3xmkqDjgOPdFr4k,2797
|
|
596
596
|
DIRAC/Interfaces/__init__.py,sha256=hycApm2mNnIWcdIzoOKQZLa8-LpSpfG2jdfgyKGN9Gg,34
|
|
597
|
-
DIRAC/Interfaces/API/Dirac.py,sha256
|
|
597
|
+
DIRAC/Interfaces/API/Dirac.py,sha256=6SYncH3ThesLDlfe1hbg8lqpffm5IEWrrilw3ZUBDUo,94306
|
|
598
598
|
DIRAC/Interfaces/API/DiracAdmin.py,sha256=PDwWl1KCckL2xhLodeWJhVS4ZondNvfdbTUEE3pukXA,28135
|
|
599
599
|
DIRAC/Interfaces/API/Job.py,sha256=Pjyrbg5q1H0qVHdT4PbJHOaUEN1bcpCTpuG1kDu9yrw,50591
|
|
600
600
|
DIRAC/Interfaces/API/__init__.py,sha256=l_0g05W4nsJ9-kvp9yKYsbdLz3EvWczOfdycoPnwlvU,566
|
|
@@ -1053,7 +1053,7 @@ DIRAC/TransformationSystem/Agent/RequestTaskAgent.py,sha256=0FxuRVONDkC6DtDqfSC4
|
|
|
1053
1053
|
DIRAC/TransformationSystem/Agent/TaskManagerAgentBase.py,sha256=M8CVPGCY4UMNfKNDdcfgUd2er3JPAIeNzGghsk0ohUQ,30824
|
|
1054
1054
|
DIRAC/TransformationSystem/Agent/TransformationAgent.py,sha256=rUPyfX_Ip3ZUyBrmVBrYiddVmgeTx6gKiYPEzwUDOcY,33813
|
|
1055
1055
|
DIRAC/TransformationSystem/Agent/TransformationAgentsUtilities.py,sha256=XrgrjQWSDQm0uxG-wyEY-W0A_MBJyIE-22TafqrLP3A,2805
|
|
1056
|
-
DIRAC/TransformationSystem/Agent/TransformationCleaningAgent.py,sha256=
|
|
1056
|
+
DIRAC/TransformationSystem/Agent/TransformationCleaningAgent.py,sha256=AIzfICpz-siuIApZJ5w7biq3HanDcOFUGlSvPsSeYTc,32911
|
|
1057
1057
|
DIRAC/TransformationSystem/Agent/TransformationPlugin.py,sha256=EpWil1Bla9xdrJkhj61oUFDpGzyWfC8acW3tjBh5JpQ,11322
|
|
1058
1058
|
DIRAC/TransformationSystem/Agent/ValidateOutputDataAgent.py,sha256=tsE0yE2bqSKwdjJml3Mros-tMOfpSDr9Bt8R3MTeqRo,10108
|
|
1059
1059
|
DIRAC/TransformationSystem/Agent/WorkflowTaskAgent.py,sha256=UBNVVx0ZgiFnzAPCNC1dSuJXKkt2pPfpSqhy0CREFlg,1741
|
|
@@ -1098,13 +1098,10 @@ DIRAC/TransformationSystem/Utilities/__init__.py,sha256=CrAP4Orxp0lk-GXnu9Gm46BX
|
|
|
1098
1098
|
DIRAC/TransformationSystem/scripts/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
1099
1099
|
DIRAC/TransformationSystem/scripts/dirac_production_runjoblocal.py,sha256=HWgzcD07Q30nSzKDKH5EnH24Uqmt9_XLcnLa7fsI9YY,4782
|
|
1100
1100
|
DIRAC/TransformationSystem/scripts/dirac_transformation_add_files.py,sha256=hY7gaTvfRiNvT7zi1OG2hTFV36U0C5W3AWFcXmKMuhA,1553
|
|
1101
|
-
DIRAC/TransformationSystem/scripts/dirac_transformation_archive.py,sha256=FQbtVwPmk5ePlbu6KuRhzHg2IFowst2hT6JYzxMgLkE,790
|
|
1102
|
-
DIRAC/TransformationSystem/scripts/dirac_transformation_clean.py,sha256=b5O-efICep3Hum25sP4AHPxpvvcDSqhaYU0CkMi39dY,783
|
|
1103
1101
|
DIRAC/TransformationSystem/scripts/dirac_transformation_cli.py,sha256=qhLTZqbnZSrRai3J7102ZQUMJTNxJfSvdK1lb3BCnik,363
|
|
1104
1102
|
DIRAC/TransformationSystem/scripts/dirac_transformation_get_files.py,sha256=bV_vPkeu42ScP-rGXEeBT8JcmZS9O2ZifbHwQsIHECA,802
|
|
1105
1103
|
DIRAC/TransformationSystem/scripts/dirac_transformation_information.py,sha256=5scQLztRRXguv3iQ-Mzo8n__nYzb0OU97oETd0uaLGM,1956
|
|
1106
1104
|
DIRAC/TransformationSystem/scripts/dirac_transformation_recover_data.py,sha256=jpF0GGKG0Jb7C7sNv4oM2k69oofn3z_Y6z7rgtq6lJE,1854
|
|
1107
|
-
DIRAC/TransformationSystem/scripts/dirac_transformation_remove_output.py,sha256=wZLLP1fUD-TChB6hS_8XZJJ1lnXXRmoz0n2KQRsnUoM,824
|
|
1108
1105
|
DIRAC/TransformationSystem/scripts/dirac_transformation_replication.py,sha256=O0fUAR5Pg-Hu0jJV-H61jBez7RqD4jPoaenquPBTB5Q,1404
|
|
1109
1106
|
DIRAC/TransformationSystem/scripts/dirac_transformation_update_derived.py,sha256=S7E8tY2tz-5wU5S7oDpahOFXX_vtWTS4CiWr3Kw9qEY,1941
|
|
1110
1107
|
DIRAC/TransformationSystem/scripts/dirac_transformation_verify_outputdata.py,sha256=kQemCWo2-6XskhXjZuCh-1dmtyefq5fYgxibVr1uAhc,851
|
|
@@ -1125,33 +1122,33 @@ DIRAC/Workflow/Utilities/test/Test_Utilities.py,sha256=DNjFPpBmpojwCWhZSUSoG3AIh
|
|
|
1125
1122
|
DIRAC/WorkloadManagementSystem/ConfigTemplate.cfg,sha256=EpXTiHV-omMuMcWDzQzWZ_LmAZFMRTabfJpfZmVfzEA,9065
|
|
1126
1123
|
DIRAC/WorkloadManagementSystem/__init__.py,sha256=9-_-HOT_8S3i-TMmTR_gFVVlNyktBRk-S2qSuOBKoIc,50
|
|
1127
1124
|
DIRAC/WorkloadManagementSystem/Agent/JobAgent.py,sha256=Hi3zPfK9h7CwNO2pK4IABCqO_uShCIaKvZGlUdgsWPA,41034
|
|
1128
|
-
DIRAC/WorkloadManagementSystem/Agent/JobCleaningAgent.py,sha256=
|
|
1125
|
+
DIRAC/WorkloadManagementSystem/Agent/JobCleaningAgent.py,sha256=oY530fCi1Lq36UgDaLUcUt4SjRVwtcvyt_40wwyTxfk,14721
|
|
1129
1126
|
DIRAC/WorkloadManagementSystem/Agent/PilotLoggingAgent.py,sha256=ZIgvFpasGTh76GW3G7O4hKC_Kkm31uWymlH-MTT3AXg,10541
|
|
1130
1127
|
DIRAC/WorkloadManagementSystem/Agent/PilotStatusAgent.py,sha256=qY6TbYCPOFFXhHffmRJLNEbWvZPyg5Lc5B_8BbyQ7zc,9711
|
|
1131
1128
|
DIRAC/WorkloadManagementSystem/Agent/PilotSyncAgent.py,sha256=Q50axgfx_D9iF2hT0aNaJ1KA85idOluBeBWDcjR6j8c,4845
|
|
1132
1129
|
DIRAC/WorkloadManagementSystem/Agent/PushJobAgent.py,sha256=OkIIFnJrwUYCroWEc5bgAfsnGks98y0gO1GLKamBXO0,38820
|
|
1133
1130
|
DIRAC/WorkloadManagementSystem/Agent/SiteDirector.py,sha256=ZnbjKca8tWLekObALrsFXm7EoXAYxEpHSGRAbrqU5mk,45229
|
|
1134
|
-
DIRAC/WorkloadManagementSystem/Agent/StalledJobAgent.py,sha256=
|
|
1135
|
-
DIRAC/WorkloadManagementSystem/Agent/StatesAccountingAgent.py,sha256=
|
|
1131
|
+
DIRAC/WorkloadManagementSystem/Agent/StalledJobAgent.py,sha256=ybTMUqZCKOVfzMi9k8wvrl3KslnlSUWhTp6wWR3mt7E,24585
|
|
1132
|
+
DIRAC/WorkloadManagementSystem/Agent/StatesAccountingAgent.py,sha256=iNIlWQEDBk6R1S8oHOIusZUwxOwLtgwuzR_4s32-o5w,8707
|
|
1136
1133
|
DIRAC/WorkloadManagementSystem/Agent/TaskQueuesAgent.py,sha256=ypsmo233TFXq9IC5uz6pum7_joOh2gFPUYNmmCpukAY,943
|
|
1137
1134
|
DIRAC/WorkloadManagementSystem/Agent/__init__.py,sha256=Pp2qIXA0zZxJXBQwPEDUt23Y_ct5cjs77w8ZEV6Ll6M,56
|
|
1138
1135
|
DIRAC/WorkloadManagementSystem/Agent/test/Test_Agent_JobAgent.py,sha256=1bO-eK54mhCJOncS58vj6VhNLAF16_5wuXWeLxnVMxk,30686
|
|
1139
|
-
DIRAC/WorkloadManagementSystem/Agent/test/Test_Agent_JobCleaningAgent.py,sha256=
|
|
1136
|
+
DIRAC/WorkloadManagementSystem/Agent/test/Test_Agent_JobCleaningAgent.py,sha256=VwD3lGCEYeQuT-5wo02Yk11lR0dXmg0ObNCEvBZ-QSA,5415
|
|
1140
1137
|
DIRAC/WorkloadManagementSystem/Agent/test/Test_Agent_PilotLoggingAgent.py,sha256=KpvaqAaTaCXUpbdBpA_n7At3284XKYwx8GpC3Ah7cHg,8611
|
|
1141
1138
|
DIRAC/WorkloadManagementSystem/Agent/test/Test_Agent_PilotStatusAgent.py,sha256=qOA_U2NYvJprLdrUJirbEVSnvEF9-FuRXNi78MBoffc,2806
|
|
1142
1139
|
DIRAC/WorkloadManagementSystem/Agent/test/Test_Agent_PushJobAgent.py,sha256=YrQELLUPWq0IYjaZNAlSystsNaAidTV1k-_s1N2dAb8,14869
|
|
1143
1140
|
DIRAC/WorkloadManagementSystem/Agent/test/Test_Agent_SiteDirector.py,sha256=ynC8NJobwWCRzKAKnQi2qhnPzwQypZRzBrwKGtUmmhs,11440
|
|
1144
|
-
DIRAC/WorkloadManagementSystem/Agent/test/Test_Agent_StalledJobAgent.py,sha256=
|
|
1141
|
+
DIRAC/WorkloadManagementSystem/Agent/test/Test_Agent_StalledJobAgent.py,sha256=BgDP1um-5WLSJYDbyHgLUkZocN8TrrG6QvRcffzD02E,1829
|
|
1145
1142
|
DIRAC/WorkloadManagementSystem/Client/CPUNormalization.py,sha256=txBgRfnTAY5KykpKRrK1jp5x4FInWjv-Rja4R7Dqdis,5423
|
|
1146
1143
|
DIRAC/WorkloadManagementSystem/Client/DownloadInputData.py,sha256=JfidM3U2b0z64hk6j0VpQ7fh6eSkRjm1Hw8X-DAspwI,16303
|
|
1147
1144
|
DIRAC/WorkloadManagementSystem/Client/InputDataByProtocol.py,sha256=tjK6L8iNqWOBENcGJbG0yJsQYwGvFLRFcTMNnrusFAI,12837
|
|
1148
1145
|
DIRAC/WorkloadManagementSystem/Client/InputDataResolution.py,sha256=z8K8VKoUH4KtlTPe0mfyVsQKH6BQh80YIUhu61Fpgeg,6162
|
|
1149
1146
|
DIRAC/WorkloadManagementSystem/Client/JobManagerClient.py,sha256=ySi2lxiwuEf8gx3exIbS_HekJRvpXR7q3h2MdwsRcYA,689
|
|
1150
1147
|
DIRAC/WorkloadManagementSystem/Client/JobMinorStatus.py,sha256=adfPJVGauByrHg1LLHpaMtZOY_Nh3X5Q1w62seSTMPc,2105
|
|
1151
|
-
DIRAC/WorkloadManagementSystem/Client/JobMonitoringClient.py,sha256=
|
|
1148
|
+
DIRAC/WorkloadManagementSystem/Client/JobMonitoringClient.py,sha256=N_i0e5rzNpUJgPDm7HKHQ2OfX_fJQC-r8zU3yNIAyH4,2483
|
|
1152
1149
|
DIRAC/WorkloadManagementSystem/Client/JobReport.py,sha256=8jxCXdU1rHeYeHMkjc_5b2zAPBWT3VgNR4wkXB5E2NY,5870
|
|
1153
1150
|
DIRAC/WorkloadManagementSystem/Client/JobStateUpdateClient.py,sha256=H5nfOWhp5YlAh-bpndvebcDy60RXoB3nLIAKu4kMK4I,1130
|
|
1154
|
-
DIRAC/WorkloadManagementSystem/Client/JobStatus.py,sha256=
|
|
1151
|
+
DIRAC/WorkloadManagementSystem/Client/JobStatus.py,sha256=JieQ7wobGexHkQ_HJi3ga1COftAz3bZ367toVmgmp_g,2807
|
|
1155
1152
|
DIRAC/WorkloadManagementSystem/Client/Limiter.py,sha256=xnxR9d_TDb8Z6iAaUltCMxmpSmQBukXfFeEDf2-m6-o,10714
|
|
1156
1153
|
DIRAC/WorkloadManagementSystem/Client/Matcher.py,sha256=iw6COWP__53z6of5syU4ElmOUCtih0xWxh1VDrd-M8k,17285
|
|
1157
1154
|
DIRAC/WorkloadManagementSystem/Client/MatcherClient.py,sha256=E4Szdf-gNmDZnCmR3aiakBNqX7LU0lHlFXBTh2qpqp8,1362
|
|
@@ -1159,11 +1156,11 @@ DIRAC/WorkloadManagementSystem/Client/PilotManagerClient.py,sha256=_VKXvuw20YGiX
|
|
|
1159
1156
|
DIRAC/WorkloadManagementSystem/Client/PilotScopes.py,sha256=yR8JWbtTBuLTmzlje5enaiP1z_MomYdS6QWH3qjAEJo,538
|
|
1160
1157
|
DIRAC/WorkloadManagementSystem/Client/PilotStatus.py,sha256=-fURi5vNAIe6tZt256VOEEDncAaOrKkcOOdODpf55Do,1049
|
|
1161
1158
|
DIRAC/WorkloadManagementSystem/Client/PoolXMLSlice.py,sha256=oUAoGX3rjDuQMVvAw7LYeaQ44sIk6Ur2BI403D8kWOw,2706
|
|
1162
|
-
DIRAC/WorkloadManagementSystem/Client/SandboxStoreClient.py,sha256=
|
|
1159
|
+
DIRAC/WorkloadManagementSystem/Client/SandboxStoreClient.py,sha256=w-HhHTe6uiyyIh11JO3FnOgHYOfX-Ekb_zKmXAdkc1U,9829
|
|
1163
1160
|
DIRAC/WorkloadManagementSystem/Client/ServerUtils.py,sha256=dMWPI-R-kIEMxnMqwfg5K9HoxPpQApSSn-5KLMoSE5k,543
|
|
1164
1161
|
DIRAC/WorkloadManagementSystem/Client/TornadoPilotLoggingClient.py,sha256=HRg4CEZjLpWjlEtZ4Su9G5b3qLfl0fczMwmuhARAvRg,599
|
|
1165
1162
|
DIRAC/WorkloadManagementSystem/Client/WMSAdministratorClient.py,sha256=cuf1LmCTSkGneh2mJJSoB68PpBnqAsOJ5gRARxYRKbI,731
|
|
1166
|
-
DIRAC/WorkloadManagementSystem/Client/WMSClient.py,sha256=
|
|
1163
|
+
DIRAC/WorkloadManagementSystem/Client/WMSClient.py,sha256=7C3Tq0Nz4gsIAUngPTaStRdWPp4rFCoEMws4e-COZoU,9307
|
|
1167
1164
|
DIRAC/WorkloadManagementSystem/Client/__init__.py,sha256=4gL5nAGDaZDdL0wlTFBQg6jCGQA2xHT3gD-gpY5MfH0,57
|
|
1168
1165
|
DIRAC/WorkloadManagementSystem/Client/JobState/CachedJobState.py,sha256=NVHsvGezMDWAsjPt5Lm1973ybleyH1kHWqhqiiMgquM,12849
|
|
1169
1166
|
DIRAC/WorkloadManagementSystem/Client/JobState/JobManifest.py,sha256=dV8nH5rWsdvOOOFuOX3vhOZRC879zUvrSv11vMp6CuU,8952
|
|
@@ -1203,7 +1200,7 @@ DIRAC/WorkloadManagementSystem/Executor/Base/OptimizerExecutor.py,sha256=2PnxX_C
|
|
|
1203
1200
|
DIRAC/WorkloadManagementSystem/Executor/Base/__init__.py,sha256=Pp2qIXA0zZxJXBQwPEDUt23Y_ct5cjs77w8ZEV6Ll6M,56
|
|
1204
1201
|
DIRAC/WorkloadManagementSystem/Executor/test/Test_Executor.py,sha256=ZW2vXrLBTRHYVL1DkKQOW2vG4cnC1g2O1YPrjpghgpA,7815
|
|
1205
1202
|
DIRAC/WorkloadManagementSystem/FutureClient/JobMonitoringClient.py,sha256=3Mjq3h3pjrKZ2tMbr-mi2XVgJRp81v_Hkhv3EyG1k8A,874
|
|
1206
|
-
DIRAC/WorkloadManagementSystem/FutureClient/JobStateUpdateClient.py,sha256=
|
|
1203
|
+
DIRAC/WorkloadManagementSystem/FutureClient/JobStateUpdateClient.py,sha256=PG3JkQPgmPacjTLTCHTobZeKys4nxObs0D_Axfrl2Uw,6650
|
|
1207
1204
|
DIRAC/WorkloadManagementSystem/FutureClient/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
1208
1205
|
DIRAC/WorkloadManagementSystem/JobWrapper/JobExecutionCoordinator.py,sha256=Y64YnkrKklOkXnV5wKsgzBONFljVJ0ByFVUMFNkiGAU,2461
|
|
1209
1206
|
DIRAC/WorkloadManagementSystem/JobWrapper/JobWrapper.py,sha256=wAxQT5NMJdt94X_YHbSN-uCLgcJW6jC6NhbqRGo-Km8,74716
|
|
@@ -1222,10 +1219,10 @@ DIRAC/WorkloadManagementSystem/JobWrapper/test/script-RESC.sh,sha256=kiY-Af9a1bs
|
|
|
1222
1219
|
DIRAC/WorkloadManagementSystem/JobWrapper/test/script-fail.sh,sha256=f1R0qtgJgOI3AbEoxGBqN8ClA6Y8Bz8tHlBXrxjySDs,63
|
|
1223
1220
|
DIRAC/WorkloadManagementSystem/JobWrapper/test/script-long.sh,sha256=yzaSDg7P5hGv9SSCBsl8FLuj6-udCcpd0qId9kSv4Nc,41
|
|
1224
1221
|
DIRAC/WorkloadManagementSystem/JobWrapper/test/script.sh,sha256=fbYLJJTVw9K7f9NdMvW_a-NkBI6SPup4NebPFYFKsbQ,9
|
|
1225
|
-
DIRAC/WorkloadManagementSystem/Service/JobManagerHandler.py,sha256=
|
|
1222
|
+
DIRAC/WorkloadManagementSystem/Service/JobManagerHandler.py,sha256=wXuBomLurY_EgYp69CrdrWR3pCr25nHVypzKa-oGJzo,21111
|
|
1226
1223
|
DIRAC/WorkloadManagementSystem/Service/JobMonitoringHandler.py,sha256=sFJOme3KDLeAppH_AF5dTt8om_g_zUSQvPnIs9BAQkc,7586
|
|
1227
1224
|
DIRAC/WorkloadManagementSystem/Service/JobPolicy.py,sha256=o88xR3roe_JRB5F53oxb1LIuqY2qCCw6w5njprrJFMI,8057
|
|
1228
|
-
DIRAC/WorkloadManagementSystem/Service/JobStateUpdateHandler.py,sha256=
|
|
1225
|
+
DIRAC/WorkloadManagementSystem/Service/JobStateUpdateHandler.py,sha256=TiSnLQTNd-HgAhPoqwebzN6G95pVXXgETJ5Hbw29XnY,9226
|
|
1229
1226
|
DIRAC/WorkloadManagementSystem/Service/MatcherHandler.py,sha256=L0sdRdoSh2qa7IA5tGIPAhlJoKLB4JecCTezkaQu1tc,4554
|
|
1230
1227
|
DIRAC/WorkloadManagementSystem/Service/OptimizationMindHandler.py,sha256=7FbhdRkerS2CM0HnIDSUo_OqRyEnjgol9RR7WfVK5Tc,8592
|
|
1231
1228
|
DIRAC/WorkloadManagementSystem/Service/PilotManagerHandler.py,sha256=XYbWGlL-9wmk2FMkdGKZQgqkDjHbFEARem4mRdOaSN4,14846
|
|
@@ -1240,16 +1237,17 @@ DIRAC/WorkloadManagementSystem/Service/WMSAdministratorHandler.py,sha256=Y63hqyL
|
|
|
1240
1237
|
DIRAC/WorkloadManagementSystem/Service/WMSUtilities.py,sha256=VMSOEHkpOrNB_VIGESnxMYdnDjkmR4Qbnf_H7Yp0m88,4528
|
|
1241
1238
|
DIRAC/WorkloadManagementSystem/Service/__init__.py,sha256=IRaXIxMoS1SbRehm7ONo87SD1l44VBmowjbfkChvdsc,58
|
|
1242
1239
|
DIRAC/WorkloadManagementSystem/Utilities/JobModel.py,sha256=sdlbeiHLYkuWTwoGftSQn4SjVw6cBs28A8Q5dHGjX5U,8477
|
|
1243
|
-
DIRAC/WorkloadManagementSystem/Utilities/JobParameters.py,sha256=
|
|
1240
|
+
DIRAC/WorkloadManagementSystem/Utilities/JobParameters.py,sha256=JW3AAEtBJn1gIO_rm2Ft5qqjfLteIo3HpQtGNZBfhxE,8365
|
|
1244
1241
|
DIRAC/WorkloadManagementSystem/Utilities/JobStatusUtility.py,sha256=CMTbHWTOSURzyg_ytNPDdjNqZ4qiI8SVoRabUuZTnXk,10198
|
|
1245
1242
|
DIRAC/WorkloadManagementSystem/Utilities/ParametricJob.py,sha256=BnH1k0lPZnQMuwjrnUB8V0g8d3QuwdwFaQbNiRbUpgU,7387
|
|
1246
1243
|
DIRAC/WorkloadManagementSystem/Utilities/PilotCStoJSONSynchronizer.py,sha256=aJr2YdE5fb_gieejEyqOg_zcB9MFW5ikzVyKVjnGBN4,9838
|
|
1247
|
-
DIRAC/WorkloadManagementSystem/Utilities/PilotWrapper.py,sha256=
|
|
1244
|
+
DIRAC/WorkloadManagementSystem/Utilities/PilotWrapper.py,sha256=VcvQTpeyTbVYqSsPQDyAt37N2CaEAnIuvbR6yk4kYk8,15465
|
|
1248
1245
|
DIRAC/WorkloadManagementSystem/Utilities/QueueUtilities.py,sha256=J5-n_lvWbW_TRjrlqp8hx1SHEaXDW2Dxp3R1hBBrWnE,12082
|
|
1249
1246
|
DIRAC/WorkloadManagementSystem/Utilities/RemoteRunner.py,sha256=7FcEtlYSJMzdbLIFBUKD-j_wqRHya-ISqk8w-JRy3kw,12159
|
|
1250
1247
|
DIRAC/WorkloadManagementSystem/Utilities/Utils.py,sha256=A6M-GnyC5LXeO0pJxwzqNdLjZLMC3WZ1o7dVFXumrsU,5331
|
|
1251
1248
|
DIRAC/WorkloadManagementSystem/Utilities/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
1252
|
-
DIRAC/WorkloadManagementSystem/Utilities/
|
|
1249
|
+
DIRAC/WorkloadManagementSystem/Utilities/jobAdministration.py,sha256=wBkf2gSaSOl5QZ3tecQOAgRCbGa3F-96K2HRUEmS6_A,5515
|
|
1250
|
+
DIRAC/WorkloadManagementSystem/Utilities/test/Test_JobAdministration.py,sha256=m4ZwTx6xKtUDIJu93MRmATBncVPbWfjPWp_CM6vAKuk,910
|
|
1253
1251
|
DIRAC/WorkloadManagementSystem/Utilities/test/Test_JobModel.py,sha256=dY7rRU8iOVYEgVLLXwjbx6vCUUHUZqOytDQO6ziarM8,8200
|
|
1254
1252
|
DIRAC/WorkloadManagementSystem/Utilities/test/Test_JobStatusUtility.py,sha256=3Oj4zhiysp-Qiax1BsXK1fEyCuppln4tT5hmXx_BFxA,7931
|
|
1255
1253
|
DIRAC/WorkloadManagementSystem/Utilities/test/Test_ParametricJob.py,sha256=mo_u-m4lM65c1Sgq6As4NpIiKRC0ny1oeBVYRBo61CM,3334
|
|
@@ -1297,9 +1295,9 @@ DIRAC/tests/Workflow/Integration/exe-script.py,sha256=B_slYdTocEzqfQLRhwuPiLyYUn
|
|
|
1297
1295
|
DIRAC/tests/Workflow/Integration/helloWorld.py,sha256=tBgEHH3ZF7ZiTS57gtmm3DW-Qxgm_57HWHpM-Y8XSws,205
|
|
1298
1296
|
DIRAC/tests/Workflow/Regression/helloWorld.py,sha256=69eCgFuVSYo-mK3Dj2dw1c6g86sF5FksKCf8V2aGVoM,509
|
|
1299
1297
|
DIRAC/tests/Workflow/Regression/helloWorld.xml,sha256=xwydIcFTAHIX-YPfQfyxuQ7hzvIO3IhR3UAF7ORgkGg,5310
|
|
1300
|
-
dirac-9.0.
|
|
1301
|
-
dirac-9.0.
|
|
1302
|
-
dirac-9.0.
|
|
1303
|
-
dirac-9.0.
|
|
1304
|
-
dirac-9.0.
|
|
1305
|
-
dirac-9.0.
|
|
1298
|
+
dirac-9.0.0a63.dist-info/licenses/LICENSE,sha256=uyr4oV6jmjUeepXZPPjkJRwa5q5MrI7jqJz5sVXNblQ,32452
|
|
1299
|
+
dirac-9.0.0a63.dist-info/METADATA,sha256=LB_n-DgnsppVYXFK1WiVyIk3DuUztFiXgvGIS8h0smg,9982
|
|
1300
|
+
dirac-9.0.0a63.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
|
|
1301
|
+
dirac-9.0.0a63.dist-info/entry_points.txt,sha256=hupzIL8aVmjK3nn7RLKdhcaiPmLOiD3Kulh3CSDHKmw,16492
|
|
1302
|
+
dirac-9.0.0a63.dist-info/top_level.txt,sha256=RISrnN9kb_mPqmVu8_o4jF-DSX8-h6AcgfkO9cgfkHA,6
|
|
1303
|
+
dirac-9.0.0a63.dist-info/RECORD,,
|
|
@@ -145,13 +145,10 @@ dirac-status-component = DIRAC.FrameworkSystem.scripts.dirac_status_component:ma
|
|
|
145
145
|
dirac-stop-component = DIRAC.FrameworkSystem.scripts.dirac_stop_component:main [server]
|
|
146
146
|
dirac-sys-sendmail = DIRAC.FrameworkSystem.scripts.dirac_sys_sendmail:main [admin]
|
|
147
147
|
dirac-transformation-add-files = DIRAC.TransformationSystem.scripts.dirac_transformation_add_files:main [admin]
|
|
148
|
-
dirac-transformation-archive = DIRAC.TransformationSystem.scripts.dirac_transformation_archive:main [admin]
|
|
149
|
-
dirac-transformation-clean = DIRAC.TransformationSystem.scripts.dirac_transformation_clean:main [admin]
|
|
150
148
|
dirac-transformation-cli = DIRAC.TransformationSystem.scripts.dirac_transformation_cli:main [admin]
|
|
151
149
|
dirac-transformation-get-files = DIRAC.TransformationSystem.scripts.dirac_transformation_get_files:main [admin]
|
|
152
150
|
dirac-transformation-information = DIRAC.TransformationSystem.scripts.dirac_transformation_information:main [admin]
|
|
153
151
|
dirac-transformation-recover-data = DIRAC.TransformationSystem.scripts.dirac_transformation_recover_data:main [admin]
|
|
154
|
-
dirac-transformation-remove-output = DIRAC.TransformationSystem.scripts.dirac_transformation_remove_output:main [admin]
|
|
155
152
|
dirac-transformation-replication = DIRAC.TransformationSystem.scripts.dirac_transformation_replication:main [admin]
|
|
156
153
|
dirac-transformation-update-derived = DIRAC.TransformationSystem.scripts.dirac_transformation_update_derived:main [admin]
|
|
157
154
|
dirac-transformation-verify-outputdata = DIRAC.TransformationSystem.scripts.dirac_transformation_verify_outputdata:main [admin]
|