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.
- DIRAC/ConfigurationSystem/private/RefresherBase.py +4 -2
- DIRAC/DataManagementSystem/DB/FileCatalogComponents/DatasetManager/DatasetManager.py +1 -1
- DIRAC/DataManagementSystem/scripts/dirac_dms_create_moving_request.py +2 -0
- DIRAC/Interfaces/API/Dirac.py +3 -6
- DIRAC/Interfaces/scripts/dirac_wms_job_parameters.py +0 -1
- DIRAC/RequestManagementSystem/Agent/RequestExecutingAgent.py +8 -6
- DIRAC/RequestManagementSystem/ConfigTemplate.cfg +6 -6
- DIRAC/TransformationSystem/Agent/TaskManagerAgentBase.py +0 -3
- DIRAC/WorkloadManagementSystem/Agent/JobAgent.py +1 -5
- DIRAC/WorkloadManagementSystem/Agent/PilotSyncAgent.py +4 -3
- DIRAC/WorkloadManagementSystem/Agent/PushJobAgent.py +0 -4
- DIRAC/WorkloadManagementSystem/DB/StatusUtils.py +1 -1
- DIRAC/WorkloadManagementSystem/JobWrapper/JobWrapper.py +1 -1
- DIRAC/WorkloadManagementSystem/JobWrapper/test/Test_JobWrapper.py +15 -5
- DIRAC/WorkloadManagementSystem/Utilities/PilotCStoJSONSynchronizer.py +69 -6
- {dirac-9.0.0a68.dist-info → dirac-9.0.1.dist-info}/METADATA +2 -2
- {dirac-9.0.0a68.dist-info → dirac-9.0.1.dist-info}/RECORD +21 -21
- {dirac-9.0.0a68.dist-info → dirac-9.0.1.dist-info}/WHEEL +0 -0
- {dirac-9.0.0a68.dist-info → dirac-9.0.1.dist-info}/entry_points.txt +0 -0
- {dirac-9.0.0a68.dist-info → dirac-9.0.1.dist-info}/licenses/LICENSE +0 -0
- {dirac-9.0.0a68.dist-info → dirac-9.0.1.dist-info}/top_level.txt +0 -0
|
@@ -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 =
|
|
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
|
|
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)
|
DIRAC/Interfaces/API/Dirac.py
CHANGED
|
@@ -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(
|
|
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(
|
|
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(
|
|
1530
|
+
filteredJobs.update(_filterJobStateTransition(res["Value"], filterState))
|
|
1534
1531
|
|
|
1535
1532
|
return WMSClient(useCertificates=self.useCertificates).killJob(list(filteredJobs))
|
|
1536
1533
|
|
|
@@ -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 =
|
|
51
|
+
REQUESTSPERCYCLE = 300
|
|
52
52
|
# # minimal nb of subprocess running
|
|
53
|
-
MINPROCESS =
|
|
53
|
+
MINPROCESS = 50
|
|
54
54
|
# # maximal nb of subprocess executed same time
|
|
55
|
-
MAXPROCESS =
|
|
55
|
+
MAXPROCESS = 50
|
|
56
56
|
# # ProcessPool queue size
|
|
57
|
-
QUEUESIZE =
|
|
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 =
|
|
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 =
|
|
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 =
|
|
47
|
+
RequestsPerCycle = 300
|
|
48
48
|
# minimum number of workers process in the ProcessPool
|
|
49
|
-
MinProcess =
|
|
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 =
|
|
51
|
+
MaxProcess = 50
|
|
52
52
|
# queue depth of the ProcessPool
|
|
53
|
-
ProcessPoolQueueSize =
|
|
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 =
|
|
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 =
|
|
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.
|
|
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
|
-
"""
|
|
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(
|
|
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": [
|
|
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
|
-
|
|
883
|
-
|
|
884
|
-
"00232454_00000244_1.sim
|
|
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
|
-
"""
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
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 =
|
|
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.
|
|
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.
|
|
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=
|
|
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=
|
|
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=
|
|
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=
|
|
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=
|
|
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=
|
|
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=
|
|
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=
|
|
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=
|
|
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=
|
|
1127
|
-
DIRAC/WorkloadManagementSystem/Agent/PushJobAgent.py,sha256=
|
|
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=
|
|
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=
|
|
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=
|
|
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=
|
|
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.
|
|
1298
|
-
dirac-9.0.
|
|
1299
|
-
dirac-9.0.
|
|
1300
|
-
dirac-9.0.
|
|
1301
|
-
dirac-9.0.
|
|
1302
|
-
dirac-9.0.
|
|
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,,
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|