Пример #1
0
def getRequest():
    """
 helper fcn to build requestContainer
  """

    requestContainer = RequestContainer(init=False)

    ## get request
    requestContainer.setRequestName("00009423_00000118")
    requestContainer.setJobID(0)
    requestContainer.setOwnerDN("")
    requestContainer.setOwnerGroup("")
    requestContainer.setDIRACSetup("")
    requestContainer.setSourceComponent(None)
    requestContainer.setCreationTime("0000-00-00 00:00:00")
    requestContainer.setLastUpdate("2011-02-19 04:57:02")
    requestContainer.setStatus("Waiting")

    ## get subrequest
    requestContainer.initiateSubRequest("transfer")
    subRequestDict = {
        "Status": "Waiting",
        "SubRequestID": 2259916,
        "Operation": "replicateAndRegister",
        "Arguments": None,
        "ExecutionOrder": 0,
        "SourceSE": None,
        "TargetSE": "GRIDKA_MC-DST,GRIDKA_MC_M-DST",
        "Catalogue": None,
        "CreationTime": "2011-02-19 04:57:02",
        "SubmissionTime": "2011-02-19 04:57:02",
        "LastUpdate": "2011-08-18 20:14:22"
    }
    requestContainer.setSubRequestAttributes(0, "transfer", subRequestDict)

    ## get subrequest files
    files = [{
        "FileID": 1610538,
        "LFN":
        "/lhcb/MC/MC10/ALLSTREAMS.DST/00009422/0000/00009422_00000171_1.allstreams.dst",
        "Size": None,
        "PFN": None,
        "GUID": None,
        "Md5": None,
        "Addler": None,
        "Attempt": 1,
        "Status": "Scheduled"
    }]

    requestContainer.setSubRequestFiles(0, "transfer", files)
    return {
        "OK": True,
        "Value": {
            "RequestName": "00009423_00000118",
            "RequestString": requestContainer.toXML()["Value"],
            "JobID": 0,
            "RequestContainer": requestContainer
        }
    }
Пример #2
0
def getRegisterRequest():
    """ helper fcn to build request
  """
    requestContainer = RequestContainer(init=False)
    requestContainer.setJobID(11889410)
    #requestContainer.setOwnerDN( "/DC=ch/DC=cern/OU=Organic Units/OU=Users/CN=cibak/CN=605919/CN=Krzysztof Ciba" )
    requestContainer.setOwnerGroup("lhcb_user")
    requestContainer.setDIRACSetup("LHCb-Production")
    requestContainer.setSourceComponent(None)
    requestContainer.setCreationTime("0000-00-00 00:00:00")
    requestContainer.setLastUpdate("2011-02-19 04:57:02")
    requestContainer.setStatus("Waiting")

    requestContainer.initiateSubRequest("register")
    subRequestDict = {
        "Status": "Waiting",
        "SubRequestID": 2259916,
        "Operation": "registerFile",
        "Arguments": None,
        "ExecutionOrder": 0,
        "SourceSE": None,
        "TargetSE": "RAL-USER",
        "Catalogue": "LcgFileCatalogCombined",
        "CreationTime": "2011-02-19 04:57:02",
        "SubmissionTime": "2011-02-19 04:57:02",
        "LastUpdate": "2011-08-18 20:14:22"
    }
    requestContainer.setSubRequestAttributes(0, "register", subRequestDict)

    files = [{
        "FileID": 1610538,
        "LFN": "/lhcb/user/c/cblanks/11889/11889410/LDSB.rsQrRL",
        "Size": 153961749,
        "PFN":
        "srm://srm-lhcb.gridpp.rl.ac.uk/castor/ads.rl.ac.uk/prod/lhcb/user/c/cblanks/11889/11889410/LDSB.rsQrRL",
        "GUID": "5911A19C-7CDF-7F2A-36ED-089CD410F98A",
        "Md5": None,
        "Addler": "92b85e26",
        "Attempt": 1,
        "Status": "Waiting"
    }]

    requestContainer.setSubRequestFiles(0, "register", files)

    return {
        "requestName":
        "11889410.xml",
        "requestString":
        requestContainer.toXML()["Value"],
        "jobID":
        11889410,
        "executionOrder":
        0,
        "sourceServer":
        "foobarserver",
        "configPath":
        "/Systems/DataManagement/Development/Agents/RegistrationAgent"
    }
Пример #3
0
def getRequest(operation):
    """ fake requestDict 

  :param str operation: sub-request operation attribute 
  """
    requestContainer = RequestContainer(init=False)
    requestContainer.setJobID(1)
    #requestContainer.setOwnerDN( "/DC=ch/DC=cern/OU=Organic Units/OU=Users/CN=cibak/CN=605919/CN=Krzysztof Ciba" )
    requestContainer.setOwnerGroup("lhcb_user")
    requestContainer.setDIRACSetup("LHCb-Production")
    requestContainer.setSourceComponent(None)
    requestContainer.setCreationTime("0000-00-00 00:00:00")
    requestContainer.setLastUpdate("2011-12-01 04:57:02")
    requestContainer.setStatus("Waiting")
    requestContainer.setAttribute("RequestID", 123456789)
    requestContainer.initiateSubRequest("transfer")
    subRequestDict = {
        "Status": "Waiting",
        "SubRequestID": 2222222,
        "Operation": operation,
        "Arguments": None,
        "ExecutionOrder": 0,
        "SourceSE": None,
        "TargetSE": "CERN-USER",
        "Catalogue": "LcgFileCatalogCombined",
        "CreationTime": "2011-12-01 04:57:02",
        "SubmissionTime": "2011-12-01 04:57:02",
        "LastUpdate": "2011-12-01 20:14:22"
    }
    requestContainer.setSubRequestAttributes(0, "transfer", subRequestDict)
    files = [{
        "FileID": 3333333,
        "LFN": "/lhcb/user/c/cibak/11889/11889410/test.zzz",
        "Size": 44444444,
        "PFN":
        "srm://srm-lhcb.gridpp.rl.ac.uk/castor/ads.rl.ac.uk/prod/lhcb/user/c/cibak/11889/11889410/test.zzz",
        "GUID": "5P13RD4L-4J5L-3D21-U5P1-3RD4L4J5P13R",
        "Md5": None,
        "Addler": "92b85e26",
        "Attempt": 1,
        "Status": "Waiting"
    }]
    requestContainer.setSubRequestFiles(0, "transfer", files)
    return {
        "OK": True,
        "Value": {
            "requestName": "%s.xml" % operation,
            "requestString": requestContainer.toXML_new()["Value"],
            "requestObj": requestContainer,
            "jobID": 1,
            "executionOrder": 0,
            "sourceServer": "foobarserver"
        }
    }
Пример #4
0
def getRegisterRequest():
    """ helper fcn to build request
  """
    requestContainer = RequestContainer(init=False)
    requestContainer.setJobID(11889410)
    # requestContainer.setOwnerDN( "/DC=ch/DC=cern/OU=Organic Units/OU=Users/CN=cibak/CN=605919/CN=Krzysztof Ciba" )
    requestContainer.setOwnerGroup("lhcb_user")
    requestContainer.setDIRACSetup("LHCb-Production")
    requestContainer.setSourceComponent(None)
    requestContainer.setCreationTime("0000-00-00 00:00:00")
    requestContainer.setLastUpdate("2011-02-19 04:57:02")
    requestContainer.setStatus("Waiting")

    requestContainer.initiateSubRequest("register")
    subRequestDict = {
        "Status": "Waiting",
        "SubRequestID": 2259916,
        "Operation": "registerFile",
        "Arguments": None,
        "ExecutionOrder": 0,
        "SourceSE": None,
        "TargetSE": "RAL-USER",
        "Catalogue": "LcgFileCatalogCombined",
        "CreationTime": "2011-02-19 04:57:02",
        "SubmissionTime": "2011-02-19 04:57:02",
        "LastUpdate": "2011-08-18 20:14:22",
    }
    requestContainer.setSubRequestAttributes(0, "register", subRequestDict)

    files = [
        {
            "FileID": 1610538,
            "LFN": "/lhcb/user/c/cblanks/11889/11889410/LDSB.rsQrRL",
            "Size": 153961749,
            "PFN": "srm://srm-lhcb.gridpp.rl.ac.uk/castor/ads.rl.ac.uk/prod/lhcb/user/c/cblanks/11889/11889410/LDSB.rsQrRL",
            "GUID": "5911A19C-7CDF-7F2A-36ED-089CD410F98A",
            "Md5": None,
            "Addler": "92b85e26",
            "Attempt": 1,
            "Status": "Waiting",
        }
    ]

    requestContainer.setSubRequestFiles(0, "register", files)

    return {
        "requestName": "11889410.xml",
        "requestString": requestContainer.toXML()["Value"],
        "jobID": 11889410,
        "executionOrder": 0,
        "sourceServer": "foobarserver",
        "configPath": "/Systems/DataManagement/Development/Agents/RegistrationAgent",
    }
Пример #5
0
def getRequest():
  """
  helper fcn to build requestContainer
  """

  requestContainer = RequestContainer( init = False )

  ## get request
  requestContainer.setRequestName( "00009423_00000118" )
  requestContainer.setJobID( 0 )
  requestContainer.setOwnerDN( "" )
  requestContainer.setOwnerGroup( "" )
  requestContainer.setDIRACSetup( "" )
  requestContainer.setSourceComponent( None )
  requestContainer.setCreationTime( "0000-00-00 00:00:00" )
  requestContainer.setLastUpdate( "2011-02-19 04:57:02" )
  requestContainer.setStatus( "Waiting" )
  
  ## get subrequest
  requestContainer.initiateSubRequest( "transfer" )
  subRequestDict = { "Status" : "Waiting", 
                     "SubRequestID"  : 2259916, 
                     "Operation" : "replicateAndRegister", 
                     "Arguments" : None,
                     "ExecutionOrder" : 0, 
                     "SourceSE" : None, 
                     "TargetSE" : "GRIDKA_MC-DST,GRIDKA_MC_M-DST",
                     "Catalogue" : None, 
                     "CreationTime" : "2011-02-19 04:57:02", 
                     "SubmissionTime" : "2011-02-19 04:57:02",
                     "LastUpdate" : "2011-08-18 20:14:22" }
  requestContainer.setSubRequestAttributes( 0, "transfer", subRequestDict )

  ## get subrequest files
  files =  [ { "FileID" : 1610538, 
               "LFN" : "/lhcb/MC/MC10/ALLSTREAMS.DST/00009422/0000/00009422_00000171_1.allstreams.dst", 
               "Size" : None, 
               "PFN" : None, 
               "GUID" : None, 
               "Md5" : None, 
               "Addler" : None, 
               "Attempt" : 1, 
               "Status" : "Scheduled" } ]    

  requestContainer.setSubRequestFiles( 0, "transfer", files )
  return { "OK" : True,
           "Value" : { "RequestName" : "00009423_00000118",
                       "RequestString" : requestContainer.toXML()["Value"],
                       "JobID" : 0,
                       "RequestContainer" : requestContainer } }
Пример #6
0
def getKwargsRemoveFile():
    """ helper fcn to build request """
    requestContainer = RequestContainer(init=False)
    requestContainer.setJobID(11111111)
    #requestContainer.setOwnerDN( "/DC=ch/DC=cern/OU=Organic Units/OU=Users/CN=cibak/CN=605919/CN=Krzysztof Ciba" )
    requestContainer.setOwnerGroup("lhcb_user")
    requestContainer.setDIRACSetup("LHCb-Production")
    requestContainer.setSourceComponent(None)
    requestContainer.setCreationTime("0000-00-00 00:00:00")
    requestContainer.setLastUpdate("2011-12-01 04:57:02")
    requestContainer.setStatus("Waiting")

    requestContainer.initiateSubRequest("removal")
    subRequestDict = {
        "Status": "Waiting",
        "SubRequestID": 2222222,
        "Operation": "removeFile",
        "Arguments": None,
        "ExecutionOrder": 0,
        "SourceSE": None,
        "TargetSE": "RAL-USER",
        "Catalogue": "LcgFileCatalogCombined",
        "CreationTime": "2011-12-01 04:57:02",
        "SubmissionTime": "2011-12-01 04:57:02",
        "LastUpdate": "2011-12-01 20:14:22"
    }
    requestContainer.setSubRequestAttributes(0, "removal", subRequestDict)
    files = [{
        "FileID": 3333333,
        "LFN": "/lhcb/user/c/cibak/11889/11889410/test.zzz",
        "Size": 44444444,
        "PFN":
        "srm://srm-lhcb.gridpp.rl.ac.uk/castor/ads.rl.ac.uk/prod/lhcb/user/c/cibak/11889/11889410/test.zzz",
        "GUID": "5P13RD4L-4J5L-3D21-U5P1-3RD4L4J5P13R",
        "Md5": None,
        "Addler": "92b85e26",
        "Attempt": 1,
        "Status": "Waiting"
    }]
    requestContainer.setSubRequestFiles(0, "removal", files)

    return {
        "requestName": "00000001.xml",
        "requestString": requestContainer.toXML()["Value"],
        "jobID": 1,
        "executionOrder": 0,
        "sourceServer": "foobarserver",
        "configPath": "/Systems/DataManagement/Development/Agents/RemovalAgent"
    }
Пример #7
0
def getRequest(operation):
    """ fake requestDict 

  :param str operation: sub-request operation attribute 
  """
    requestContainer = RequestContainer(init=False)
    requestContainer.setJobID(1)
    requestContainer.setOwnerDN("/DC=ch/DC=cern/OU=Organic Units/OU=Users/CN=cibak/CN=605919/CN=Krzysztof Ciba")
    requestContainer.setOwnerGroup("lhcb_user")
    requestContainer.setDIRACSetup("LHCb-Production")
    requestContainer.setSourceComponent(None)
    requestContainer.setCreationTime("0000-00-00 00:00:00")
    requestContainer.setLastUpdate("2011-12-01 04:57:02")
    requestContainer.setStatus("Waiting")
    requestContainer.setAttribute("RequestID", 123456789)
    requestContainer.initiateSubRequest("transfer")
    subRequestDict = {
        "Status": "Waiting",
        "SubRequestID": 2222222,
        "Operation": operation,
        "Arguments": None,
        "ExecutionOrder": 0,
        "SourceSE": None,
        "TargetSE": "CERN-USER,PIC-USER",
        "Catalogue": "LcgFileCatalogCombined",
        "CreationTime": "2011-12-01 04:57:02",
        "SubmissionTime": "2011-12-01 04:57:02",
        "LastUpdate": "2011-12-01 20:14:22",
    }
    requestContainer.setSubRequestAttributes(0, "transfer", subRequestDict)
    files = [
        {
            "FileID": 3333333,
            "LFN": "/lhcb/user/c/cibak/11889/11889410/test.zzz",
            "Size": 44444444,
            "PFN": "srm://srm-lhcb.gridpp.rl.ac.uk/castor/ads.rl.ac.uk/prod/lhcb/user/c/cibak/11889/11889410/test.zzz",
            "GUID": "5P13RD4L-4J5L-3D21-U5P1-3RD4L4J5P13R",
            "Md5": None,
            "Addler": "92b85e26",
            "Attempt": 1,
            "Status": "Waiting",
        }
    ]
    requestContainer.setSubRequestFiles(0, "transfer", files)
    return requestContainer
Пример #8
0
def getKwargsRemoveFile():
  """ helper fcn to build request """
  requestContainer = RequestContainer( init = False )
  requestContainer.setJobID( 11111111 )
  #requestContainer.setOwnerDN( "/DC=ch/DC=cern/OU=Organic Units/OU=Users/CN=cibak/CN=605919/CN=Krzysztof Ciba" )
  requestContainer.setOwnerGroup( "lhcb_user" )
  requestContainer.setDIRACSetup( "LHCb-Production" )
  requestContainer.setSourceComponent( None )
  requestContainer.setCreationTime( "0000-00-00 00:00:00" )
  requestContainer.setLastUpdate( "2011-12-01 04:57:02" )
  requestContainer.setStatus( "Waiting" )
  
  requestContainer.initiateSubRequest( "removal" )
  subRequestDict = { "Status" : "Waiting", 
                     "SubRequestID"  : 2222222, 
                     "Operation" : "removeFile", 
                     "Arguments" : None,
                     "ExecutionOrder" : 0, 
                     "SourceSE" : None, 
                     "TargetSE" : "RAL-USER",
                     "Catalogue" : "LcgFileCatalogCombined", 
                     "CreationTime" : "2011-12-01 04:57:02", 
                     "SubmissionTime" : "2011-12-01 04:57:02",
                     "LastUpdate" : "2011-12-01 20:14:22" }
  requestContainer.setSubRequestAttributes( 0, "removal", subRequestDict )  
  files =  [ { "FileID" : 3333333, 
               "LFN" : "/lhcb/user/c/cibak/11889/11889410/test.zzz", 
               "Size" : 44444444, 
               "PFN" : "srm://srm-lhcb.gridpp.rl.ac.uk/castor/ads.rl.ac.uk/prod/lhcb/user/c/cibak/11889/11889410/test.zzz", 
               "GUID" : "5P13RD4L-4J5L-3D21-U5P1-3RD4L4J5P13R", 
               "Md5" : None, 
               "Addler" : "92b85e26", 
               "Attempt" : 1, 
               "Status" : "Waiting" } ]    
  requestContainer.setSubRequestFiles( 0, "removal", files )

  return { "requestName" : "00000001.xml",
           "requestString" : requestContainer.toXML()["Value"],
           "jobID" : 1,
           "executionOrder" : 0,
           "sourceServer" : "foobarserver",
           "configPath" : "/Systems/DataManagement/Development/Agents/RemovalAgent" }
Пример #9
0
    def getRequestForSubRequest(self, itself, subRequestID):
        """ 
    Select Request given SubRequestID.

    :param self: plugin reference
    :param itself: patient reference for injection
    :param int subRequestID: SubRequests.SubRequestID
    :warn: function has to be injected to RequestDBMySQL instance

    """

        ## get RequestID
        requestID = "SELECT RequestID FROM SubRequests WHERE SubRequestID = %s;" % str(
            subRequestID)
        requestID = self._query(requestID)
        if not requestID["OK"]:
            return requestID
        requestID = requestID["Value"][0]

        ## create RequestContainer
        requestContainer = RequestContainer(init=False)
        requestContainer.setRequestID(requestID)

        ## put some basic infos in
        requestInfo = "SELECT RequestName, JobID, OwnerDN, OwnerGroup, DIRACSetup, SourceComponent, CreationTime, SubmissionTime, LastUpdate, Status "
        requestInfo += "FROM Requests WHERE RequestID = %d;" % requestID
        requestInfo = self._query(requestInfo)
        if not requestInfo["OK"]:
            return requestInfo

        requestName, jobID, ownerDN, ownerGroup, diracSetup, sourceComponent, creationTime, submissionTime, lastUpdate, status = requestInfo[
            'Value'][0]
        requestContainer.setRequestName(requestName)
        requestContainer.setJobID(jobID)
        requestContainer.setOwnerDN(ownerDN)
        requestContainer.setOwnerGroup(ownerGroup)
        requestContainer.setDIRACSetup(diracSetup)
        requestContainer.setSourceComponent(sourceComponent)
        requestContainer.setCreationTime(str(creationTime))
        requestContainer.setLastUpdate(str(lastUpdate))
        requestContainer.setStatus(status)

        ## get sub-requests
        subRequests = "SELECT SubRequestID, Status, RequestType, Operation, Arguments, ExecutionOrder, SourceSE, "
        subRequests += "TargetSE, Catalogue, CreationTime, SubmissionTime, LastUpdate FROM SubRequests WHERE RequestID=%s;" % requestID
        subRequests = self._query(subRequests)
        if not subRequests["OK"]:
            return subRequests
        ## loop over sub requests
        for subRequestID, status, requestType, operation, arguments, executionOrder, sourceSE, targetSE, catalogue, creationTime, submissionTime, lastUpdate in subRequests[
                "Value"]:
            res = requestContainer.initiateSubRequest(requestType)
            ind = res["Value"]
            subRequestDict = {
                "Status": status,
                "SubRequestID": subRequestID,
                "Operation": operation,
                "Arguments": arguments,
                "ExecutionOrder": int(executionOrder),
                "SourceSE": sourceSE,
                "TargetSE": targetSE,
                "Catalogue": catalogue,
                "CreationTime": creationTime,
                "SubmissionTime": submissionTime,
                "LastUpdate": lastUpdate
            }
            res = requestContainer.setSubRequestAttributes(
                ind, requestType, subRequestDict)
            if not res["OK"]:
                return res

            ## get files for this subrequest
            req = "SELECT FileID, LFN, Size, PFN, GUID, Md5, Addler, Attempt, Status FROM Files WHERE SubRequestID = %s ORDER BY FileID;" % str(
                subRequestID)
            res = self._query(req)
            if not res["OK"]:
                return res
            files = []
            for fileID, lfn, size, pfn, guid, md5, addler, attempt, status in res[
                    "Value"]:
                fileDict = {
                    "FileID": fileID,
                    "LFN": lfn,
                    "Size": size,
                    "PFN": pfn,
                    "GUID": guid,
                    "Md5": md5,
                    "Addler": addler,
                    "Attempt": attempt,
                    "Status": status
                }
                files.append(fileDict)
            res = requestContainer.setSubRequestFiles(ind, requestType, files)
            if not res["OK"]:
                return res

        ## dump request to XML
        res = requestContainer.toXML()
        if not res["OK"]:
            return res
        requestString = res["Value"]

        ## return dictonary with all info in at least
        return S_OK({
            "RequestName": requestName,
            "RequestString": requestString,
            "JobID": jobID,
            "RequestContainer": requestContainer
        })
  def getRequestForSubRequest(self, itself, subRequestID ):
    """ 
    Select Request given SubRequestID.

    :param self: plugin reference
    :param itself: patient reference for injection
    :param int subRequestID: SubRequests.SubRequestID
    :warn: function has to be injected to RequestDBMySQL instance

    """

    ## get RequestID
    requestID = "SELECT RequestID FROM SubRequests WHERE SubRequestID = %s;" % str(subRequestID)
    requestID = self._query( requestID )
    if not requestID["OK"]:
      return requestID
    requestID = requestID["Value"][0]

    ## create RequestContainer
    requestContainer = RequestContainer( init = False )
    requestContainer.setRequestID( requestID )
    
    ## put some basic infos in 
    requestInfo  = "SELECT RequestName, JobID, OwnerDN, OwnerGroup, DIRACSetup, SourceComponent, CreationTime, SubmissionTime, LastUpdate, Status "
    requestInfo += "FROM Requests WHERE RequestID = %d;" % requestID
    requestInfo = self._query( requestInfo )
    if not requestInfo["OK"]:
      return requestInfo

    requestName, jobID, ownerDN, ownerGroup, diracSetup, sourceComponent, creationTime, submissionTime, lastUpdate, status = requestInfo['Value'][0]
    requestContainer.setRequestName( requestName )
    requestContainer.setJobID( jobID )
    requestContainer.setOwnerDN( ownerDN )
    requestContainer.setOwnerGroup( ownerGroup )
    requestContainer.setDIRACSetup( diracSetup )
    requestContainer.setSourceComponent( sourceComponent )
    requestContainer.setCreationTime( str( creationTime ) )
    requestContainer.setLastUpdate( str( lastUpdate ) )
    requestContainer.setStatus( status )
    
    ## get sub-requests 
    subRequests = "SELECT SubRequestID, Status, RequestType, Operation, Arguments, ExecutionOrder, SourceSE, "
    subRequests += "TargetSE, Catalogue, CreationTime, SubmissionTime, LastUpdate FROM SubRequests WHERE RequestID=%s;" % requestID
    subRequests = self._query( subRequests )
    if not  subRequests["OK"]:
      return subRequests
    ## loop over sub requests
    for subRequestID, status, requestType, operation, arguments, executionOrder, sourceSE, targetSE, catalogue, creationTime, submissionTime, lastUpdate in  subRequests["Value"]:
      res = requestContainer.initiateSubRequest( requestType )
      ind = res["Value"]
      subRequestDict = { "Status" : status, "SubRequestID"  : subRequestID, "Operation" : operation, "Arguments" : arguments,
                         "ExecutionOrder" : int( executionOrder ), "SourceSE" : sourceSE, "TargetSE" : targetSE,
                         "Catalogue" : catalogue, "CreationTime" : creationTime, "SubmissionTime" : submissionTime,
                         "LastUpdate" : lastUpdate }
      res = requestContainer.setSubRequestAttributes( ind, requestType, subRequestDict )
      if not res["OK"]:
        return res
    
      ## get files for this subrequest
      req = "SELECT FileID, LFN, Size, PFN, GUID, Md5, Addler, Attempt, Status FROM Files WHERE SubRequestID = %s ORDER BY FileID;" % str(subRequestID)
      res = self._query( req )
      if not res["OK"]:
        return res
      files = []
      for fileID, lfn, size, pfn, guid, md5, addler, attempt, status in res["Value"]:
        fileDict = { "FileID" : fileID, "LFN" : lfn, "Size" : size, 
                     "PFN" : pfn, "GUID" : guid, "Md5" : md5, 
                     "Addler" : addler, "Attempt" : attempt, 
                     "Status" : status }
        files.append( fileDict )
      res = requestContainer.setSubRequestFiles( ind, requestType, files )
      if not res["OK"]:
        return res

    ## dump request to XML
    res = requestContainer.toXML()
    if not res["OK"]:
      return res
    requestString = res["Value"]
    
    ## return dictonary with all info in at least
    return S_OK( { 
      "RequestName" : requestName,
      "RequestString" : requestString,
      "JobID" : jobID,
      "RequestContainer" : requestContainer 
      } )