From 3998b9b9466d17b2ee87021f0c07d408237b98e9 Mon Sep 17 00:00:00 2001
From: Tamara Vazquez Schroeder <tamara.vazquez.schroeder@cern.ch>
Date: Thu, 18 Jan 2018 12:46:41 +0000
Subject: [PATCH] Merge branch 'art-v0721' into '21.0'

fixes for ART

See merge request atlas/athena!8064

(cherry picked from commit 84abc09bdce6fd514592a939641ba7f443d9b0a6 [formerly 00520d021f8a3bb967109d6d813c8da9ea9c64f7])

8fad0901 fixes for ART

Former-commit-id: 6d92ad6328d09d527050d178164eb3992011b012
---
 Tools/ART/python/ART/art_configuration.py |  2 ++
 Tools/ART/python/ART/art_grid.py          |  7 +++++-
 Tools/ART/python/ART/art_header.py        |  3 +--
 Tools/ART/scripts/art-task-grid.sh        | 30 ++++++++++++++---------
 Tools/ART/scripts/art.py                  |  6 ++---
 5 files changed, 30 insertions(+), 18 deletions(-)

diff --git a/Tools/ART/python/ART/art_configuration.py b/Tools/ART/python/ART/art_configuration.py
index 8f09e40d1a4..1e8910b62dd 100644
--- a/Tools/ART/python/ART/art_configuration.py
+++ b/Tools/ART/python/ART/art_configuration.py
@@ -85,6 +85,7 @@ class ArtConfiguration(object):
 
         """
         log = logging.getLogger(MODULE)
+        log.debug("Looking for %s %s %s %s %s", nightly_release, project, platform, package, key)
         if self.config is None:
             log.debug("No configuration")
             return default_value
@@ -108,6 +109,7 @@ class ArtConfiguration(object):
                 if key in release:
                     value = release[key]
 
+        log.debug("Value %s", value)
         return value
 
     def get_option(self, nightly_release, project, platform, package, key, option_key):
diff --git a/Tools/ART/python/ART/art_grid.py b/Tools/ART/python/ART/art_grid.py
index 25fa49b1d6c..a00e499f54b 100644
--- a/Tools/ART/python/ART/art_grid.py
+++ b/Tools/ART/python/ART/art_grid.py
@@ -404,7 +404,7 @@ class ArtGrid(ArtBase):
             cmd = ' '.join((cmd,
                             '--inds ' + inds if inds != '' else '',
                             '--n-files ' + str(n_files) if n_files > 0 else '',
-                            '--split ' + str(split) if split > 0 else ''
+                            '--split ' + str(split) if split > 0 else '',
                             '--in' if in_file else ''))
 
         cmd = ' '.join((cmd,
@@ -429,10 +429,13 @@ class ArtGrid(ArtBase):
 
         # run task from Bash Script as is needed in ATLAS setup
         # FIXME we need to parse the output
+        log.info("Grid_options: %s", grid_options)
         env = os.environ.copy()
         env['PATH'] = '.:' + env['PATH']
         env['ART_GRID_OPTIONS'] = grid_options
 
+        log.info("ART_GRID_OPTIONS %s", env['ART_GRID_OPTIONS'])
+
         jedi_id = -1
         # run the command, no_action is forwarded and used inside the script
         (exit_code, out, err) = run_command(cmd, env=env)
@@ -448,12 +451,14 @@ class ArtGrid(ArtBase):
 
     def get_grid_options(self, package, config_file):
         """Return grid options for a package."""
+        log = logging.getLogger(MODULE)
         if self.skip_setup:
             return ''
 
         configuration = ArtConfiguration(config_file)
         grid_options = configuration.get_option(self.nightly_release, self.project, self.platform, package, 'exclude-sites', '--excludedSite=')
         grid_options += ' ' + configuration.get_option(self.nightly_release, self.project, self.platform, package, 'sites', '--site=')
+        log.info('grid_options: %s', grid_options)
         return grid_options
 
     def task(self, script_directory, package, job_type, sequence_tag, no_action=False, config_file=None):
diff --git a/Tools/ART/python/ART/art_header.py b/Tools/ART/python/ART/art_header.py
index 6b43ba9b9c7..61346f2cf2c 100644
--- a/Tools/ART/python/ART/art_header.py
+++ b/Tools/ART/python/ART/art_header.py
@@ -89,8 +89,7 @@ class ArtHeader(object):
                         # handle values
                         if key not in self.header:
                             log.warning("Unknown art-header %s: %s in file %s", key, value, filename)
-                            self.header[key] = {}
-                            self.header[key]['value'] = None
+                            self.add(key, StringType)
                         if self.header[key]['value'] is None:
                             self.header[key]['value'] = value
                         else:
diff --git a/Tools/ART/scripts/art-task-grid.sh b/Tools/ART/scripts/art-task-grid.sh
index 86c13313771..807cbe82109 100755
--- a/Tools/ART/scripts/art-task-grid.sh
+++ b/Tools/ART/scripts/art-task-grid.sh
@@ -52,14 +52,19 @@ case ${TYPE} in
             shift
         fi
         NFILES=""
+        NFILES_PER_JOB=""
         if [ $1 == "--n-files" ]; then
-            NFILES="--nFiles $2 --nFilesPerJob $2"
+            NFILES="--nFiles $2"
+            NFILES_PER_JOB="--nFilesPerJob $2"
             shift
             shift
         fi
         SPLIT=""
+        LARGE_JOB="--long --memory 4096"
         if [ $1 == "--split" ]; then
             SPLIT="--split $2"
+            NFILES_PER_JOB=""
+            LARGE_JOB=""
             shift
             shift
         fi
@@ -116,6 +121,15 @@ case ${TYPE} in
         ;;
 esac
 
+# general options
+PATHENA_OPTIONS="--destSE=CERN-PROD_SCRATCHDISK"
+OUT="%OUT.tar"
+
+# we seem to have to copy the env variables locally
+GRID_OPTIONS=$ART_GRID_OPTIONS
+echo "GRID_OPTIONS=${GRID_OPTIONS}"
+
+
 if [ ${SKIP_SETUP} -eq 0 ]; then
     # maybe not necessary
     PLATFORM=${AtlasProject}_PLATFORM
@@ -131,19 +145,11 @@ if [ ${SKIP_SETUP} -eq 0 ]; then
     lsetup panda "asetup --platform=${!PLATFORM} ${AtlasBuildBranch},${AtlasBuildStamp},${AtlasProject}" || true
     echo "Setting up panda and release done"
 
-    voms-proxy-init --rfc -noregen -cert ./grid.proxy -voms atlas || true
+    voms-proxy-init --rfc -noregen -cert ./grid.proxy -voms atlas --valid 24:00 || true
     echo "Setting up proxy done"
 
 fi
 
-# general options
-PATHENA_OPTIONS="--destSE=CERN-PROD_SCRATCHDISK"
-OUT="%OUT.tar"
-
-# we seem to have to copy the env variables locally
-GRID_OPTIONS=$ART_GRID_OPTIONS
-echo "GRID_OPTIONS=${GRID_OPTIONS}"
-
 case ${TYPE} in
 
     'batch')
@@ -157,7 +163,7 @@ case ${TYPE} in
     'single')
         # <script_directory> <sequence_tag> <package> <outfile> <job_name>
         INTERNAL_COMMAND="grid single"
-        PATHENA_TYPE_OPTIONS="--long --memory 4096 ${INDS} ${NFILES}"
+        PATHENA_TYPE_OPTIONS="${LARGE_JOB} ${INDS} ${NFILES} ${NFILES_PER_JOB}"
         ARGS="${JOB_NAME}"
         echo "PATHENA_TYPE_OPTIONS=${PATHENA_TYPE_OPTIONS}"
         echo "ARGS=${ARGS}"
@@ -168,7 +174,7 @@ esac
 # NOTE: for art-internal.py the current dir can be used as it is copied there
 cd ${SUBMIT_DIRECTORY}/${PACKAGE}/run
 SUBCOMMAND="./art-internal.py ${INTERNAL_COMMAND} ${IN_FILE} ${SCRIPT_DIRECTORY} ${SEQUENCE_TAG} ${PACKAGE} ${OUT} ${ARGS}"
-CMD="pathena --disableAutoRetry ${GRID_OPTIONS} ${PATHENA_OPTIONS} ${PATHENA_TYPE_OPTIONS} --noBuild --expertOnly_skipScout --trf \"${SUBCOMMAND}\" ${SPLIT} --outDS ${OUTFILE} --extOutFile art-job.json"
+CMD="pathena ${GRID_OPTIONS} ${PATHENA_OPTIONS} ${PATHENA_TYPE_OPTIONS} --noBuild --expertOnly_skipScout --trf \"${SUBCOMMAND}\" ${SPLIT} --outDS ${OUTFILE} --extOutFile art-job.json"
 
 #--disableAutoRetry
 #--excludedSite=ANALY_TECHNION-HEP-CREAM
diff --git a/Tools/ART/scripts/art.py b/Tools/ART/scripts/art.py
index 254fecacd06..7cc3486297d 100755
--- a/Tools/ART/scripts/art.py
+++ b/Tools/ART/scripts/art.py
@@ -73,7 +73,7 @@ Tests are called with:
 """
 
 __author__ = "Tulay Cuhadar Donszelmann <tcuhadar@cern.ch>"
-__version__ = '0.7.11'
+__version__ = '0.7.21'
 
 import logging
 import os
@@ -93,12 +93,12 @@ MODULE = "art"
 
 
 @dispatch.on('compare', 'ref')
-def compare_ref(file_name, ref_file, **kwargs):
+def compare_ref(path, ref_path, **kwargs):
     """Compare the output of a job."""
     set_log(kwargs)
     art_directory = os.path.dirname(os.path.realpath(sys.argv[0]))
     entries = kwargs['entries']
-    exit(ArtBase(art_directory).compare_ref(file_name, ref_file, entries))
+    exit(ArtBase(art_directory).compare_ref(path, ref_path, entries))
 
 
 @dispatch.on('compare', 'grid')
-- 
GitLab