コード例 #1
0
    def createInjectionSpec(self, injectionData):
        """
        _createInjectionSpec_

        Transform the data structure returned from the database into an XML
        string for the PhEDEx Data Service.  The injectionData parameter must be
        a dictionary keyed by dataset path.  Each dataset path will map to a
        list of blocks, each block being a dict.  The block dicts will have
        three keys: name, is-open and files.  The files key will be a list of
        dicts, each of which have the following keys: lfn, size and checksum.
        The following is an example object:

        {"dataset1":
          {"block1": {"is-open": "y", "files":
            [{"lfn": "lfn1", "size": 10, "checksum": {"cksum": "1234"}},
             {"lfn": "lfn2", "size": 20, "checksum": {"cksum": "4321"}}]}}}
        """
        injectionSpec = XMLDrop.XMLInjectionSpec(self.dbsUrl)

        for datasetPath in injectionData:
            datasetSpec = injectionSpec.getDataset(datasetPath)

            for fileBlockName, fileBlock in injectionData[
                    datasetPath].iteritems():
                blockSpec = datasetSpec.getFileblock(fileBlockName,
                                                     fileBlock["is-open"])

                for f in fileBlock["files"]:
                    blockSpec.addFile(f["lfn"], f["checksum"], f["size"])

        return injectionSpec.save()
コード例 #2
0
ファイル: XMLDrop_t.py プロジェクト: vytjan/WMCore
    def testA_XMLDrop(self):
        """
        _XMLDrop_

        Um...test that it does what it does?
        """
        datasetPath = "/Cosmics/CRUZET09-PromptReco-v1/RECO"
        fileBlockName = "/Cosmics/CRUZET09-PromptReco-v1/RAW#1"

        spec = XMLDrop.XMLInjectionSpec(self.dbsURL)
        datasetSpec = spec.getDataset(datasetPath)
        fileBlock = datasetSpec.getFileblock(fileBlockName)
        fileBlock.addFile("lfn", {'adler32': '201', 'cksum': '101'}, '100')

        output = spec.save()
        self.assertTrue(re.search('<data version="2">', output) > 0)
        self.assertTrue(
            re.search('<dbs dls="dbs" name="%s">' % self.dbsURL, output) > 0)
        self.assertTrue(
            re.search(
                '<dataset is-open="y" is-transient="n" name="%s">' %
                datasetPath, output) > 0)
        self.assertTrue(
            re.search('<block is-open="y" name="%s">' %
                      fileBlockName, output) > 0)
        self.assertTrue(
            re.search(
                '<file bytes="100" checksum="adler32:201,cksum:101" name="lfn"/>',
                output) > 0)
        self.assertTrue(re.search('</block>', output) > 0)
        self.assertTrue(re.search('</dataset>', output) > 0)

        return
コード例 #3
0
    def testGetSubscriptionMapping(self):
        """
        _testGetSubscriptionMapping_

        Verify that the subscription mapping API works correctly.
        """
        testDataset = "/%s/WMCorePhEDExTest/RECO" % makeUUID()
        blockA = "%s#%s" % (testDataset, makeUUID())
        blockB = "%s#%s" % (testDataset, makeUUID())

        injectionSpec = XMLDrop.XMLInjectionSpec(self.dbsTestUrl)
        datasetSpec = injectionSpec.getDataset(testDataset)
        datasetSpec.getFileblock(blockA, 'y')
        datasetSpec.getFileblock(blockB, 'y')
        blockSpec = injectionSpec.save()
        self.phedexApi.injectBlocks("T1_US_FNAL_MSS", blockSpec)

        # Create a dataset level subscription to a node
        testDatasetSub = PhEDExSubscription([testDataset],
                                            "T1_UK_RAL_MSS",
                                            "Saturn",
                                            requestOnly="n")
        datasetSpec = XMLDrop.makePhEDExXMLForDatasets(
            self.dbsTestUrl, testDatasetSub.getDatasetPaths())
        self.phedexApi.subscribe(testDatasetSub, datasetSpec)

        # Create a block level subscrtion to a different node
        testBlockSub = PhEDExSubscription([testDataset],
                                          "T1_DE_KIT_MSS",
                                          "Saturn",
                                          level="block",
                                          requestOnly="n")
        self.phedexApi.subscribe(testBlockSub, blockSpec)

        subs = self.phedexApi.getSubscriptionMapping(testDataset)
        self.assertEqual(subs[testDataset], set(["T1_UK_RAL_MSS"]),
                         "Error: Dataset subscription is wrong.")

        subs = self.phedexApi.getSubscriptionMapping(blockA)
        self.assertEqual(
            len(subs[blockA]), 2,
            "Error: Wrong number of nodes in block subscription.")
        self.assertTrue("T1_UK_RAL_MSS" in subs[blockA],
                        "Error: RAL missing from block sub.")
        self.assertTrue("T1_DE_KIT_MSS" in subs[blockA],
                        "Error: KIT missing from block sub.")
        return