10
10
# - Paul Nilsson, paul.nilsson@cern.ch, 2017-2019
11
11
12
12
from __future__ import print_function # Python 2 (2to3 complains about this)
13
+ from __future__ import absolute_import
13
14
14
15
import argparse
15
16
import logging
@@ -68,7 +69,7 @@ def main():
68
69
infosys .init (args .queue )
69
70
# check if queue is ACTIVE
70
71
if infosys .queuedata .state != 'ACTIVE' :
71
- logger .critical ('specified queue is NOT ACTIVE: %s -- aborting' % infosys .queuedata .name )
72
+ logger .critical ('specified queue is NOT ACTIVE: %s -- aborting' , infosys .queuedata .name )
72
73
return errors .PANDAQUEUENOTACTIVE
73
74
except PilotException as error :
74
75
logger .fatal (error )
@@ -81,14 +82,14 @@ def main():
81
82
environ ['PILOT_SITENAME' ] = infosys .queuedata .resource #args.site # TODO: replace with singleton
82
83
83
84
# set requested workflow
84
- logger .info ('pilot arguments: %s' % str (args ))
85
+ logger .info ('pilot arguments: %s' , str (args ))
85
86
workflow = __import__ ('pilot.workflow.%s' % args .workflow , globals (), locals (), [args .workflow ], 0 ) # Python 3, -1 -> 0
86
87
87
88
# execute workflow
88
89
try :
89
90
exit_code = workflow .run (args )
90
91
except Exception as e :
91
- logger .fatal ('main pilot function caught exception: %s' % e )
92
+ logger .fatal ('main pilot function caught exception: %s' , e )
92
93
exit_code = None
93
94
94
95
return exit_code
@@ -101,62 +102,6 @@ class Args:
101
102
pass
102
103
103
104
104
- # rename module to pilot2 to avoid conflict in import with pilot directory
105
- def import_module (** kwargs ):
106
- """
107
- This function allows for importing the pilot code.
108
-
109
- :param kwargs: pilot options (dictionary).
110
- :return: pilot error code (integer).
111
- """
112
-
113
- argument_dictionary = {'-a' : kwargs .get ('workdir' , '' ),
114
- '-d' : kwargs .get ('debug' , None ),
115
- '-w' : kwargs .get ('workflow' , 'generic' ),
116
- '-l' : kwargs .get ('lifetime' , '3600' ),
117
- '-q' : kwargs .get ('queue' ), # required
118
- '-r' : kwargs .get ('resource' ), # required
119
- '-s' : kwargs .get ('site' ), # required
120
- '-j' : kwargs .get ('job_label' , 'ptest' ), # change default later to 'managed'
121
- '-i' : kwargs .get ('version_tag' , 'PR' ),
122
- '-t' : kwargs .get ('verify_proxy' , True ),
123
- '-z' : kwargs .get ('update_server' , True ),
124
- '--cacert' : kwargs .get ('cacert' , None ),
125
- '--capath' : kwargs .get ('capath' ),
126
- '--url' : kwargs .get ('url' , '' ),
127
- '-p' : kwargs .get ('port' , '25443' ),
128
- '--country-group' : kwargs .get ('country_group' , '' ),
129
- '--working-group' : kwargs .get ('working_group' , '' ),
130
- '--allow-other-country' : kwargs .get ('allow_other_country' , 'False' ),
131
- '--allow-same-user' : kwargs .get ('allow_same_user' , 'True' ),
132
- '--pilot-user' : kwargs .get ('pilot_user' , 'generic' ),
133
- '--input-dir' : kwargs .get ('input_dir' , '' ),
134
- '--output-dir' : kwargs .get ('output_dir' , '' ),
135
- '--hpc-resource' : kwargs .get ('hpc_resource' , '' ),
136
- '--harvester-workdir' : kwargs .get ('harvester_workdir' , '' ),
137
- '--harvester-datadir' : kwargs .get ('harvester_datadir' , '' ),
138
- '--harvester-eventstatusdump' : kwargs .get ('harvester_eventstatusdump' , '' ),
139
- '--harvester-workerattributes' : kwargs .get ('harvester_workerattributes' , '' ),
140
- '--harvester-submitmode' : kwargs .get ('harvester_submitmode' , '' ),
141
- '--resource-type' : kwargs .get ('resource_type' , '' )
142
- }
143
-
144
- args = Args ()
145
- parser = argparse .ArgumentParser ()
146
- try :
147
- _items = list (argument_dictionary .items ()) # Python 3
148
- except Exception :
149
- _items = argument_dictionary .iteritems () # Python 2
150
- for key , value in _items :
151
- print (key , value )
152
- parser .add_argument (key )
153
- parser .parse_args (args = [key , value ], namespace = args ) # convert back int and bool strings to int and bool??
154
-
155
- # call main pilot function
156
-
157
- return 0
158
-
159
-
160
105
def str2bool (v ):
161
106
""" Helper function to convert string to bool """
162
107
@@ -379,6 +324,11 @@ def get_args():
379
324
dest = 'jobtype' ,
380
325
default = '' ,
381
326
help = 'Job type (managed, user)' )
327
+ arg_parser .add_argument ('--use-rucio-traces' ,
328
+ dest = 'use_rucio_traces' ,
329
+ type = str2bool ,
330
+ default = True ,
331
+ help = 'Use rucio traces' )
382
332
383
333
# HPC options
384
334
arg_parser .add_argument ('--hpc-resource' ,
@@ -413,10 +363,10 @@ def create_main_work_dir(args):
413
363
try :
414
364
# create the main PanDA Pilot work directory
415
365
mkdirs (mainworkdir )
416
- except Exception as e :
366
+ except PilotException as error :
417
367
# print to stderr since logging has not been established yet
418
- print ('failed to create workdir at %s -- aborting: %s' % (mainworkdir , e ), file = sys .stderr )
419
- exit_code = shell_exit_code (e ._errorCode )
368
+ print ('failed to create workdir at %s -- aborting: %s' % (mainworkdir , error ), file = sys .stderr )
369
+ exit_code = shell_exit_code (error ._errorCode )
420
370
else :
421
371
mainworkdir = getcwd ()
422
372
@@ -467,9 +417,15 @@ def set_environment_variables(args, mainworkdir):
467
417
# set the (HPC) resource name (if set in options)
468
418
environ ['PILOT_RESOURCE_NAME' ] = args .hpc_resource
469
419
420
+ # allow for the possibility of turning off rucio traces
421
+ environ ['PILOT_USE_RUCIO_TRACES' ] = str (args .use_rucio_traces )
422
+
470
423
# event service executor type
471
424
environ ['PILOT_ES_EXECUTOR_TYPE' ] = args .executor_type
472
425
426
+ if args .output_dir :
427
+ environ ['PILOT_OUTPUT_DIR' ] = args .output_dir
428
+
473
429
# keep track of the server urls
474
430
_port = ":%s" % args .port
475
431
url = args .url if _port in args .url else args .url + _port
@@ -495,9 +451,9 @@ def wrap_up(initdir, mainworkdir, args):
495
451
try :
496
452
rmtree (mainworkdir )
497
453
except Exception as e :
498
- logging .warning ("failed to remove %s: %s" % ( mainworkdir , e ) )
454
+ logging .warning ("failed to remove %s: %s" , mainworkdir , e )
499
455
else :
500
- logging .info ("removed %s" % mainworkdir )
456
+ logging .info ("removed %s" , mainworkdir )
501
457
502
458
# in Harvester mode, create a kill_worker file that will instruct Harvester that the pilot has finished
503
459
if args .harvester :
@@ -509,15 +465,15 @@ def wrap_up(initdir, mainworkdir, args):
509
465
except Exception :
510
466
exit_code = trace
511
467
else :
512
- logging .info ('traces error code: %d' % exit_code )
468
+ logging .info ('traces error code: %d' , exit_code )
513
469
if trace .pilot ['nr_jobs' ] <= 1 :
514
470
if exit_code != 0 :
515
- logging .info ('an exit code was already set: %d (will be converted to a standard shell code)' % exit_code )
471
+ logging .info ('an exit code was already set: %d (will be converted to a standard shell code)' , exit_code )
516
472
elif trace .pilot ['nr_jobs' ] > 0 :
517
473
if trace .pilot ['nr_jobs' ] == 1 :
518
- logging .getLogger (__name__ ).info ('pilot has finished (%d job was processed)' % trace .pilot ['nr_jobs' ])
474
+ logging .getLogger (__name__ ).info ('pilot has finished (%d job was processed)' , trace .pilot ['nr_jobs' ])
519
475
else :
520
- logging .getLogger (__name__ ).info ('pilot has finished (%d jobs were processed)' % trace .pilot ['nr_jobs' ])
476
+ logging .getLogger (__name__ ).info ('pilot has finished (%d jobs were processed)' , trace .pilot ['nr_jobs' ])
521
477
exit_code = SUCCESS
522
478
elif trace .pilot ['state' ] == FAILURE :
523
479
logging .critical ('pilot workflow failure -- aborting' )
@@ -579,7 +535,7 @@ def get_pilot_source_dir():
579
535
set_environment_variables (args , mainworkdir )
580
536
581
537
# setup and establish standard logging
582
- establish_logging (args )
538
+ establish_logging (debug = args . debug , nopilotlog = args . nopilotlog )
583
539
584
540
# execute main function
585
541
trace = main ()
0 commit comments