Exemple #1
0
 def createWMBSHelperWithTopTask(self, wmspec, block, mask = None):
     
     topLevelTask = getFirstTask(wmspec)
      
     wmbs = WMBSHelper(wmspec, block, mask, cachepath = self.workDir)
     if block:
         block = self.dbs.getFileBlock(block)[block]
     wmbs.createSubscriptionAndAddFiles(block = block)
     return wmbs
Exemple #2
0
 def addNewFilesToOpenSubscriptions(self, *elements):
     """Inject new files to wmbs for running elements that have new files.
         Assumes elements are from the same workflow"""
     if not self.params['LocalQueueFlag']:
         return
     wmspec = None
     for ele in elements:
         if not ele.isRunning() or not ele['SubscriptionId'] or not ele:
             continue
         if not ele['Inputs'] or not ele['OpenForNewData']:
             continue
         if not wmspec:
             wmspec = self.backend.getWMSpec(ele['RequestName'])
         blockName, dbsBlock = self._getDBSBlock(ele, wmspec)
         if ele['NumOfFilesAdded'] != len(dbsBlock['Files']):
             self.logger.info("Adding new files to open block %s (%s)" %
                              (blockName, ele.id))
             from WMCore.WorkQueue.WMBSHelper import WMBSHelper
             wmbsHelper = WMBSHelper(wmspec, ele['TaskName'], blockName,
                                     ele['Mask'], self.params['CacheDir'])
             ele['NumOfFilesAdded'] += wmbsHelper.createSubscriptionAndAddFiles(
                 block=dbsBlock)[1]
             self.backend.updateElements(
                 ele.id, NumOfFilesAdded=ele['NumOfFilesAdded'])
         if dbsBlock['IsOpen'] != ele['OpenForNewData']:
             self.logger.info("Closing open block %s (%s)" %
                              (blockName, ele.id))
             self.backend.updateInboxElements(
                 ele['ParentQueueId'], OpenForNewData=dbsBlock['IsOpen'])
             self.backend.updateElements(ele.id,
                                         OpenForNewData=dbsBlock['IsOpen'])
             ele['OpenForNewData'] = dbsBlock['IsOpen']
Exemple #3
0
    def _wmbsPreparation(self, match, wmspec, blockName, dbsBlock):
        """Inject data into wmbs and create subscription.
        """
        from WMCore.WorkQueue.WMBSHelper import WMBSHelper
        self.logger.info("Adding WMBS subscription for %s" %
                         match['RequestName'])

        mask = match['Mask']
        wmbsHelper = WMBSHelper(wmspec, match['TaskName'], blockName, mask,
                                self.params['CacheDir'])

        sub, match[
            'NumOfFilesAdded'] = wmbsHelper.createSubscriptionAndAddFiles(
                block=dbsBlock)
        self.logger.info(
            "Created top level subscription %s for %s with %s files" %
            (sub['id'], match['RequestName'], match['NumOfFilesAdded']))
        # update couch with wmbs subscription info
        match['SubscriptionId'] = sub['id']
        match['Status'] = 'Running'
        # do update rather than save to avoid conflicts from other thread writes
        self.backend.updateElements(match.id,
                                    Status='Running',
                                    SubscriptionId=sub['id'],
                                    NumOfFilesAdded=match['NumOfFilesAdded'])

        return sub
Exemple #4
0
    def createWMBSHelperWithTopTask(self,
                                    wmspec,
                                    block,
                                    mask=None,
                                    parentFlag=False,
                                    detail=False,
                                    commonLocation=None):

        topLevelTask = getFirstTask(wmspec)

        wmbs = WMBSHelper(wmspec,
                          topLevelTask.name(),
                          block,
                          mask,
                          cachepath=self.workDir,
                          commonLocation=commonLocation)
        if block:
            blockName = block
            if parentFlag:
                block = self.dbs.getFileBlockWithParents(blockName)
                location = self.phedex.getReplicaPhEDExNodesForBlocks(
                    block=[blockName], complete='y')
                block['PhEDExNodeNames'] = location[blockName]
            else:
                block = self.dbs.getFileBlock(blockName)
                location = self.phedex.getReplicaPhEDExNodesForBlocks(
                    block=[blockName], complete='y')
                block['PhEDExNodeNames'] = location[blockName]
        sub, files = wmbs.createSubscriptionAndAddFiles(block=block)
        if detail:
            return wmbs, sub, files
        else:
            return wmbs
Exemple #5
0
 def addNewFilesToOpenSubscriptions(self, *elements):
     """Inject new files to wmbs for running elements that have new files.
         Assumes elements are from the same workflow"""
     if not self.params['LocalQueueFlag']:
         return
     wmspec = None
     for ele in elements:
         if not ele.isRunning() or not ele['SubscriptionId'] or not ele:
             continue
         if not ele['Inputs'] or not ele['OpenForNewData']:
             continue
         if not wmspec:
             wmspec = self.backend.getWMSpec(ele['RequestName'])
         blockName, dbsBlock = self._getDBSBlock(ele, wmspec)
         if ele['NumOfFilesAdded'] != len(dbsBlock['Files']):
             self.logger.info("Adding new files to open block %s (%s)" % (blockName, ele.id))
             from WMCore.WorkQueue.WMBSHelper import WMBSHelper
             wmbsHelper = WMBSHelper(wmspec, ele['TaskName'], blockName, ele['Mask'], self.params['CacheDir'])
             ele['NumOfFilesAdded'] += wmbsHelper.createSubscriptionAndAddFiles(block = dbsBlock)[1]
             self.backend.updateElements(ele.id, NumOfFilesAdded = ele['NumOfFilesAdded'])
         if dbsBlock['IsOpen'] != ele['OpenForNewData']:
             self.logger.info("Closing open block %s (%s)" % (blockName, ele.id))
             self.backend.updateInboxElements(ele['ParentQueueId'], OpenForNewData = dbsBlock['IsOpen'])
             self.backend.updateElements(ele.id, OpenForNewData = dbsBlock['IsOpen'])
             ele['OpenForNewData'] = dbsBlock['IsOpen']
Exemple #6
0
def main():
    start = time.time()
    # blockName = match['Inputs'].keys()[0]
    blockName = "/acdc/vlimant_ACDC0_task_SUS-RunIIFall18wmLHEGS-00025__v1_T_190218_145226_481/:pdmvserv_task_SUS-RunIIFall18wmLHEGS-00025__v1_T_181211_005112_2222:SUS-RunIIFall18wmLHEGS-00025_0/0/31055"

    # acdcInfo = match['ACDC']
    acdcInfo = {"database": "acdcserver",
                "fileset": "/pdmvserv_task_SUS-RunIIFall18wmLHEGS-00025__v1_T_181211_005112_2222/SUS-RunIIFall18wmLHEGS-00025_0",
                "collection": "pdmvserv_task_SUS-RunIIFall18wmLHEGS-00025__v1_T_181211_005112_2222",
                "server": "https://cmsweb.cern.ch/couchdb"}

    acdc = DataCollectionService(acdcInfo["server"], acdcInfo["database"])
    splitedBlockName = ACDCBlock.splitBlockName(blockName)
    print("Splitted block name: %s" % splitedBlockName)

    fileLists = acdc.getChunkFiles(acdcInfo['collection'],
                                   acdcInfo['fileset'],
                                   splitedBlockName['Offset'],
                                   splitedBlockName['NumOfFiles'])
    print("Retrieved %d unique files from the ACDCServer" % len(fileLists))

    block = {}
    block["Files"] = fileLists

    wantedLumis = set([252052, 240646])
    for f in fileLists:
        for run in f['runs']:
            maskDict = run.json()
            lumisSet = set(maskDict['Lumis'].keys())
            if wantedLumis.intersection(lumisSet):
                print("File: %s with events: %s, contains these lumis: %s" % (f['lfn'], f['events'], wantedLumis.intersection(lumisSet)))

    # with open("chunkfiles.json", 'w') as fo:
    #     json.dump(block, fo)

    end = time.time()
    print("Spent %s secs running so far" % (end - start))
    sys.exit(1)

    ### Now doing the WMBSHelper stuff
    reqUrl = "https://cmsweb.cern.ch/couchdb/reqmgr_workload_cache"
    requestName = "vlimant_ACDC0_task_HIG-RunIIFall17wmLHEGS-01122__v1_T_180808_130708_5376"

    wmspec = WMWorkloadHelper()
    wmspec.loadSpecFromCouch(reqUrl, requestName)
    taskName = "HIG-RunIIFall17DRPremix-00788_0"
    mask = None
    cacheDir = "/data/srv/wmagent/v1.1.14.patch6/install/wmagent/WorkQueueManager/cache"
    # wmbsHelper = WMBSHelper(wmspec, match['TaskName'], blockName, mask, self.params['CacheDir'])
    wmbsHelper = WMBSHelper(wmspec, taskName, blockName, mask, cacheDir)
    sub, numFilesAdded = wmbsHelper.createSubscriptionAndAddFiles(block=block)
Exemple #7
0
    def createWMBSHelperWithTopTask(self, wmspec, block, mask=None,
                                    parentFlag=False, detail=False):

        topLevelTask = getFirstTask(wmspec)

        wmbs = WMBSHelper(wmspec, topLevelTask.name(), block, mask, cachepath=self.workDir)
        if block:
            if parentFlag:
                block = self.dbs.getFileBlockWithParents(block)[block]
            else:
                block = self.dbs.getFileBlock(block)[block]
        sub, files = wmbs.createSubscriptionAndAddFiles(block=block)
        if detail:
            return wmbs, sub, files
        else:
            return wmbs
Exemple #8
0
    def createWMBSHelperWithTopTask(self, wmspec, block, mask = None,
                                    parentFlag = False, detail = False):

        topLevelTask = getFirstTask(wmspec)

        wmbs = WMBSHelper(wmspec, topLevelTask.name(), block, mask, cachepath = self.workDir)
        if block:
            if parentFlag:
                block = self.dbs.getFileBlockWithParents(block)[block]
            else:
                block = self.dbs.getFileBlock(block)[block]
        sub, files = wmbs.createSubscriptionAndAddFiles(block = block)
        if detail:
            return wmbs, sub, files
        else:
            return wmbs
Exemple #9
0
    def _wmbsPreparation(self, match, wmspec, blockName, dbsBlock):
        """Inject data into wmbs and create subscription.
        """
        from WMCore.WorkQueue.WMBSHelper import WMBSHelper
        self.logger.info("Adding WMBS subscription for %s" % match['RequestName'])

        mask = match['Mask']
        wmbsHelper = WMBSHelper(wmspec, blockName, mask, self.params['CacheDir'])

        sub, match['NumOfFilesAdded'] = wmbsHelper.createSubscriptionAndAddFiles(block = dbsBlock)
        self.logger.info("Created top level subscription %s for %s with %s files" % (sub['id'],
                                                                                     match['RequestName'],
                                                                                     match['NumOfFilesAdded']))

        match['SubscriptionId'] = sub['id']
        match['Status'] = 'Running'
        self.backend.saveElements(match)

        return sub
Exemple #10
0
    def _wmbsPreparation(self, match, wmspec, blockName, dbsBlock):
        """Inject data into wmbs and create subscription.
        """
        from WMCore.WorkQueue.WMBSHelper import WMBSHelper
        self.logger.info("Adding WMBS subscription for %s" % match['RequestName'])

        mask = match['Mask']
        wmbsHelper = WMBSHelper(wmspec, match['TaskName'], blockName, mask, self.params['CacheDir'])

        sub, match['NumOfFilesAdded'] = wmbsHelper.createSubscriptionAndAddFiles(block = dbsBlock)
        self.logger.info("Created top level subscription %s for %s with %s files" % (sub['id'],
                                                                                     match['RequestName'],
                                                                                     match['NumOfFilesAdded']))
        # update couch with wmbs subscription info
        match['SubscriptionId'] = sub['id']
        match['Status'] = 'Running'
        # do update rather than save to avoid conflicts from other thread writes
        self.backend.updateElements(match.id, Status = 'Running', SubscriptionId = sub['id'],
                                    NumOfFilesAdded = match['NumOfFilesAdded'])

        return sub