ViewVC Help
View File | Revision Log | Show Annotations | Root Listing
root/cvsroot/COMP/CRAB/python/cms_cmssw.py
(Generate patch)

Comparing COMP/CRAB/python/cms_cmssw.py (file contents):
Revision 1.101 by fanzago, Thu Jun 28 14:54:43 2007 UTC vs.
Revision 1.128 by fanzago, Thu Oct 11 16:23:44 2007 UTC

# Line 2 | Line 2 | from JobType import JobType
2   from crab_logger import Logger
3   from crab_exceptions import *
4   from crab_util import *
5 + from BlackWhiteListParser import BlackWhiteListParser
6   import common
7   import Scram
8  
9 < import os, string, re, shutil, glob
9 > import os, string, glob
10  
11   class Cmssw(JobType):
12      def __init__(self, cfg_params, ncjobs):
# Line 15 | Line 16 | class Cmssw(JobType):
16          self._params = {}
17          self.cfg_params = cfg_params
18  
19 +        # init BlackWhiteListParser
20 +        self.blackWhiteListParser = BlackWhiteListParser(cfg_params)
21 +
22          try:
23              self.MaxTarBallSize = float(self.cfg_params['EDG.maxtarballsize'])
24          except KeyError:
# Line 40 | Line 44 | class Cmssw(JobType):
44          self.fjrFileName = 'crab_fjr.xml'
45  
46          self.version = self.scram.getSWVersion()
47 +        
48 +        #
49 +        # Try to block creation in case of arch/version mismatch
50 +        #
51 +
52 +        a = string.split(self.version, "_")
53 +
54 +        if int(a[1]) == 1 and (int(a[2]) < 5 and self.executable_arch.find('slc4') == 0):
55 +            msg = "Error: CMS does not support %s with %s architecture"%(self.version, self.executable_arch)
56 +            raise CrabException(msg)
57 +        if int(a[1]) == 1 and (int(a[2]) >= 5 and self.executable_arch.find('slc3') == 0):
58 +            msg = "Error: CMS does not support %s with %s architecture"%(self.version, self.executable_arch)
59 +            raise CrabException(msg)
60 +        
61          common.taskDB.setDict('codeVersion',self.version)
62          self.setParam_('application', self.version)
63  
# Line 73 | Line 91 | class Cmssw(JobType):
91              try:
92                  datasetpath_split = self.datasetPath.split("/")
93                  # standard style
94 +                self.setParam_('datasetFull', self.datasetPath)
95                  if self.use_dbs_1 == 1 :
96                      self.setParam_('dataset', datasetpath_split[1])
97                      self.setParam_('owner', datasetpath_split[-1])
# Line 173 | Line 192 | class Cmssw(JobType):
192                      if not os.path.exists(file):
193                          raise CrabException("Additional input file not found: "+file)
194                      pass
195 <                    fname = string.split(file, '/')[-1]
196 <                    storedFile = common.work_space.pathForTgz()+'share/'+fname
197 <                    shutil.copyfile(file, storedFile)
198 <                    self.additional_inbox_files.append(string.strip(storedFile))
195 >                    # fname = string.split(file, '/')[-1]
196 >                    # storedFile = common.work_space.pathForTgz()+'share/'+fname
197 >                    # shutil.copyfile(file, storedFile)
198 >                    self.additional_inbox_files.append(string.strip(file))
199                  pass
200              pass
201              common.logger.debug(5,"Additional input files: "+str(self.additional_inbox_files))
# Line 300 | Line 319 | class Cmssw(JobType):
319                          if (self.sourceSeedVtx) :
320                              PsetEdit.vtxSeed("INPUTVTX")
321                          if (self.sourceSeedG4) :
322 <                            self.PsetEdit.g4Seed("INPUTG4")
322 >                            PsetEdit.g4Seed("INPUTG4")
323                          if (self.sourceSeedMix) :
324 <                            self.PsetEdit.mixSeed("INPUTMIX")
324 >                            PsetEdit.mixSeed("INPUTMIX")
325                  # add FrameworkJobReport to parameter-set
326                  PsetEdit.addCrabFJR(self.fjrFileName)
327                  PsetEdit.psetWriter(self.configFilename())
# Line 444 | Line 463 | class Cmssw(JobType):
463          while ( (eventsRemaining > 0) and (blockCount < numBlocksInDataset) and (jobCount < totalNumberOfJobs)):
464              block = blocks[blockCount]
465              blockCount += 1
466 +            if block not in jobsOfBlock.keys() :
467 +                jobsOfBlock[block] = []
468              
469              if self.eventsbyblock.has_key(block) :
470                  numEventsInBlock = self.eventsbyblock[block]
# Line 494 | Line 515 | class Cmssw(JobType):
515                              self.jobDestination.append(blockSites[block])
516                              common.logger.debug(5,"Job "+str(jobCount+1)+" Destination: "+str(self.jobDestination[jobCount]))
517                              # fill jobs of block dictionary
518 <                            if block in jobsOfBlock.keys() :
498 <                                jobsOfBlock[block].append(jobCount+1)
499 <                            else:
500 <                                jobsOfBlock[block] = [jobCount+1]
518 >                            jobsOfBlock[block].append(jobCount+1)
519                              # reset counter
520                              jobCount = jobCount + 1
521                              totalEventCount = totalEventCount + filesEventCount - jobSkipEventCount
# Line 521 | Line 539 | class Cmssw(JobType):
539                          common.logger.debug(3,"Job "+str(jobCount+1)+" can run over "+str(eventsPerJobRequested)+" events.")
540                          self.jobDestination.append(blockSites[block])
541                          common.logger.debug(5,"Job "+str(jobCount+1)+" Destination: "+str(self.jobDestination[jobCount]))
542 <                        if block in jobsOfBlock.keys() :
525 <                            jobsOfBlock[block].append(jobCount+1)
526 <                        else:
527 <                            jobsOfBlock[block] = [jobCount+1]
542 >                        jobsOfBlock[block].append(jobCount+1)
543                          # reset counter
544                          jobCount = jobCount + 1
545                          totalEventCount = totalEventCount + eventsPerJobRequested
# Line 545 | Line 560 | class Cmssw(JobType):
560                          common.logger.debug(3,"Job "+str(jobCount+1)+" can run over "+str(eventsPerJobRequested)+" events.")
561                          self.jobDestination.append(blockSites[block])
562                          common.logger.debug(5,"Job "+str(jobCount+1)+" Destination: "+str(self.jobDestination[jobCount]))
563 <                        if block in jobsOfBlock.keys() :
549 <                            jobsOfBlock[block].append(jobCount+1)
550 <                        else:
551 <                            jobsOfBlock[block] = [jobCount+1]
563 >                        jobsOfBlock[block].append(jobCount+1)
564                          # increase counter
565                          jobCount = jobCount + 1
566                          totalEventCount = totalEventCount + eventsPerJobRequested
# Line 571 | Line 583 | class Cmssw(JobType):
583          # screen output
584          screenOutput = "List of jobs and available destination sites:\n\n"
585  
586 <        blockCounter = 0
587 <        for block in jobsOfBlock.keys():
588 <            blockCounter += 1
577 <            screenOutput += "Block %5i: jobs %20s: sites: %s\n" % (blockCounter,spanRanges(jobsOfBlock[block]),','.join(blockSites[block]))
586 >        # keep trace of block with no sites to print a warning at the end
587 >        noSiteBlock = []
588 >        bloskNoSite = []
589  
590 +        blockCounter = 0
591 +        for block in blocks:
592 +            if block in jobsOfBlock.keys() :
593 +                blockCounter += 1
594 +                screenOutput += "Block %5i: jobs %20s: sites: %s\n" % (blockCounter,spanRanges(jobsOfBlock[block]),','.join(self.blackWhiteListParser.checkWhiteList(self.blackWhiteListParser.checkBlackList(blockSites[block],block),block)))
595 +                if len(self.blackWhiteListParser.checkWhiteList(self.blackWhiteListParser.checkBlackList(blockSites[block],block),block)) == 0:
596 +                    noSiteBlock.append( spanRanges(jobsOfBlock[block]) )
597 +                    bloskNoSite.append( blockCounter )
598 +        
599          common.logger.message(screenOutput)
600 +        if len(noSiteBlock) > 0 and len(bloskNoSite) > 0:
601 +            msg = 'WARNING: No sites are hosting any part of data for block:\n                '
602 +            virgola = ""
603 +            if len(bloskNoSite) > 1:
604 +                virgola = ","
605 +            for block in bloskNoSite:
606 +                msg += ' ' + str(block) + virgola
607 +            msg += '\n               Related jobs:\n                 '
608 +            virgola = ""
609 +            if len(noSiteBlock) > 1:
610 +                virgola = ","
611 +            for range_jobs in noSiteBlock:
612 +                msg += str(range_jobs) + virgola
613 +            msg += '\n               will not be submitted and this block of data can not be analyzed!\n'
614 +            common.logger.message(msg)
615  
616          self.list_of_args = list_of_lists
617          return
# Line 845 | Line 880 | class Cmssw(JobType):
880          ## OLI_Daniele at this level  middleware already known
881  
882          txt += 'if [ $middleware == LCG ]; then \n'
883 +        txt += '    echo "### First set SCRAM ARCH and BUILD_ARCH to ' + self.executable_arch + ' ###"\n'
884 +        txt += '    export SCRAM_ARCH='+self.executable_arch+'\n'
885 +        txt += '    export BUILD_ARCH='+self.executable_arch+'\n'
886          txt += self.wsSetupCMSLCGEnvironment_()
887          txt += 'elif [ $middleware == OSG ]; then\n'
888          txt += '    WORKING_DIR=`/bin/mktemp  -d $OSG_WN_TMP/cms_XXXXXXXXXXXX`\n'
# Line 863 | Line 901 | class Cmssw(JobType):
901          txt += '    echo "Change to working directory: $WORKING_DIR"\n'
902          txt += '    cd $WORKING_DIR\n'
903          txt += self.wsSetupCMSOSGEnvironment_()
904 +        txt += '    echo "### Set SCRAM ARCH to ' + self.executable_arch + ' ###"\n'
905 +        txt += '    export SCRAM_ARCH='+self.executable_arch+'\n'
906          txt += 'fi\n'
907  
908          # Prepare JobType-specific part
909          scram = self.scram.commandName()
910          txt += '\n\n'
911          txt += 'echo "### SPECIFIC JOB SETUP ENVIRONMENT ###"\n'
872        txt += 'echo "Setting SCRAM_ARCH='+self.executable_arch+'"\n'
873        txt += 'export SCRAM_ARCH='+self.executable_arch+'\n'
912          txt += scram+' project CMSSW '+self.version+'\n'
913          txt += 'status=$?\n'
914          txt += 'if [ $status != 0 ] ; then\n'
# Line 1103 | Line 1141 | class Cmssw(JobType):
1141      def executableArgs(self):
1142          if self.scriptExe:#CarlosDaniele
1143              return   self.scriptExe + " $NJob"
1144 <        else:
1145 <            return " -p pset.cfg"
1144 >        else:
1145 >            # if >= CMSSW_1_5_X, add -e
1146 >            version_array = self.scram.getSWVersion().split('_')
1147 >            major = 0
1148 >            minor = 0
1149 >            try:
1150 >                major = int(version_array[1])
1151 >                minor = int(version_array[2])
1152 >            except:
1153 >                msg = "Cannot parse CMSSW version string: " + "_".join(version_array) + " for major and minor release number!"  
1154 >                raise CrabException(msg)
1155 >            if major >= 1 and minor >= 5 :
1156 >                return " -e -p pset.cfg"
1157 >            else:
1158 >                return " -p pset.cfg"
1159  
1160      def inputSandbox(self, nj):
1161          """
# Line 1153 | Line 1204 | class Cmssw(JobType):
1204          txt += '# directory content\n'
1205          txt += 'ls \n'
1206  
1207 <        for fileWithSuffix in (self.output_file+self.output_file_sandbox):
1207 >        txt += 'output_exit_status=0\n'
1208 >        
1209 >        for fileWithSuffix in (self.output_file_sandbox):
1210              output_file_num = self.numberFile_(fileWithSuffix, '$NJob')
1211              txt += '\n'
1212              txt += '# check output file\n'
1213 <            txt += 'ls '+fileWithSuffix+'\n'
1214 <            txt += 'ls_result=$?\n'
1215 <            txt += 'if [ $ls_result -ne 0 ] ; then\n'
1216 <            txt += '   exit_status=60302\n'
1217 <            txt += '   echo "ERROR: Problem with output file"\n'
1213 >            txt += 'if [ -e ./'+fileWithSuffix+' ] ; then\n'
1214 >            txt += '    mv '+fileWithSuffix+' $RUNTIME_AREA\n'
1215 >            txt += '    cp $RUNTIME_AREA/'+fileWithSuffix+' $RUNTIME_AREA/'+output_file_num+'\n'
1216 >            txt += 'else\n'
1217 >            txt += '    exit_status=60302\n'
1218 >            txt += '    echo "ERROR: Problem with output file '+fileWithSuffix+'"\n'
1219              if common.scheduler.boss_scheduler_name == 'condor_g':
1220                  txt += '    if [ $middleware == OSG ]; then \n'
1221                  txt += '        echo "prepare dummy output file"\n'
1222                  txt += '        echo "Processing of job output failed" > $RUNTIME_AREA/'+output_file_num+'\n'
1223                  txt += '    fi \n'
1224 +            txt += 'fi\n'
1225 +        
1226 +        for fileWithSuffix in (self.output_file):
1227 +            output_file_num = self.numberFile_(fileWithSuffix, '$NJob')
1228 +            txt += '\n'
1229 +            txt += '# check output file\n'
1230 +            txt += 'if [ -e ./'+fileWithSuffix+' ] ; then\n'
1231 +            txt += '    mv '+fileWithSuffix+' $RUNTIME_AREA\n'
1232 +            txt += '    cp $RUNTIME_AREA/'+fileWithSuffix+' $RUNTIME_AREA/'+output_file_num+'\n'
1233              txt += 'else\n'
1234 <            ### FEDE FOR DBS OUTPUT PUBLICATION
1235 <            txt += '   mv '+fileWithSuffix+' $RUNTIME_AREA\n'
1236 <            txt += '   cp $RUNTIME_AREA/'+fileWithSuffix+' $RUNTIME_AREA/'+output_file_num+'\n'
1237 <            #################################
1234 >            txt += '    exit_status=60302\n'
1235 >            txt += '    echo "ERROR: Problem with output file '+fileWithSuffix+'"\n'
1236 >            txt += '    echo "JOB_EXIT_STATUS = $exit_status"\n'
1237 >            txt += '    output_exit_status=$exit_status\n'
1238 >            if common.scheduler.boss_scheduler_name == 'condor_g':
1239 >                txt += '    if [ $middleware == OSG ]; then \n'
1240 >                txt += '        echo "prepare dummy output file"\n'
1241 >                txt += '        echo "Processing of job output failed" > $RUNTIME_AREA/'+output_file_num+'\n'
1242 >                txt += '    fi \n'
1243              txt += 'fi\n'
1244 <      
1244 >        file_list = []
1245 >        for fileWithSuffix in (self.output_file):
1246 >             file_list.append(self.numberFile_(fileWithSuffix, '$NJob'))
1247 >            
1248 >        txt += 'file_list="'+string.join(file_list,' ')+'"\n'
1249          txt += 'cd $RUNTIME_AREA\n'
1178        #### FEDE this is the cleanEnv function
1179        ### OLI_DANIELE
1180        #txt += 'if [ $middleware == OSG ]; then\n'  
1181        #txt += '    cd $RUNTIME_AREA\n'
1182        #txt += '    echo "Remove working directory: $WORKING_DIR"\n'
1183        #txt += '    /bin/rm -rf $WORKING_DIR\n'
1184        #txt += '    if [ -d $WORKING_DIR ] ;then\n'
1185        #txt += '        echo "SET_EXE 60999 ==> OSG $WORKING_DIR could not be deleted on WN `hostname` after cleanup of WN"\n'
1186        #txt += '        echo "JOB_EXIT_STATUS = 60999"\n'
1187        #txt += '        echo "JobExitCode=60999" | tee -a $RUNTIME_AREA/$repo\n'
1188        #txt += '        dumpStatus $RUNTIME_AREA/$repo\n'
1189        #txt += '        rm -f $RUNTIME_AREA/$repo \n'
1190        #txt += '        echo "MonitorJobID=`echo $MonitorJobID`" | tee -a $RUNTIME_AREA/$repo \n'
1191        #txt += '        echo "MonitorID=`echo $MonitorID`" | tee -a $RUNTIME_AREA/$repo\n'
1192        #txt += '    fi\n'
1193        #txt += 'fi\n'
1194        #txt += '\n'
1195
1196        file_list = ''
1197        ## Add to filelist only files to be possibly copied to SE
1198        for fileWithSuffix in self.output_file:
1199            output_file_num = self.numberFile_(fileWithSuffix, '$NJob')
1200            file_list=file_list+output_file_num+' '
1201        file_list=file_list[:-1]
1202        txt += 'file_list="'+file_list+'"\n'
1203
1250          return txt
1251  
1252      def numberFile_(self, file, txt):
# Line 1230 | Line 1276 | class Cmssw(JobType):
1276              req='Member("VO-cms-' + \
1277                   self.version + \
1278                   '", other.GlueHostApplicationSoftwareRunTimeEnvironment)'
1279 <        # if self.executable_arch:
1280 <        #     req='Member("VO-cms-' + \
1281 <        #          self.executable_arch + \
1282 <        #          '", other.GlueHostApplicationSoftwareRunTimeEnvironment)'
1279 >        ## SL add requirement for OS version only if SL4
1280 >        #reSL4 = re.compile( r'slc4' )
1281 >        if self.executable_arch: # and reSL4.search(self.executable_arch):
1282 >            req+=' && Member("VO-cms-' + \
1283 >                 self.executable_arch + \
1284 >                 '", other.GlueHostApplicationSoftwareRunTimeEnvironment)'
1285  
1286          req = req + ' && (other.GlueHostNetworkAdapterOutboundIP)'
1287  
# Line 1345 | Line 1393 | class Cmssw(JobType):
1393          """
1394  
1395          txt = ''
1348        txt += 'echo "Modify Job Report" \n'
1349        #txt += 'chmod a+x $RUNTIME_AREA/'+self.version+'/ProdAgentApi/FwkJobRep/ModifyJobReport.py\n'
1350        ################ FEDE FOR DBS2 #############################################
1351        txt += 'chmod a+x $SOFTWARE_DIR/ProdAgentApi/FwkJobRep/ModifyJobReport.py\n'
1352        #############################################################################
1396          try:
1397              publish_data = int(self.cfg_params['USER.publish_data'])          
1398          except KeyError:
1399              publish_data = 0
1400 +        if (publish_data == 1):  
1401 +            txt += 'echo "Modify Job Report" \n'
1402 +            #txt += 'chmod a+x $RUNTIME_AREA/'+self.version+'/ProdAgentApi/FwkJobRep/ModifyJobReport.py\n'
1403 +            ################ FEDE FOR DBS2 #############################################
1404 +            txt += 'chmod a+x $SOFTWARE_DIR/ProdAgentApi/FwkJobRep/ModifyJobReport.py\n'
1405 +            #############################################################################
1406 +            #try:
1407 +            #    publish_data = int(self.cfg_params['USER.publish_data'])          
1408 +            #except KeyError:
1409 +            #    publish_data = 0
1410  
1411 <        txt += 'if [ -z "$SE" ]; then\n'
1412 <        txt += '    SE="" \n'
1413 <        txt += 'fi \n'
1414 <        txt += 'if [ -z "$SE_PATH" ]; then\n'
1415 <        txt += '    SE_PATH="" \n'
1416 <        txt += 'fi \n'
1417 <        txt += 'echo "SE = $SE"\n'
1418 <        txt += 'echo "SE_PATH = $SE_PATH"\n'
1411 >            txt += 'if [ -z "$SE" ]; then\n'
1412 >            txt += '    SE="" \n'
1413 >            txt += 'fi \n'
1414 >            txt += 'if [ -z "$SE_PATH" ]; then\n'
1415 >            txt += '    SE_PATH="" \n'
1416 >            txt += 'fi \n'
1417 >            txt += 'echo "SE = $SE"\n'
1418 >            txt += 'echo "SE_PATH = $SE_PATH"\n'
1419  
1420 <        if (publish_data == 1):  
1420 >        #if (publish_data == 1):  
1421              #processedDataset = self.cfg_params['USER.processed_datasetname']
1422              processedDataset = self.cfg_params['USER.publish_data_name']
1423              txt += 'ProcessedDataset='+processedDataset+'\n'
# Line 1379 | Line 1432 | class Cmssw(JobType):
1432              txt += 'fi \n'
1433              txt += 'echo "ProcessedDataset = $ProcessedDataset"\n'
1434              txt += 'echo "FOR_LFN = $FOR_LFN" \n'
1435 +            txt += 'echo "CMSSW_VERSION = $CMSSW_VERSION"\n\n'
1436 +            #txt += 'echo "$RUNTIME_AREA/'+self.version+'/ProdAgentApi/FwkJobRep/ModifyJobReport.py crab_fjr_$NJob.xml $NJob $FOR_LFN $PrimaryDataset $DataTier $ProcessedDataset $ApplicationFamily $executable $CMSSW_VERSION $PSETHASH $SE $SE_PATH"\n'
1437 +            txt += 'echo "$SOFTWARE_DIR/ProdAgentApi/FwkJobRep/ModifyJobReport.py crab_fjr_$NJob.xml $NJob $FOR_LFN $PrimaryDataset $DataTier $ProcessedDataset $ApplicationFamily $executable $CMSSW_VERSION $PSETHASH $SE $SE_PATH"\n'
1438 +            txt += '$SOFTWARE_DIR/ProdAgentApi/FwkJobRep/ModifyJobReport.py crab_fjr_$NJob.xml $NJob $FOR_LFN $PrimaryDataset $DataTier $ProcessedDataset $ApplicationFamily $executable $CMSSW_VERSION $PSETHASH $SE $SE_PATH\n'
1439 +            #txt += '$RUNTIME_AREA/'+self.version+'/ProdAgentApi/FwkJobRep/ModifyJobReport.py crab_fjr_$NJob.xml $NJob $FOR_LFN $PrimaryDataset $DataTier $ProcessedDataset $ApplicationFamily $executable $CMSSW_VERSION $PSETHASH $SE $SE_PATH\n'
1440 +      
1441 +            txt += 'modifyReport_result=$?\n'
1442 +            txt += 'echo modifyReport_result = $modifyReport_result\n'
1443 +            txt += 'if [ $modifyReport_result -ne 0 ]; then\n'
1444 +            txt += '    exit_status=1\n'
1445 +            txt += '    echo "ERROR: Problem with ModifyJobReport"\n'
1446 +            txt += 'else\n'
1447 +            txt += '    mv NewFrameworkJobReport.xml crab_fjr_$NJob.xml\n'
1448 +            txt += 'fi\n'
1449          else:
1450 <            txt += 'ProcessedDataset=no_data_to_publish \n'
1450 >            txt += 'echo "no data publication required"\n'
1451 >            #txt += 'ProcessedDataset=no_data_to_publish \n'
1452              #### FEDE: added slash in LFN ##############
1453 <            txt += 'FOR_LFN=/local/ \n'
1454 <            txt += 'echo "ProcessedDataset = $ProcessedDataset"\n'
1455 <            txt += 'echo "FOR_LFN = $FOR_LFN" \n'
1388 <        txt += 'echo "CMSSW_VERSION = $CMSSW_VERSION"\n\n'
1389 <        #txt += 'echo "$RUNTIME_AREA/'+self.version+'/ProdAgentApi/FwkJobRep/ModifyJobReport.py crab_fjr_$NJob.xml $NJob $FOR_LFN $PrimaryDataset $DataTier $ProcessedDataset $ApplicationFamily $executable $CMSSW_VERSION $PSETHASH $SE $SE_PATH"\n'
1390 <        txt += 'echo "$SOFTWARE_DIR/ProdAgentApi/FwkJobRep/ModifyJobReport.py crab_fjr_$NJob.xml $NJob $FOR_LFN $PrimaryDataset $DataTier $ProcessedDataset $ApplicationFamily $executable $CMSSW_VERSION $PSETHASH $SE $SE_PATH"\n'
1391 <        txt += '$SOFTWARE_DIR/ProdAgentApi/FwkJobRep/ModifyJobReport.py crab_fjr_$NJob.xml $NJob $FOR_LFN $PrimaryDataset $DataTier $ProcessedDataset $ApplicationFamily $executable $CMSSW_VERSION $PSETHASH $SE $SE_PATH\n'
1392 <        #txt += '$RUNTIME_AREA/'+self.version+'/ProdAgentApi/FwkJobRep/ModifyJobReport.py crab_fjr_$NJob.xml $NJob $FOR_LFN $PrimaryDataset $DataTier $ProcessedDataset $ApplicationFamily $executable $CMSSW_VERSION $PSETHASH $SE $SE_PATH\n'
1393 <        txt += 'modifyReport_result=$?\n'
1394 <        txt += 'echo modifyReport_result = $modifyReport_result\n'
1395 <        txt += 'if [ $modifyReport_result -ne 0 ]; then\n'
1396 <        txt += '    exit_status=1\n'
1397 <        txt += '    echo "ERROR: Problem with ModifyJobReport"\n'
1398 <        txt += 'else\n'
1399 <        txt += '    mv NewFrameworkJobReport.xml crab_fjr_$NJob.xml\n'
1400 <        txt += 'fi\n'
1453 >            #txt += 'FOR_LFN=/local/ \n'
1454 >            #txt += 'echo "ProcessedDataset = $ProcessedDataset"\n'
1455 >            #txt += 'echo "FOR_LFN = $FOR_LFN" \n'
1456          return txt
1457  
1458      def cleanEnv(self):
# Line 1440 | Line 1495 | class Cmssw(JobType):
1495          for e in old:
1496              nd[e]=0
1497          return nd.keys()
1498 +
1499 +
1500 +    def checkOut(self, limit):
1501 +        """
1502 +        check the dimension of the output files
1503 +        """
1504 +        txt = 'echo "*****************************************"\n'
1505 +        txt += 'echo "** Starting output sandbox limit check **"\n'
1506 +        txt += 'echo "*****************************************"\n'
1507 +        allOutFiles = ""
1508 +        listOutFiles = []
1509 +        for fileOut in (self.output_file+self.output_file_sandbox):
1510 +             if fileOut.find('crab_fjr') == -1:
1511 +                 allOutFiles = allOutFiles + " " + self.numberFile_(fileOut, '$NJob')
1512 +                 listOutFiles.append(self.numberFile_(fileOut, '$NJob'))
1513 +        txt += 'echo "OUTPUT files: '+str(allOutFiles)+'";\n'
1514 +        txt += 'ls -gGhrta;\n'
1515 +        txt += 'sum=0;\n'
1516 +        txt += 'for file in '+str(allOutFiles)+' ; do\n'
1517 +        txt += '    if [ -e $file ]; then\n'
1518 +        txt += '        tt=`ls -gGrta $file | awk \'{ print $3 }\'`\n'
1519 +        txt += '        sum=`expr $sum + $tt`\n'
1520 +        txt += '    else\n'
1521 +        txt += '        echo "WARNING: output file $file not found!"\n'
1522 +        txt += '    fi\n'
1523 +        txt += 'done\n'
1524 +        txt += 'echo "Total Output dimension: $sum";\n'
1525 +        txt += 'limit='+str(limit)+';\n'
1526 +        txt += 'echo "OUTPUT FILES LIMIT SET TO: $limit";\n'
1527 +        txt += 'if [ $limit -lt $sum ]; then\n'
1528 +        txt += '    echo "WARNING: output files have to big size - something will be lost;"\n'
1529 +        txt += '    echo "         checking the output file sizes..."\n'
1530 +        """
1531 +        txt += '    dim=0;\n'
1532 +        txt += '    exclude=0;\n'
1533 +        txt += '    for files in '+str(allOutFiles)+' ; do\n'
1534 +        txt += '        sumTemp=0;\n'
1535 +        txt += '        for file2 in '+str(allOutFiles)+' ; do\n'
1536 +        txt += '            if [ $file != $file2 ]; then\n'
1537 +        txt += '                tt=`ls -gGrta $file2 | awk \'{ print $3 }\';`\n'
1538 +        txt += '                sumTemp=`expr $sumTemp + $tt`;\n'
1539 +        txt += '            fi\n'
1540 +        txt += '        done\n'
1541 +        txt += '        if [ $sumTemp -lt $limit ]; then\n'
1542 +        txt += '            if [ $dim -lt $sumTemp ]; then\n'
1543 +        txt += '                dim=$sumTemp;\n'
1544 +        txt += '                exclude=$file;\n'
1545 +        txt += '            fi\n'
1546 +        txt += '        fi\n'
1547 +        txt += '    done\n'
1548 +        txt += '    echo "Dimension calculated: $dim"; echo "File to exclude: $exclude";\n'
1549 +        """
1550 +        txt += '    tot=0;\n'
1551 +        txt += '    for file2 in '+str(allOutFiles)+' ; do\n'
1552 +        txt += '        tt=`ls -gGrta $file2 | awk \'{ print $3 }\';`\n'
1553 +        txt += '        tot=`expr $tot + $tt`;\n'
1554 +        txt += '        if [ $limit -lt $tot ]; then\n'
1555 +        txt += '            tot=`expr $tot - $tt`;\n'
1556 +        txt += '            fileLast=$file;\n'
1557 +        txt += '            break;\n'
1558 +        txt += '        fi\n'
1559 +        txt += '    done\n'
1560 +        txt += '    echo "Dimension calculated: $tot"; echo "First file to exclude: $file";\n'
1561 +        txt += '    flag=0;\n'    
1562 +        txt += '    for filess in '+str(allOutFiles)+' ; do\n'
1563 +        txt += '        if [ $fileLast = $filess ]; then\n'
1564 +        txt += '            flag=1;\n'
1565 +        txt += '        fi\n'
1566 +        txt += '        if [ $flag -eq 1 ]; then\n'
1567 +        txt += '            rm -f $filess;\n'
1568 +        txt += '        fi\n'
1569 +        txt += '    done\n'
1570 +        txt += '    ls -agGhrt;\n'
1571 +        txt += '    echo "WARNING: output files are too big in dimension: can not put in the output_sandbox.";\n'
1572 +        txt += '    echo "JOB_EXIT_STATUS = 70000";\n'
1573 +        txt += '    exit_status=70000;\n'
1574 +        txt += 'else'
1575 +        txt += '    echo "Total Output dimension $sum is fine.";\n'
1576 +        txt += 'fi\n'
1577 +        txt += 'echo "*****************************************"\n'
1578 +        txt += 'echo "*** Ending output sandbox limit check ***"\n'
1579 +        txt += 'echo "*****************************************"\n'
1580 +        return txt

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines