DIRAC 9.0.0a68__py3-none-any.whl → 9.0.1__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.
@@ -1,7 +1,7 @@
1
1
  import time
2
2
 
3
3
  from DIRAC.ConfigurationSystem.Client.ConfigurationData import gConfigurationData
4
- from DIRAC.ConfigurationSystem.Client.PathFinder import getGatewayURLs
4
+ from DIRAC.ConfigurationSystem.Client.PathFinder import getGatewayURLs, groupURLsByPriority
5
5
  from DIRAC.Core.Utilities import List
6
6
  from DIRAC.Core.Utilities.EventDispatcher import gEventDispatcher
7
7
  from DIRAC.Core.Utilities.ReturnValues import S_ERROR, S_OK
@@ -138,7 +138,9 @@ class RefresherBase:
138
138
  if not initialServerList:
139
139
  return S_OK()
140
140
 
141
- randomServerList = List.randomize(initialServerList)
141
+ randomServerList = []
142
+ for urlGroup in groupURLsByPriority(initialServerList):
143
+ randomServerList.extend(List.randomize(urlGroup))
142
144
  gLogger.debug(f"Randomized server list is {', '.join(randomServerList)}")
143
145
 
144
146
  for sServer in randomServerList:
@@ -12,7 +12,7 @@ class DatasetManager:
12
12
  _tables["FC_MetaDatasets"] = {
13
13
  "Fields": {
14
14
  "DatasetID": "INT AUTO_INCREMENT",
15
- "DatasetName": "VARCHAR(128) CHARACTER SET utfmb4 COLLATE utf8mb4_bin NOT NULL",
15
+ "DatasetName": "VARCHAR(128) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL",
16
16
  "MetaQuery": "VARCHAR(512)",
17
17
  "DirID": "INT NOT NULL DEFAULT 0",
18
18
  "TotalSize": "BIGINT UNSIGNED NOT NULL",
@@ -41,6 +41,7 @@ class CreateMovingRequest:
41
41
  self.flags = [
42
42
  ("C", "CheckMigration", "Ensure the LFNs are migrated to tape before removing any replicas"),
43
43
  ("X", "Execute", "Put Requests, else dryrun"),
44
+ ("", "SourceOnly", "Only treat files that are already at the Source-SE"),
44
45
  ]
45
46
  self.registerSwitchesAndParseCommandLine()
46
47
  self.getLFNList()
@@ -208,6 +209,7 @@ class CreateMovingRequest:
208
209
 
209
210
  replicate = Operation()
210
211
  replicate.Type = "ReplicateAndRegister"
212
+ replicate.SourceSE = ",".join(self.switches.get("SourceSE", []))
211
213
  replicate.TargetSE = self.switches.get("TargetSE")
212
214
  self.addLFNs(replicate, lfnChunk, addPFN=True)
213
215
  request.addOperation(replicate)
@@ -1463,9 +1463,8 @@ class Dirac(API):
1463
1463
  res = JobMonitoringClient().getJobsStatus(jobIDs)
1464
1464
  if not res["OK"]:
1465
1465
  return res
1466
- js = {k: v["Status"] for k, v in res["Value"].items()}
1467
1466
  # then filter
1468
- filteredJobs.update(_filterJobStateTransition(js, filterState))
1467
+ filteredJobs.update(_filterJobStateTransition(res["Value"], filterState))
1469
1468
 
1470
1469
  return WMSClient(useCertificates=self.useCertificates).deleteJob(list(filteredJobs))
1471
1470
 
@@ -1496,9 +1495,8 @@ class Dirac(API):
1496
1495
  res = JobMonitoringClient().getJobsStatus(jobIDs)
1497
1496
  if not res["OK"]:
1498
1497
  return res
1499
- js = {k: v["Status"] for k, v in res["Value"].items()}
1500
1498
  # then filter
1501
- jobIDsToReschedule = _filterJobStateTransition(js, JobStatus.RESCHEDULED)
1499
+ jobIDsToReschedule = _filterJobStateTransition(res["Value"], JobStatus.RESCHEDULED)
1502
1500
 
1503
1501
  return WMSClient(useCertificates=self.useCertificates).rescheduleJob(jobIDsToReschedule)
1504
1502
 
@@ -1528,9 +1526,8 @@ class Dirac(API):
1528
1526
  res = JobMonitoringClient().getJobsStatus(jobIDs)
1529
1527
  if not res["OK"]:
1530
1528
  return res
1531
- js = {k: v["Status"] for k, v in res["Value"].items()}
1532
1529
  # then filter
1533
- filteredJobs.update(_filterJobStateTransition(js, filterState))
1530
+ filteredJobs.update(_filterJobStateTransition(res["Value"], filterState))
1534
1531
 
1535
1532
  return WMSClient(useCertificates=self.useCertificates).killJob(list(filteredJobs))
1536
1533
 
@@ -17,7 +17,6 @@ Example:
17
17
  'LocalAccount': 'prod006',
18
18
  'LocalBatchID': '',
19
19
  'LocalJobID': '277821.ce.labmc.inf.utfsm.cl',
20
- 'MatcherServiceTime': '2.27646398544',
21
20
  'Memory(kB)': '858540kB',
22
21
  'ModelName': 'Intel(R)Xeon(R)CPU5110@1.60GHz',
23
22
  'NormCPUTime(s)': '1.02',
@@ -48,13 +48,13 @@ from DIRAC.RequestManagementSystem.private.RequestTask import RequestTask
48
48
  # # agent name
49
49
  AGENT_NAME = "RequestManagement/RequestExecutingAgent"
50
50
  # # requests/cycle
51
- REQUESTSPERCYCLE = 100
51
+ REQUESTSPERCYCLE = 300
52
52
  # # minimal nb of subprocess running
53
- MINPROCESS = 20
53
+ MINPROCESS = 50
54
54
  # # maximal nb of subprocess executed same time
55
- MAXPROCESS = 20
55
+ MAXPROCESS = 50
56
56
  # # ProcessPool queue size
57
- QUEUESIZE = 20
57
+ QUEUESIZE = 100
58
58
  # # file timeout
59
59
  FILETIMEOUT = 300
60
60
  # # operation timeout
@@ -62,7 +62,9 @@ OPERATIONTIMEOUT = 300
62
62
  # # ProcessPool finalization timeout
63
63
  POOLTIMEOUT = 900
64
64
  # # ProcessPool sleep time
65
- POOLSLEEP = 5
65
+ POOLSLEEP = 1
66
+ # # Fetch multiple requests at once from the DB. Otherwise, one by one
67
+ BULKREQUEST = 300
66
68
 
67
69
 
68
70
  class AgentConfigError(Exception):
@@ -108,7 +110,7 @@ class RequestExecutingAgent(AgentModule):
108
110
  self.__poolSleep = POOLSLEEP
109
111
  self.__requestClient = None
110
112
  # Size of the bulk if use of getRequests. If 0, use getRequest
111
- self.__bulkRequest = 0
113
+ self.__bulkRequest = BULKREQUEST
112
114
  self.__rmsMonitoring = False
113
115
 
114
116
  def processPool(self):
@@ -44,19 +44,19 @@ Agents
44
44
  {
45
45
  PollingTime = 60
46
46
  # number of Requests to execute per cycle
47
- RequestsPerCycle = 100
47
+ RequestsPerCycle = 300
48
48
  # minimum number of workers process in the ProcessPool
49
- MinProcess = 20
49
+ MinProcess = 50
50
50
  # maximum number of workers process in the ProcessPool; recommended to set it to the same value as MinProcess
51
- MaxProcess = 20
51
+ MaxProcess = 50
52
52
  # queue depth of the ProcessPool
53
- ProcessPoolQueueSize = 20
53
+ ProcessPoolQueueSize = 100
54
54
  # timeout for the ProcessPool finalization
55
55
  ProcessPoolTimeout = 900
56
56
  # sleep time before retrying to get a free slot in the ProcessPool
57
- ProcessPoolSleep = 5
57
+ ProcessPoolSleep = 1
58
58
  # If a positive integer n is given, we fetch n requests at once from the DB. Otherwise, one by one
59
- BulkRequest = 0
59
+ BulkRequest = 300
60
60
  OperationHandlers
61
61
  {
62
62
  ForwardDISET
@@ -22,7 +22,6 @@ from DIRAC.TransformationSystem.Client.FileReport import FileReport
22
22
  from DIRAC.TransformationSystem.Client.TransformationClient import TransformationClient
23
23
  from DIRAC.TransformationSystem.Client.WorkflowTasks import WorkflowTasks
24
24
  from DIRAC.WorkloadManagementSystem.Client import JobStatus
25
- from DIRAC.WorkloadManagementSystem.Client.JobManagerClient import JobManagerClient
26
25
 
27
26
  AGENT_NAME = "Transformation/TaskManagerAgentBase"
28
27
 
@@ -39,7 +38,6 @@ class TaskManagerAgentBase(AgentModule, TransformationAgentsUtilities):
39
38
  TransformationAgentsUtilities.__init__(self)
40
39
 
41
40
  self.transClient = None
42
- self.jobManagerClient = None
43
41
  self.transType = []
44
42
 
45
43
  self.tasksPerLoop = 50
@@ -68,7 +66,6 @@ class TaskManagerAgentBase(AgentModule, TransformationAgentsUtilities):
68
66
 
69
67
  # Default clients
70
68
  self.transClient = TransformationClient()
71
- self.jobManagerClient = JobManagerClient()
72
69
 
73
70
  # Bulk submission flag
74
71
  self.bulkSubmissionFlag = self.am_getOption("BulkSubmission", self.bulkSubmissionFlag)
@@ -236,7 +236,6 @@ class JobAgent(AgentModule):
236
236
  jobGroup = matcherInfo["Group"]
237
237
  owner = matcherInfo["Owner"]
238
238
  ceDict = matcherInfo["CEDict"]
239
- matchTime = matcherInfo["matchTime"]
240
239
 
241
240
  optimizerParams = {}
242
241
  for key in matcherInfo:
@@ -263,9 +262,6 @@ class JobAgent(AgentModule):
263
262
  self.log.verbose("Job request successful: \n", jobRequest["Value"])
264
263
  self.log.info("Received", f"JobID={jobID}, JobType={jobType}, Owner={owner}, JobGroup={jobGroup}")
265
264
  self.jobCount += 1
266
- self.jobs[jobID]["JobReport"].setJobParameter(
267
- par_name="MatcherServiceTime", par_value=str(matchTime), sendFlag=False
268
- )
269
265
 
270
266
  self.jobs[jobID]["JobReport"].setJobStatus(minorStatus="Job Received by Agent", sendFlag=False)
271
267
  result_setupProxy = self._setupProxy(owner, jobGroup)
@@ -547,7 +543,7 @@ class JobAgent(AgentModule):
547
543
  jobRequest = MatcherClient().requestJob(ceDict)
548
544
  matchTime = time.time() - start
549
545
 
550
- self.log.info("MatcherTime", f"= {matchTime:.2f} (s)")
546
+ self.log.verbose("MatcherTime", f"= {matchTime:.2f} (s)")
551
547
  if jobRequest["OK"]:
552
548
  jobRequest["Value"]["matchTime"] = matchTime
553
549
  jobRequest["Value"]["CEDict"] = ceDict
@@ -1,4 +1,4 @@
1
- """ This agent syncs CS and pilot files to a web server of your choice
1
+ """This agent syncs CS and pilot files to a web server of your choice
2
2
 
3
3
  .. literalinclude:: ../ConfigTemplate.cfg
4
4
  :start-after: ##BEGIN PilotSyncAgent
@@ -7,6 +7,7 @@
7
7
  :caption: PilotsSyncAgent options
8
8
 
9
9
  """
10
+
10
11
  import os
11
12
  import json
12
13
  import shutil
@@ -38,8 +39,8 @@ class PilotSyncAgent(AgentModule):
38
39
  self.workingDirectory = self.am_getOption("WorkDirectory")
39
40
  self.saveDir = self.am_getOption("SaveDirectory", self.saveDir)
40
41
  self.uploadLocations = self.am_getOption("UploadLocations", self.uploadLocations)
41
- includeMasterCS = self.am_getOption("IncludeMasterCS", self.includeMasterCS)
42
- if isinstance(includeMasterCS, str) and includeMasterCS.lower() in ["n", "no", "false"]:
42
+ self.includeMasterCS = self.am_getOption("IncludeMasterCS", self.includeMasterCS)
43
+ if isinstance(self.includeMasterCS, str) and self.includeMasterCS.lower() in ["n", "no", "false"]:
43
44
  self.includeMasterCS = False
44
45
 
45
46
  self.certAndKeyLocation = getHostCertificateAndKeyLocation()
@@ -285,7 +285,6 @@ class PushJobAgent(JobAgent):
285
285
  jobGroup = matcherInfo["Group"]
286
286
  owner = matcherInfo["Owner"]
287
287
  ceDict = matcherInfo["CEDict"]
288
- matchTime = matcherInfo["matchTime"]
289
288
 
290
289
  optimizerParams = {}
291
290
  for key in matcherInfo:
@@ -313,9 +312,6 @@ class PushJobAgent(JobAgent):
313
312
  self.log.verbose("Job request successful: \n", jobRequest["Value"])
314
313
  self.log.info("Received", f"JobID={jobID}, JobType={jobType}, Owner={owner}, JobGroup={jobGroup}")
315
314
 
316
- self.jobs[jobID]["JobReport"].setJobParameter(
317
- par_name="MatcherServiceTime", par_value=str(matchTime), sendFlag=False
318
- )
319
315
  self.jobs[jobID]["JobReport"].setJobStatus(
320
316
  status=JobStatus.MATCHED, minorStatus="Job Received by Agent", sendFlag=False
321
317
  )
@@ -79,7 +79,7 @@ def kill_delete_jobs(right, validJobList, nonauthJobList=[], force=False):
79
79
  killJobList = []
80
80
  deleteJobList = []
81
81
  if validJobList:
82
- result = JobDB().getJobsAttributes(killJobList, ["Status"])
82
+ result = JobDB().getJobsAttributes(validJobList, ["Status"])
83
83
  if not result["OK"]:
84
84
  return result
85
85
  jobStates = result["Value"]
@@ -1215,8 +1215,8 @@ class JobWrapper:
1215
1215
  lfn = str(basePath / outputPath / os.path.basename(localfile))
1216
1216
  else:
1217
1217
  # if LFN is given, take it as it is
1218
- localfile = str(self.jobIDPath / outputFile.replace("LFN:", ""))
1219
1218
  lfn = outputFile.replace("LFN:", "")
1219
+ localfile = str(self.jobIDPath / os.path.basename(lfn))
1220
1220
 
1221
1221
  return (lfn, localfile)
1222
1222
 
@@ -664,6 +664,7 @@ def jobIDPath():
664
664
  # Output data files
665
665
  (p / "00232454_00000244_1.sim").touch()
666
666
  (p / "1720442808testFileUpload.txt").touch()
667
+ (p / "testFileUploadFullLFN.txt").touch()
667
668
 
668
669
  with open(p / "pool_xml_catalog.xml", "w") as f:
669
670
  f.write(
@@ -863,7 +864,11 @@ def test_processJobOutputs_output_data_upload(mocker, setup_another_job_wrapper)
863
864
  # BTW, isn't the concept of pool_xml_catalog.xml from lhcbdirac?
864
865
  jw.jobArgs = {
865
866
  "OutputSandbox": [],
866
- "OutputData": ["1720442808testFileUpload.txt", "LFN:00232454_00000244_1.sim"],
867
+ "OutputData": [
868
+ "1720442808testFileUpload.txt",
869
+ "LFN:00232454_00000244_1.sim",
870
+ "LFN:/dirac/user/u/unknown/testFileUploadFullLFN.txt",
871
+ ],
867
872
  "Owner": "Jane Doe",
868
873
  }
869
874
 
@@ -879,10 +884,15 @@ def test_processJobOutputs_output_data_upload(mocker, setup_another_job_wrapper)
879
884
  assert jw.jobReport.jobStatusInfo[1][:-1] == ("", JobMinorStatus.UPLOADING_OUTPUT_DATA)
880
885
  assert jw.jobReport.jobStatusInfo[2][:-1] == (JobStatus.COMPLETING, JobMinorStatus.OUTPUT_DATA_UPLOADED)
881
886
  assert len(jw.jobReport.jobParameters) == 1
882
- assert jw.jobReport.jobParameters[0] == (
883
- "UploadedOutputData",
884
- "00232454_00000244_1.sim, /dirac/user/u/unknown/0/123/1720442808testFileUpload.txt",
885
- )
887
+
888
+ expected_files = {
889
+ "00232454_00000244_1.sim",
890
+ "/dirac/user/u/unknown/0/123/1720442808testFileUpload.txt",
891
+ "/dirac/user/u/unknown/testFileUploadFullLFN.txt",
892
+ }
893
+ assert jw.jobReport.jobParameters[0][0] == "UploadedOutputData"
894
+ uploaded_files = set(jw.jobReport.jobParameters[0][1].split(", "))
895
+ assert uploaded_files == expected_files
886
896
 
887
897
 
888
898
  # -------------------------------------------------------------------------------------------------
@@ -1,9 +1,10 @@
1
- """ CStoJSONSynchronizer
2
- Module that keeps the pilot parameters file synchronized with the information
3
- in the Operations/Pilot section of the CS. If there are additions in the CS,
4
- these are incorporated to the file.
5
- The module uploads to a web server the latest version of the pilot scripts.
1
+ """CStoJSONSynchronizer
2
+ Module that keeps the pilot parameters file synchronized with the information
3
+ in the Operations/Pilot section of the CS. If there are additions in the CS,
4
+ these are incorporated to the file.
5
+ The module uploads to a web server the latest version of the pilot scripts.
6
6
  """
7
+
7
8
  import datetime
8
9
  import glob
9
10
  import os
@@ -19,6 +20,67 @@ from DIRAC.ConfigurationSystem.Client.Helpers.Operations import Operations
19
20
  from DIRAC.ConfigurationSystem.Client.Helpers.Path import cfgPath
20
21
  from DIRAC.Core.Utilities.ReturnValues import DOKReturnType, DReturnType
21
22
 
23
+ import socket
24
+ from urllib.parse import urlparse
25
+
26
+
27
+ def exclude_master_cs_aliases(urls: list[str], master_cs_url: str) -> list[str]:
28
+ """
29
+ Excludes URLs that are DNS aliases of the given MasterCS server URL.
30
+
31
+ This function resolves the IP addresses of the MasterCS server and each URL in the input list.
32
+ It returns a new list containing only those URLs whose hostnames do not resolve to any of the
33
+ MasterCS server's IP addresses, effectively excluding all DNS aliases of the MasterCS server.
34
+
35
+ Args:
36
+ urls (list[str]): A list of URLs to filter. Each URL should be a string in a valid URL format.
37
+ master_cs_url (str): The reference URL (e.g., MasterCS server URL) whose DNS aliases are to be excluded.
38
+
39
+ Returns:
40
+ list[str]: A new list of URLs with all aliases of the MasterCS server removed.
41
+ If the MasterCS hostname cannot be resolved, the original list is returned unchanged.
42
+
43
+ Example:
44
+ >>> urls = [
45
+ ... 'dips://lbvobox303.cern.ch:9135/Configuration/Server',
46
+ ... 'dips://ccwlcglhcb02.in2p3.fr:9135/Configuration/Server',
47
+ ... 'dips://lbvobox302.cern.ch:9135/Configuration/Server',
48
+ ... ]
49
+ >>> master_cs_url = "dips://mastercs.cern.ch:9135/Configuration/Server"
50
+ >>> exclude_master_cs_aliases(urls, master_cs_url)
51
+ ['dips://ccwlcglhcb02.in2p3.fr:9135/Configuration/Server']
52
+
53
+ Notes:
54
+ - If the MasterCS hostname cannot be resolved, the function returns the original list.
55
+ - If a hostname in the input list cannot be resolved, it is included in the result.
56
+ - The comparison is based on IP addresses, not hostnames.
57
+ """
58
+ master_cs_hostname = urlparse(master_cs_url).hostname
59
+ if not master_cs_hostname:
60
+ return urls
61
+
62
+ # Resolve IP addresses for the MasterCS hostname
63
+ try:
64
+ master_cs_ips = set(socket.gethostbyname_ex(master_cs_hostname)[2])
65
+ except socket.gaierror:
66
+ return urls
67
+
68
+ # Function to get IPs for a hostname
69
+ def get_ips(hostname):
70
+ try:
71
+ return set(socket.gethostbyname_ex(hostname)[2])
72
+ except socket.gaierror:
73
+ return set()
74
+
75
+ filtered_urls = []
76
+ for url in urls:
77
+ hostname = urlparse(url).hostname
78
+ ips = get_ips(hostname)
79
+ if not ips & master_cs_ips:
80
+ filtered_urls.append(url)
81
+
82
+ return filtered_urls
83
+
22
84
 
23
85
  class PilotCStoJSONSynchronizer:
24
86
  """
@@ -151,7 +213,8 @@ class PilotCStoJSONSynchronizer:
151
213
  configurationServers = gConfig.getServersList()
152
214
  if not includeMasterCS:
153
215
  masterCS = gConfigurationData.getMasterServer()
154
- configurationServers = list(set(configurationServers) - {masterCS})
216
+ configurationServers = exclude_master_cs_aliases(configurationServers, masterCS)
217
+
155
218
  pilotDict["ConfigurationServers"] = configurationServers
156
219
 
157
220
  self.log.debug("Got pilotDict", str(pilotDict))
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: DIRAC
3
- Version: 9.0.0a68
3
+ Version: 9.0.1
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
@@ -19,7 +19,7 @@ Requires-Dist: cachetools
19
19
  Requires-Dist: certifi
20
20
  Requires-Dist: cwltool
21
21
  Requires-Dist: diraccfg
22
- Requires-Dist: DIRACCommon==v9.0.0a68
22
+ Requires-Dist: DIRACCommon==v9.0.1
23
23
  Requires-Dist: diracx-client>=v0.0.1a18
24
24
  Requires-Dist: diracx-core>=v0.0.1a18
25
25
  Requires-Dist: db12
@@ -83,7 +83,7 @@ DIRAC/ConfigurationSystem/private/ConfigurationClient.py,sha256=zRqHURAz2uE96fDW
83
83
  DIRAC/ConfigurationSystem/private/ConfigurationData.py,sha256=KaoCw6yhNTFHPYRf_gE8vllJIlOvrvTq_zI7rOQiHqo,15180
84
84
  DIRAC/ConfigurationSystem/private/Modificator.py,sha256=Ek5pKk-HJ2f7TF4zcHdPifugELBo6bpl4dVo0qbr9Ww,10537
85
85
  DIRAC/ConfigurationSystem/private/Refresher.py,sha256=bdBEp4dVtE8RBdYHmFREftrUniGbe7AwXZK-vBZnAV0,4097
86
- DIRAC/ConfigurationSystem/private/RefresherBase.py,sha256=aZBjIrtvUEh7ZM8GweNBGGEXet54Hrgh4Iz8kMhXumY,6436
86
+ DIRAC/ConfigurationSystem/private/RefresherBase.py,sha256=STbCWT3fJvNqyQNwsrzTQAuG6OndlBzTJfnwGrAOAnQ,6552
87
87
  DIRAC/ConfigurationSystem/private/ServiceInterface.py,sha256=HzFWXFd6aWmlEJfcBNr5nVCG3tXuYmQunR9_xjuueX4,1919
88
88
  DIRAC/ConfigurationSystem/private/ServiceInterfaceBase.py,sha256=bLa6xxydThtsGalaiiYhsSWWXEfA9laJBOLU8ZaMiy0,15644
89
89
  DIRAC/ConfigurationSystem/private/ServiceInterfaceTornado.py,sha256=gEUyxpQM1kJDl_zUI7__OCbqS0-CAD7CCMS9JiWtFgY,1414
@@ -389,7 +389,7 @@ DIRAC/DataManagementSystem/DB/FileCatalogWithFkAndPsDB.sql,sha256=HhPwoKQzpY76Ev
389
389
  DIRAC/DataManagementSystem/DB/__init__.py,sha256=wYM6m2zwnPwfEDyFr8zn3nxsz8ScG0rcK9o3ZTMS1o0,49
390
390
  DIRAC/DataManagementSystem/DB/FileCatalogComponents/Utilities.py,sha256=9ISL04-ODyzbV1L6OJce-NNC8s32JVioZ3ZZ2xRYvNw,584
391
391
  DIRAC/DataManagementSystem/DB/FileCatalogComponents/__init__.py,sha256=9cXeiZx0oIpGUDNV_xAak5eTRF8Qgu8HDtLVlb3tclA,38
392
- DIRAC/DataManagementSystem/DB/FileCatalogComponents/DatasetManager/DatasetManager.py,sha256=yRxhL9sBiVOe9-e5YnSqD6aqe9-bYzOMI6KbfxfH_HA,31122
392
+ DIRAC/DataManagementSystem/DB/FileCatalogComponents/DatasetManager/DatasetManager.py,sha256=SUj6xTS3s6l1oWfStLho6HSua-EQzs65VQxnLkVNx5M,31123
393
393
  DIRAC/DataManagementSystem/DB/FileCatalogComponents/DatasetManager/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
394
394
  DIRAC/DataManagementSystem/DB/FileCatalogComponents/DirectoryManager/DirectoryClosure.py,sha256=vsLBKYiZKdgq1MLuZRbofxI23Jio2ha7JIwFzU42tLk,23739
395
395
  DIRAC/DataManagementSystem/DB/FileCatalogComponents/DirectoryManager/DirectoryFlatTree.py,sha256=uQzlQ1JMnC9SgL1r0PfBJDF5an--rk-KhbBGWyjPin8,8536
@@ -460,7 +460,7 @@ DIRAC/DataManagementSystem/scripts/dirac_dms_catalog_metadata.py,sha256=K8Wz_zyb
460
460
  DIRAC/DataManagementSystem/scripts/dirac_dms_change_replica_status.py,sha256=_3yhBq7gWo_iQQNujT0BDy6sUcroojGyBN1KJnDnhFk,1778
461
461
  DIRAC/DataManagementSystem/scripts/dirac_dms_clean_directory.py,sha256=0SzIyRoiu1TlFIOyTyUkTehH8Ltn7arVY9u-67c7XDI,1782
462
462
  DIRAC/DataManagementSystem/scripts/dirac_dms_create_archive_request.py,sha256=h1ucu6TooaQIfF26tules2s1YEIN_QC7OomczrJ9MOU,22462
463
- DIRAC/DataManagementSystem/scripts/dirac_dms_create_moving_request.py,sha256=HvreObAShjThJS3OFLqr3FOMlvB7WgNdq_Am2-9-LUw,11402
463
+ DIRAC/DataManagementSystem/scripts/dirac_dms_create_moving_request.py,sha256=7tPUPevaRaQ4ACM0nJ8DSl0Ad70QfJ8RMzwonJVTs1s,11561
464
464
  DIRAC/DataManagementSystem/scripts/dirac_dms_create_removal_request.py,sha256=r_i8wi5-24L7Ij5uFG-TKojkCYFeHuzbjT0mfbbkNos,3535
465
465
  DIRAC/DataManagementSystem/scripts/dirac_dms_data_size.py,sha256=XAL34mlKcgE1XfqSHAxMpFiXMBiihKMwBNrD0utiWfs,2478
466
466
  DIRAC/DataManagementSystem/scripts/dirac_dms_directory_sync.py,sha256=UaEubXTbVqHkQid7f59BMlPGwigtPUm9vd1NlYt_qgs,18000
@@ -592,7 +592,7 @@ DIRAC/FrameworkSystem/scripts/dirac_stop_component.py,sha256=RJJy63ilUEV5qyP_r2i
592
592
  DIRAC/FrameworkSystem/scripts/dirac_sys_sendmail.py,sha256=lJ6OO_vkaSVhXp_p79LYTZoq9jT5qLU0qXOfFEgK9fw,2453
593
593
  DIRAC/FrameworkSystem/scripts/dirac_uninstall_component.py,sha256=FTA2zA0cACM31u_uFZgsUYC6S0Fh3xmkqDjgOPdFr4k,2797
594
594
  DIRAC/Interfaces/__init__.py,sha256=hycApm2mNnIWcdIzoOKQZLa8-LpSpfG2jdfgyKGN9Gg,34
595
- DIRAC/Interfaces/API/Dirac.py,sha256=0ZB3s8k_kOdN3HksEyimHNrcntk8zNQQbsQio93pXpM,94786
595
+ DIRAC/Interfaces/API/Dirac.py,sha256=alMGB5YV2Oyo44G2k_jdSSvHRhZz0WmN3bMBeXgN11I,94619
596
596
  DIRAC/Interfaces/API/DiracAdmin.py,sha256=PDwWl1KCckL2xhLodeWJhVS4ZondNvfdbTUEE3pukXA,28135
597
597
  DIRAC/Interfaces/API/Job.py,sha256=FFYNMWaWvcC9ZGDQ2gZhpnFBijjRUFZvcyIIU4PQqC8,50650
598
598
  DIRAC/Interfaces/API/__init__.py,sha256=l_0g05W4nsJ9-kvp9yKYsbdLz3EvWczOfdycoPnwlvU,566
@@ -654,7 +654,7 @@ DIRAC/Interfaces/scripts/dirac_wms_job_get_output.py,sha256=GknZloaQFv8suW5U_vYS
654
654
  DIRAC/Interfaces/scripts/dirac_wms_job_get_output_data.py,sha256=ohn1CLgqUceDsHxdAIRrQs4t_k-ZyDk66whGm-RIPh0,1287
655
655
  DIRAC/Interfaces/scripts/dirac_wms_job_kill.py,sha256=tCbozyC_XEPmbvL9uIhSA7eg9fCzyRKl1AWQoecO7So,1493
656
656
  DIRAC/Interfaces/scripts/dirac_wms_job_logging_info.py,sha256=uzF3JkOUymGIKZCe93-n_drx7wi_hZgFsm5xOMFW3WE,2838
657
- DIRAC/Interfaces/scripts/dirac_wms_job_parameters.py,sha256=x2GXOL0_mL0YT6py49tXXdE1V1957RXQ8rdeNeAgYkI,1914
657
+ DIRAC/Interfaces/scripts/dirac_wms_job_parameters.py,sha256=fpZMjl0JAxRNzBm3XyU_ThYT100wzFxks26SedC1zyo,1872
658
658
  DIRAC/Interfaces/scripts/dirac_wms_job_peek.py,sha256=OAEMRuFLB-_TwaCefnQ-PKYPOkMpjJjKAX3WFm1x-A4,1042
659
659
  DIRAC/Interfaces/scripts/dirac_wms_job_reschedule.py,sha256=hufLR9CKLABzXUPovm15imf_jha55KDe-3XPtQ_g70Q,1155
660
660
  DIRAC/Interfaces/scripts/dirac_wms_job_status.py,sha256=vFcKh5EPlJ7tp9Pwz4orsspgp9_lvgxztYyyKmXWdYk,2208
@@ -734,10 +734,10 @@ DIRAC/ProductionSystem/scripts/dirac_prod_get_description.py,sha256=tKrlr-yIUfMQ
734
734
  DIRAC/ProductionSystem/scripts/dirac_prod_get_trans.py,sha256=I7JK2IbS-lyI239IMJoZwPIDIoRXxVUtZDHdlkwtIBY,3002
735
735
  DIRAC/ProductionSystem/scripts/dirac_prod_start.py,sha256=Xr4tdgN41toQRWPJnLF5Nx3xq40PteVI0OTz3t7ehOI,795
736
736
  DIRAC/ProductionSystem/scripts/dirac_prod_stop.py,sha256=sqIvlmTPHtSCn94knJGiPfPiPu7geAngI-IHcfbaE2U,794
737
- DIRAC/RequestManagementSystem/ConfigTemplate.cfg,sha256=jWSq1sgNqzPdY22oPjnJwjYzDhTn-EHglfRgi86L3yE,3774
737
+ DIRAC/RequestManagementSystem/ConfigTemplate.cfg,sha256=IE4HILrLKI9qqnJ3EnoIEH3J3B3qCa7frhTp0DqL7yo,3777
738
738
  DIRAC/RequestManagementSystem/__init__.py,sha256=dd54oqlSYTanQrw2iGyzp_dipGTtvP2VlUrYZzGQI5Q,49
739
739
  DIRAC/RequestManagementSystem/Agent/CleanReqDBAgent.py,sha256=wcXEZPfxU9yoiOSM7qQi9lzA-ilsIezc45xWWxLXKJA,7286
740
- DIRAC/RequestManagementSystem/Agent/RequestExecutingAgent.py,sha256=Hz_WH3p8KQWXOOIeYAHPh15vTYWkWmw7iH5RoATSE78,20038
740
+ DIRAC/RequestManagementSystem/Agent/RequestExecutingAgent.py,sha256=U2MzS_eYuQykpwyR7XkWQjXKhmp3CoBCXxnBK7cBVeM,20138
741
741
  DIRAC/RequestManagementSystem/Agent/__init__.py,sha256=hr-uMJaL3v8Mrx1Mm-xPOpI7xJCzWmoRt21mHQLjGJc,55
742
742
  DIRAC/RequestManagementSystem/Agent/RequestOperations/ForwardDISET.py,sha256=tre5SjRM-9U0uZJ-Ajup1_6pe2bc3UjwsIXueJtHe7E,3418
743
743
  DIRAC/RequestManagementSystem/Agent/RequestOperations/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
@@ -1048,7 +1048,7 @@ DIRAC/TransformationSystem/Agent/DataRecoveryAgent.py,sha256=JUfOBQd0U2uz9WvvArB
1048
1048
  DIRAC/TransformationSystem/Agent/InputDataAgent.py,sha256=YdxfB1wb55MBgZAuWNuqx_zXHaxTAEGCKYikr0eZaD8,8085
1049
1049
  DIRAC/TransformationSystem/Agent/MCExtensionAgent.py,sha256=0pmfiy8FTH670Vv3Md6TPo5iAXsu9y1e-1ybIOTQJPY,5266
1050
1050
  DIRAC/TransformationSystem/Agent/RequestTaskAgent.py,sha256=0FxuRVONDkC6DtDqfSC4LeZmheaevBsrh4yvan0DtVc,2689
1051
- DIRAC/TransformationSystem/Agent/TaskManagerAgentBase.py,sha256=M8CVPGCY4UMNfKNDdcfgUd2er3JPAIeNzGghsk0ohUQ,30824
1051
+ DIRAC/TransformationSystem/Agent/TaskManagerAgentBase.py,sha256=v61j-e_qMQXACENK0JYWa7lMgL0-xNT9irzEdXDHs-8,30652
1052
1052
  DIRAC/TransformationSystem/Agent/TransformationAgent.py,sha256=rUPyfX_Ip3ZUyBrmVBrYiddVmgeTx6gKiYPEzwUDOcY,33813
1053
1053
  DIRAC/TransformationSystem/Agent/TransformationAgentsUtilities.py,sha256=XrgrjQWSDQm0uxG-wyEY-W0A_MBJyIE-22TafqrLP3A,2805
1054
1054
  DIRAC/TransformationSystem/Agent/TransformationCleaningAgent.py,sha256=uAu_aQxko4GF_cTxDxY4KmARqjuytBO89e4XVy5PPUM,32898
@@ -1119,12 +1119,12 @@ DIRAC/Workflow/Utilities/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZ
1119
1119
  DIRAC/Workflow/Utilities/test/Test_Utilities.py,sha256=DNjFPpBmpojwCWhZSUSoG3AIhMQvqyiZdSuVkrHkOtk,2595
1120
1120
  DIRAC/WorkloadManagementSystem/ConfigTemplate.cfg,sha256=EpXTiHV-omMuMcWDzQzWZ_LmAZFMRTabfJpfZmVfzEA,9065
1121
1121
  DIRAC/WorkloadManagementSystem/__init__.py,sha256=9-_-HOT_8S3i-TMmTR_gFVVlNyktBRk-S2qSuOBKoIc,50
1122
- DIRAC/WorkloadManagementSystem/Agent/JobAgent.py,sha256=Hi3zPfK9h7CwNO2pK4IABCqO_uShCIaKvZGlUdgsWPA,41034
1122
+ DIRAC/WorkloadManagementSystem/Agent/JobAgent.py,sha256=LzLypd3m4a6M-J5_nmUMsMqgflb_1Xm77eONDE6G1Vg,40843
1123
1123
  DIRAC/WorkloadManagementSystem/Agent/JobCleaningAgent.py,sha256=TR8nDO43DuJxOQVIdOUrqpWjRjJp52dVzOKUUewL9U4,14708
1124
1124
  DIRAC/WorkloadManagementSystem/Agent/PilotLoggingAgent.py,sha256=ZIgvFpasGTh76GW3G7O4hKC_Kkm31uWymlH-MTT3AXg,10541
1125
1125
  DIRAC/WorkloadManagementSystem/Agent/PilotStatusAgent.py,sha256=qY6TbYCPOFFXhHffmRJLNEbWvZPyg5Lc5B_8BbyQ7zc,9711
1126
- DIRAC/WorkloadManagementSystem/Agent/PilotSyncAgent.py,sha256=Q50axgfx_D9iF2hT0aNaJ1KA85idOluBeBWDcjR6j8c,4845
1127
- DIRAC/WorkloadManagementSystem/Agent/PushJobAgent.py,sha256=OkIIFnJrwUYCroWEc5bgAfsnGks98y0gO1GLKamBXO0,38820
1126
+ DIRAC/WorkloadManagementSystem/Agent/PilotSyncAgent.py,sha256=qzDFCGZ8EtjxDUaPgyFDlSmJfyF2KLuyXTC7au3-p2Q,4860
1127
+ DIRAC/WorkloadManagementSystem/Agent/PushJobAgent.py,sha256=IvHshnw2xN0AZrruEu86C47GDez8enBD6jjNIZd6QcA,38594
1128
1128
  DIRAC/WorkloadManagementSystem/Agent/SiteDirector.py,sha256=ZnbjKca8tWLekObALrsFXm7EoXAYxEpHSGRAbrqU5mk,45229
1129
1129
  DIRAC/WorkloadManagementSystem/Agent/StalledJobAgent.py,sha256=foEbmRotEmfeQG6nyIsJv1kSJkm4flkQsPYbSylS3SM,24572
1130
1130
  DIRAC/WorkloadManagementSystem/Agent/StatesAccountingAgent.py,sha256=iNIlWQEDBk6R1S8oHOIusZUwxOwLtgwuzR_4s32-o5w,8707
@@ -1184,7 +1184,7 @@ DIRAC/WorkloadManagementSystem/DB/PilotAgentsDB.py,sha256=tUSuhv59CQgB7NkxsXo5r-
1184
1184
  DIRAC/WorkloadManagementSystem/DB/PilotAgentsDB.sql,sha256=RnCDCDGa__7sDxjSFGlu_5OwKbzxeK3a9TOMpV5ftRw,2738
1185
1185
  DIRAC/WorkloadManagementSystem/DB/SandboxMetadataDB.py,sha256=a4tHv19jN2lKi4o5SYvfkG6JPbVcjJO_SgJBJORUV7Y,15631
1186
1186
  DIRAC/WorkloadManagementSystem/DB/SandboxMetadataDB.sql,sha256=2TcyLiewFuPWqBhD43geHG0obCFRGTSLbQwPUwENYnQ,23
1187
- DIRAC/WorkloadManagementSystem/DB/StatusUtils.py,sha256=K4fIDNOWbSxUaxVfKbsSKzPAlF5v_S5FSCGxHRkPScM,5124
1187
+ DIRAC/WorkloadManagementSystem/DB/StatusUtils.py,sha256=cVVNiZlVbp0B-4MpkpXATlSLRtubsL6iGx4-U4KP2A4,5125
1188
1188
  DIRAC/WorkloadManagementSystem/DB/TaskQueueDB.py,sha256=4ClljoQUnHKq1KHAIFpUwL_5-NrUUuM8oHKzOZULXZg,54623
1189
1189
  DIRAC/WorkloadManagementSystem/DB/TaskQueueDB.sql,sha256=GfeceE3VY7l15pMwt6MzI8pGqdk772XuIg_DE0vkj74,541
1190
1190
  DIRAC/WorkloadManagementSystem/DB/__init__.py,sha256=1H5briNEaZlSL6pMxzjDmkZkVvGxHix8DtfkM-mOwGc,53
@@ -1203,13 +1203,13 @@ DIRAC/WorkloadManagementSystem/FutureClient/JobMonitoringClient.py,sha256=3Mjq3h
1203
1203
  DIRAC/WorkloadManagementSystem/FutureClient/JobStateUpdateClient.py,sha256=PG3JkQPgmPacjTLTCHTobZeKys4nxObs0D_Axfrl2Uw,6650
1204
1204
  DIRAC/WorkloadManagementSystem/FutureClient/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
1205
1205
  DIRAC/WorkloadManagementSystem/JobWrapper/JobExecutionCoordinator.py,sha256=Y64YnkrKklOkXnV5wKsgzBONFljVJ0ByFVUMFNkiGAU,2461
1206
- DIRAC/WorkloadManagementSystem/JobWrapper/JobWrapper.py,sha256=paoNJpBRRsB51f3PniXIb7vXnesu_xB7L-ZLnml0-LY,74804
1206
+ DIRAC/WorkloadManagementSystem/JobWrapper/JobWrapper.py,sha256=s_YHg_PsTGVHBLrS1QkbPGcarWf2xDHeXAKSS3s2fxc,74795
1207
1207
  DIRAC/WorkloadManagementSystem/JobWrapper/JobWrapperOfflineTemplate.py,sha256=wem5VDN9XiC7szAzdsbgHUxpIOQB2Hj36DIVMoV9px8,2490
1208
1208
  DIRAC/WorkloadManagementSystem/JobWrapper/JobWrapperTemplate.py,sha256=4QgcFPMLRaTagP9e_Vvsla8pFH8HdewklHfS-gyS4-g,3313
1209
1209
  DIRAC/WorkloadManagementSystem/JobWrapper/JobWrapperUtilities.py,sha256=5w_4PMnaHhuexChADDvt1L9Ih1PstdUuYWObnlv9Dto,10072
1210
1210
  DIRAC/WorkloadManagementSystem/JobWrapper/Watchdog.py,sha256=wGpIdnyVzI5T9agxNp94gmPZPceXWREaJiEtZg1lAzk,39997
1211
1211
  DIRAC/WorkloadManagementSystem/JobWrapper/__init__.py,sha256=e9Oa_ddNLweR3Lp_HOMK6WqqCWWj2SLPxF5UH4F19ic,61
1212
- DIRAC/WorkloadManagementSystem/JobWrapper/test/Test_JobWrapper.py,sha256=qoj3Rb6VOTwilJ79DPjr4SKSvDwIuZSqPK9xjTfZpNc,38829
1212
+ DIRAC/WorkloadManagementSystem/JobWrapper/test/Test_JobWrapper.py,sha256=R9onrrnfyc1v4USt2nnvrYHFo5tKbpLjhMkXl4n0y2Y,39177
1213
1213
  DIRAC/WorkloadManagementSystem/JobWrapper/test/Test_JobWrapperTemplate.py,sha256=dC_SvC5Rlchlj2NvBfN7FH1ioXgC8bf9U8BQnEL5GYg,21982
1214
1214
  DIRAC/WorkloadManagementSystem/JobWrapper/test/Test_Watchdog.py,sha256=a-QJ1E1ZcWObhOVgxZYD_nYjseCWsbjT0KxjZDNWyAQ,882
1215
1215
  DIRAC/WorkloadManagementSystem/JobWrapper/test/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
@@ -1240,7 +1240,7 @@ DIRAC/WorkloadManagementSystem/Utilities/JobModel.py,sha256=jN9sFbzMZo9tab6Kp7Oe
1240
1240
  DIRAC/WorkloadManagementSystem/Utilities/JobParameters.py,sha256=JW3AAEtBJn1gIO_rm2Ft5qqjfLteIo3HpQtGNZBfhxE,8365
1241
1241
  DIRAC/WorkloadManagementSystem/Utilities/JobStatusUtility.py,sha256=WtGJzC7fHvydANh8JH6e1Kk_jebrCMPr2c5cw3ufjm8,7826
1242
1242
  DIRAC/WorkloadManagementSystem/Utilities/ParametricJob.py,sha256=FNUsGhvsFVrtmA7r8G-sd4QTMeBkqG1sdtwiBUKQyd0,605
1243
- DIRAC/WorkloadManagementSystem/Utilities/PilotCStoJSONSynchronizer.py,sha256=aJr2YdE5fb_gieejEyqOg_zcB9MFW5ikzVyKVjnGBN4,9838
1243
+ DIRAC/WorkloadManagementSystem/Utilities/PilotCStoJSONSynchronizer.py,sha256=sjOOWeKLZMpYD2GJVU-EOkZAfmRpAwIcJntAAcalE20,12244
1244
1244
  DIRAC/WorkloadManagementSystem/Utilities/PilotWrapper.py,sha256=VcvQTpeyTbVYqSsPQDyAt37N2CaEAnIuvbR6yk4kYk8,15465
1245
1245
  DIRAC/WorkloadManagementSystem/Utilities/QueueUtilities.py,sha256=J5-n_lvWbW_TRjrlqp8hx1SHEaXDW2Dxp3R1hBBrWnE,12082
1246
1246
  DIRAC/WorkloadManagementSystem/Utilities/RemoteRunner.py,sha256=7FcEtlYSJMzdbLIFBUKD-j_wqRHya-ISqk8w-JRy3kw,12159
@@ -1294,9 +1294,9 @@ DIRAC/tests/Workflow/Integration/exe-script.py,sha256=B_slYdTocEzqfQLRhwuPiLyYUn
1294
1294
  DIRAC/tests/Workflow/Integration/helloWorld.py,sha256=tBgEHH3ZF7ZiTS57gtmm3DW-Qxgm_57HWHpM-Y8XSws,205
1295
1295
  DIRAC/tests/Workflow/Regression/helloWorld.py,sha256=69eCgFuVSYo-mK3Dj2dw1c6g86sF5FksKCf8V2aGVoM,509
1296
1296
  DIRAC/tests/Workflow/Regression/helloWorld.xml,sha256=xwydIcFTAHIX-YPfQfyxuQ7hzvIO3IhR3UAF7ORgkGg,5310
1297
- dirac-9.0.0a68.dist-info/licenses/LICENSE,sha256=uyr4oV6jmjUeepXZPPjkJRwa5q5MrI7jqJz5sVXNblQ,32452
1298
- dirac-9.0.0a68.dist-info/METADATA,sha256=lajHXRmL_O4jHTBhxb0BnpTkzbY-Fvco4bJO9j0puvg,10020
1299
- dirac-9.0.0a68.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
1300
- dirac-9.0.0a68.dist-info/entry_points.txt,sha256=hupzIL8aVmjK3nn7RLKdhcaiPmLOiD3Kulh3CSDHKmw,16492
1301
- dirac-9.0.0a68.dist-info/top_level.txt,sha256=RISrnN9kb_mPqmVu8_o4jF-DSX8-h6AcgfkO9cgfkHA,6
1302
- dirac-9.0.0a68.dist-info/RECORD,,
1297
+ dirac-9.0.1.dist-info/licenses/LICENSE,sha256=uyr4oV6jmjUeepXZPPjkJRwa5q5MrI7jqJz5sVXNblQ,32452
1298
+ dirac-9.0.1.dist-info/METADATA,sha256=jj1SEb6Qm_Yz6vA9Xqbcvvq4s90Pm0TcOUJvlSsJJfc,10014
1299
+ dirac-9.0.1.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
1300
+ dirac-9.0.1.dist-info/entry_points.txt,sha256=hupzIL8aVmjK3nn7RLKdhcaiPmLOiD3Kulh3CSDHKmw,16492
1301
+ dirac-9.0.1.dist-info/top_level.txt,sha256=RISrnN9kb_mPqmVu8_o4jF-DSX8-h6AcgfkO9cgfkHA,6
1302
+ dirac-9.0.1.dist-info/RECORD,,