Skip to content

Commit b5ef5f0

Browse files
authored
Merge pull request #236 from HSF/flin
shared file messenger: per queue control of payload interaction filenames ; fix jobspec when no job logs
2 parents a95d4d2 + fddfe3e commit b5ef5f0

File tree

7 files changed

+109
-110
lines changed

7 files changed

+109
-110
lines changed

pandaharvester/commit_timestamp.py

+1-1
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
timestamp = "10-06-2024 11:59:07 on flin (by mightqxc)"
1+
timestamp = "26-06-2024 13:30:57 on flin (by mightqxc)"

pandaharvester/harvestercore/job_spec.py

+2-1
Original file line numberDiff line numberDiff line change
@@ -366,7 +366,8 @@ def get_output_file_attributes(self):
366366
scopes = self.jobParams["scopeOut"].split(",")
367367
scopeLog = self.jobParams["scopeLog"]
368368
logLFN = self.jobParams["logFile"]
369-
scopes.insert(lfns.index(logLFN), scopeLog)
369+
if scopeLog and logLFN:
370+
scopes.insert(lfns.index(logLFN), scopeLog)
370371
datasets = self.jobParams["realDatasets"].split(",")
371372
endpoints = self.jobParams["ddmEndPointOut"].split(",")
372373
for lfn, scope, dataset, endpoint in zip(lfns, scopes, datasets, endpoints):

pandaharvester/harvestermessenger/base_messenger.py

+40
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,52 @@
1+
from pandaharvester.harvesterconfig import harvester_config
12
from pandaharvester.harvestercore.plugin_base import PluginBase
23

34

5+
# get payload interaction attributes from harvester config
6+
def get_payload_interaction_attr(attr, default=None):
7+
return getattr(harvester_config.payload_interaction, attr, default)
8+
9+
410
# base messenger
511
class BaseMessenger(PluginBase):
612
# constructor
713
def __init__(self, **kwarg):
14+
self._load_default_attrs()
815
PluginBase.__init__(self, **kwarg)
916

17+
# load default messenger attributes
18+
def _load_default_attrs(self):
19+
# json for worker attributes
20+
self.jsonAttrsFileName = get_payload_interaction_attr("workerAttributesFile")
21+
# json for job report
22+
self.jsonJobReport = get_payload_interaction_attr("jobReportFile")
23+
# json for outputs
24+
self.jsonOutputsFileName = get_payload_interaction_attr("eventStatusDumpJsonFile")
25+
# xml for outputs
26+
self.xmlOutputsBaseFileName = get_payload_interaction_attr("eventStatusDumpXmlFile")
27+
# json for job request
28+
self.jsonJobRequestFileName = get_payload_interaction_attr("jobRequestFile")
29+
# json for job spec
30+
self.jobSpecFileName = get_payload_interaction_attr("jobSpecFile", "pandaJobData.out")
31+
# json for event request
32+
self.jsonEventsRequestFileName = get_payload_interaction_attr("eventRequestFile")
33+
# json to feed events
34+
self.jsonEventsFeedFileName = get_payload_interaction_attr("eventRangesFile")
35+
# json to update events
36+
self.jsonEventsUpdateFileName = get_payload_interaction_attr("updateEventsFile")
37+
# PFC for input files
38+
self.xmlPoolCatalogFileName = get_payload_interaction_attr("xmlPoolCatalogFile")
39+
# json to get PandaIDs
40+
self.pandaIDsFile = get_payload_interaction_attr("pandaIDsFile")
41+
# json to kill worker itself
42+
self.killWorkerFile = get_payload_interaction_attr("killWorkerFile", "kill_worker.json")
43+
# json for heartbeats from the worker
44+
self.heartbeatFile = get_payload_interaction_attr("heartbeatFile", "worker_heartbeat.json")
45+
# task specific persistent dir
46+
self.taskWorkBaseDir = get_payload_interaction_attr("taskWorkBaseDir", "/tmp/workdir")
47+
# task-level work state file
48+
self.taskWorkStateFile = get_payload_interaction_attr("taskWorkStateFile", "state.json")
49+
1050
# get access point
1151
def get_access_point(self, workspec, panda_id):
1252
pass

pandaharvester/harvestermessenger/http_server_messenger.py

+13-10
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,9 @@ def set_logger(master_logger):
2828
shared_file_messenger.set_logger(master_logger)
2929

3030

31+
messenger_inst = shared_file_messenger.SharedFileMessenger()
32+
33+
3134
# handler for http front-end
3235
class HttpHandler(BaseHTTPRequestHandler):
3336
def __init__(self, *args, **kwargs):
@@ -91,34 +94,34 @@ def do_POST(self):
9194
opType = None
9295
filePath = ""
9396
if methodName == "requestJobs":
94-
filePath = os.path.join(workSpec.get_access_point(), shared_file_messenger.jsonJobRequestFileName)
97+
filePath = os.path.join(workSpec.get_access_point(), messenger_inst.jsonJobRequestFileName)
9598
opType = "w"
9699
elif methodName == "getJobs":
97-
filePath = os.path.join(workSpec.get_access_point(), shared_file_messenger.jobSpecFileName)
100+
filePath = os.path.join(workSpec.get_access_point(), messenger_inst.jobSpecFileName)
98101
opType = "r"
99102
elif methodName == "requestEventRanges":
100-
filePath = os.path.join(workSpec.get_access_point(), shared_file_messenger.jsonEventsRequestFileName)
103+
filePath = os.path.join(workSpec.get_access_point(), messenger_inst.jsonEventsRequestFileName)
101104
opType = "w"
102105
elif methodName == "getEventRanges":
103-
filePath = os.path.join(workSpec.get_access_point(), shared_file_messenger.jsonEventsFeedFileName)
106+
filePath = os.path.join(workSpec.get_access_point(), messenger_inst.jsonEventsFeedFileName)
104107
opType = "r"
105108
elif methodName == "updateJobs":
106-
filePath = os.path.join(workSpec.get_access_point(), shared_file_messenger.jsonAttrsFileName)
109+
filePath = os.path.join(workSpec.get_access_point(), messenger_inst.jsonAttrsFileName)
107110
opType = "w"
108111
elif methodName == "uploadJobReport":
109-
filePath = os.path.join(workSpec.get_access_point(), shared_file_messenger.jsonJobReport)
112+
filePath = os.path.join(workSpec.get_access_point(), messenger_inst.jsonJobReport)
110113
opType = "w"
111114
elif methodName == "uploadEventOutputDump":
112-
filePath = os.path.join(workSpec.get_access_point(), shared_file_messenger.jsonOutputsFileName)
115+
filePath = os.path.join(workSpec.get_access_point(), messenger_inst.jsonOutputsFileName)
113116
opType = "w"
114117
elif methodName == "setPandaIDs":
115-
filePath = os.path.join(workSpec.get_access_point(), shared_file_messenger.pandaIDsFile)
118+
filePath = os.path.join(workSpec.get_access_point(), messenger_inst.pandaIDsFile)
116119
opType = "w"
117120
elif methodName == "killWorker":
118-
filePath = os.path.join(workSpec.get_access_point(), shared_file_messenger.killWorkerFile)
121+
filePath = os.path.join(workSpec.get_access_point(), messenger_inst.killWorkerFile)
119122
opType = "w"
120123
elif methodName == "heartbeat":
121-
filePath = os.path.join(workSpec.get_access_point(), shared_file_messenger.heartbeatFile)
124+
filePath = os.path.join(workSpec.get_access_point(), messenger_inst.heartbeatFile)
122125
opType = "w"
123126
else:
124127
self.send_response(501)

0 commit comments

Comments
 (0)