DIRAC 9.0.0a62__py3-none-any.whl → 9.0.0a64__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.
Files changed (33) hide show
  1. DIRAC/ConfigurationSystem/Client/Helpers/Registry.py +1 -1
  2. DIRAC/Core/Security/DiracX.py +1 -1
  3. DIRAC/Core/Tornado/Client/ClientSelector.py +4 -1
  4. DIRAC/Core/Utilities/Extensions.py +10 -1
  5. DIRAC/Interfaces/API/Dirac.py +30 -13
  6. DIRAC/Interfaces/API/Job.py +1 -0
  7. DIRAC/TransformationSystem/Agent/TransformationCleaningAgent.py +9 -12
  8. DIRAC/WorkloadManagementSystem/Agent/JobCleaningAgent.py +7 -4
  9. DIRAC/WorkloadManagementSystem/Agent/StalledJobAgent.py +3 -26
  10. DIRAC/WorkloadManagementSystem/Agent/StatesAccountingAgent.py +9 -2
  11. DIRAC/WorkloadManagementSystem/Agent/test/Test_Agent_JobCleaningAgent.py +7 -9
  12. DIRAC/WorkloadManagementSystem/Agent/test/Test_Agent_StalledJobAgent.py +1 -2
  13. DIRAC/WorkloadManagementSystem/Client/JobMonitoringClient.py +4 -2
  14. DIRAC/WorkloadManagementSystem/Client/JobStatus.py +0 -59
  15. DIRAC/WorkloadManagementSystem/Client/SandboxStoreClient.py +25 -1
  16. DIRAC/WorkloadManagementSystem/Client/WMSClient.py +2 -3
  17. DIRAC/WorkloadManagementSystem/FutureClient/JobStateUpdateClient.py +2 -14
  18. DIRAC/WorkloadManagementSystem/Service/JobManagerHandler.py +27 -128
  19. DIRAC/WorkloadManagementSystem/Service/JobStateUpdateHandler.py +0 -16
  20. DIRAC/WorkloadManagementSystem/Utilities/JobParameters.py +1 -1
  21. DIRAC/WorkloadManagementSystem/Utilities/PilotWrapper.py +2 -0
  22. DIRAC/WorkloadManagementSystem/Utilities/jobAdministration.py +138 -0
  23. DIRAC/WorkloadManagementSystem/Utilities/test/Test_JobAdministration.py +28 -0
  24. {dirac-9.0.0a62.dist-info → dirac-9.0.0a64.dist-info}/METADATA +2 -1
  25. {dirac-9.0.0a62.dist-info → dirac-9.0.0a64.dist-info}/RECORD +29 -31
  26. {dirac-9.0.0a62.dist-info → dirac-9.0.0a64.dist-info}/entry_points.txt +0 -3
  27. DIRAC/TransformationSystem/scripts/dirac_transformation_archive.py +0 -30
  28. DIRAC/TransformationSystem/scripts/dirac_transformation_clean.py +0 -30
  29. DIRAC/TransformationSystem/scripts/dirac_transformation_remove_output.py +0 -30
  30. DIRAC/WorkloadManagementSystem/Utilities/test/Test_JobManager.py +0 -58
  31. {dirac-9.0.0a62.dist-info → dirac-9.0.0a64.dist-info}/WHEEL +0 -0
  32. {dirac-9.0.0a62.dist-info → dirac-9.0.0a64.dist-info}/licenses/LICENSE +0 -0
  33. {dirac-9.0.0a62.dist-info → dirac-9.0.0a64.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
- def __deleteJob(self, jobID, force=False):
434
- """Set the job status to "Deleted"
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 __killJob(self, jobID, sendKillCommand=True, force=False):
469
- """Kill one job
435
+ def export_deleteJob(self, jobIDs, force=False):
436
+ """Delete jobs specified in the jobIDs list
470
437
 
471
- :param int jobID: job ID
472
- :param bool sendKillCommand: send kill command
438
+ :param list jobIDs: list of job IDs
473
439
 
474
- :return: S_OK()/S_ERROR()
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
- :param list jobIDList: job IDs
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(jobList, right)
504
-
505
- badIDs = []
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
- if nonauthJobList or badIDs:
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
- types_deleteJob = []
462
+ types_killJob = []
567
463
 
568
- def export_deleteJob(self, jobIDs, force=False):
569
- """Delete jobs specified in the jobIDs list
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
- return self._kill_delete_jobs(jobIDs, RIGHT_DELETE, force=force)
472
+ jobList = self.__getJobList(jobIDs)
473
+ if not jobList:
474
+ self.log.warn("No jobs specified")
475
+ return S_OK([])
577
476
 
578
- ###########################################################################
579
- types_killJob = []
477
+ validJobList, invalidJobList, nonauthJobList, ownerJobList = self.jobPolicy.evaluateJobRights(
478
+ jobList, RIGHT_KILL
479
+ )
580
480
 
581
- def export_killJob(self, jobIDs, force=False):
582
- """Kill jobs specified in the jobIDs list
481
+ result = kill_delete_jobs(RIGHT_KILL, validJobList, nonauthJobList, force=force)
583
482
 
584
- :param list jobIDs: list of job IDs
483
+ result["requireProxyUpload"] = len(ownerJobList) > 0 and self.__checkIfProxyUploadIsRequired()
585
484
 
586
- :return: S_OK/S_ERROR
587
- """
485
+ if invalidJobList:
486
+ result["InvalidJobIDs"] = invalidJobList
588
487
 
589
- return self._kill_delete_jobs(jobIDs, RIGHT_KILL, force=force)
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
 
@@ -2,7 +2,7 @@
2
2
 
3
3
  import multiprocessing
4
4
 
5
- from DIRAC import gConfig, gLogger, S_OK
5
+ from DIRAC import S_OK, gConfig, gLogger
6
6
  from DIRAC.Core.Utilities.List import fromChar
7
7
 
8
8
 
@@ -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.0a62
3
+ Version: 9.0.0a64
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=ri-pYwu6Z-zqdP09aqGi3uQe6RKr1gXichz8lrbNb40,20775
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=7m5Lv5Nke2amyXdGhkCAKK7-D3qhbBGIklWXfcVm3cE,5026
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=xTY99OTsAFr6vZqyAfnQTJYc66mtBi00lmvKCatDBvk,3875
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=v_AcmuztiJ0FWsf1QACIIleYhVXyr16EQVblUv8nTLs,7196
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,9 +594,9 @@ 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=-vJ8RkQsPl1eJ5LV5v3321hivgYwc0ELtR1_KvZofPU,93891
597
+ DIRAC/Interfaces/API/Dirac.py,sha256=0ZB3s8k_kOdN3HksEyimHNrcntk8zNQQbsQio93pXpM,94786
598
598
  DIRAC/Interfaces/API/DiracAdmin.py,sha256=PDwWl1KCckL2xhLodeWJhVS4ZondNvfdbTUEE3pukXA,28135
599
- DIRAC/Interfaces/API/Job.py,sha256=Pjyrbg5q1H0qVHdT4PbJHOaUEN1bcpCTpuG1kDu9yrw,50591
599
+ DIRAC/Interfaces/API/Job.py,sha256=FFYNMWaWvcC9ZGDQ2gZhpnFBijjRUFZvcyIIU4PQqC8,50650
600
600
  DIRAC/Interfaces/API/__init__.py,sha256=l_0g05W4nsJ9-kvp9yKYsbdLz3EvWczOfdycoPnwlvU,566
601
601
  DIRAC/Interfaces/API/test/Test_DIRAC.py,sha256=-0SQ7G-LlPV3zT9pP0fUnUe71BKOpYDKIUWzj96NSGI,4193
602
602
  DIRAC/Interfaces/API/test/Test_JobAPI.py,sha256=Fu1r0bCXhMc_W-Vbw-S9e3xEdp56JSKVlqeM91S7CFU,4749
@@ -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=0cHl1hEyUXmOKHOoAqdPFRFsaGp3kaTIPGYUDr4k31w,33074
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=i2jm_guJFt0Yk_hUF0TEBi_9tdueUzuBHUx5wgpSQtg,14524
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=GJwnTtYvba9k21L9KxElNIEneJd2sWoJEjhmNgLm-TM,25230
1135
- DIRAC/WorkloadManagementSystem/Agent/StatesAccountingAgent.py,sha256=vQBJSgjFJtSLL5jfmQXW2w2RDfbN6oLV3oSlCmWK08Y,8353
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=Dlic9ApwWMwodm3WBKyVzWH0zlBqvvyGZXZhWp5ZYTw,5574
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=uLgHSA3ZITeNxlPdgAYHjgUsL3Xa74g8Oy-0JTbX3K4,1938
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=o3tcNpech1ntZwhj3qe_pN4R-jTgvWHpa6mqMrfzQ58,2400
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=GhAIZXhP4giA0r0aIDEYj79Wa0y0hUW2dxVdcxfByIo,4839
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=vJGxAZjR-OMZWD_OFrrWOCddyuYDgaMlKeeVXNQGsNM,8998
1159
+ DIRAC/WorkloadManagementSystem/Client/SandboxStoreClient.py,sha256=F3uRrq3KQ6pF9qmcOs7vGWegi2Nx_4IfLXtf6WPFJN0,9859
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=OUWiv-kxolqgxLXYwUFtuwUYVkMUVHn9ePEZQ4gol-E,9308
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=tb0oz3uewK2laHYu-xwSWGPZ0ejXhfEUf6jV3x-loCM,7033
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=DNdlWGMdorTZ7W5otWVJZ9mazjPa4QHvyVGP7ku6JGA,25726
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=p-dLY4GI4H8I5joOel5ZUf2JBz-BDoYmbn-6BJ_4FQE,9829
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=u7eEWu9Blll__EipyU5U0GAGrdfndWz6yVEeV3m25gw,8365
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=XWE_jHLgfi0RCCwuNKppyopO5f0AugoEkHJYT52XBhA,15338
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/test/Test_JobManager.py,sha256=e5hSBh-9_aLMyWhnWeZ3htUTtE2HpYf26mUvOGVimfs,2008
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.0a62.dist-info/licenses/LICENSE,sha256=uyr4oV6jmjUeepXZPPjkJRwa5q5MrI7jqJz5sVXNblQ,32452
1301
- dirac-9.0.0a62.dist-info/METADATA,sha256=csoT6u7YWx4v6oTl94OcxwsXNrHhE9vOsJGKLkRz7Yo,9957
1302
- dirac-9.0.0a62.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
1303
- dirac-9.0.0a62.dist-info/entry_points.txt,sha256=rTtMPd5AGCg3zNaKE60PuEVFkSRzQlRG-DC_v9FCylM,16824
1304
- dirac-9.0.0a62.dist-info/top_level.txt,sha256=RISrnN9kb_mPqmVu8_o4jF-DSX8-h6AcgfkO9cgfkHA,6
1305
- dirac-9.0.0a62.dist-info/RECORD,,
1298
+ dirac-9.0.0a64.dist-info/licenses/LICENSE,sha256=uyr4oV6jmjUeepXZPPjkJRwa5q5MrI7jqJz5sVXNblQ,32452
1299
+ dirac-9.0.0a64.dist-info/METADATA,sha256=IMy_Ti0nyOeTaXc0KqADf7e5VkZxyTyub-cZNohsfvc,9982
1300
+ dirac-9.0.0a64.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
1301
+ dirac-9.0.0a64.dist-info/entry_points.txt,sha256=hupzIL8aVmjK3nn7RLKdhcaiPmLOiD3Kulh3CSDHKmw,16492
1302
+ dirac-9.0.0a64.dist-info/top_level.txt,sha256=RISrnN9kb_mPqmVu8_o4jF-DSX8-h6AcgfkO9cgfkHA,6
1303
+ dirac-9.0.0a64.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]