コード例 #1
0
    def performLRCFileRegistration(self, fields, ub=None):
        """ actually register all files in the LRC """

        from urllib import urlencode, urlopen
        ret = '1'
        ec = 0
        if ub != "None" and ub != None and ub != "": # ub is 'None' outside the US
            # find out if checksum or adler32 should be added
            from SiteMover import SiteMover
            _checksum = fields[4].split("+")[0] # first one, assume same type for the rest
            if len(_checksum) > 0:
                csumtype = SiteMover.getChecksumType(_checksum)
            else:
                csumtype = CMD_CHECKSUM # use default (md5sum)

            if csumtype == "adler32":
                params = urlencode({'pfns': fields[0], 'lfns': fields[1], 'guids': fields[2], 'fsizes': fields[3],\
                                    'md5sums': '', 'adler32s': fields[4], 'archivals': fields[5]})        
            else:
                params = urlencode({'pfns': fields[0], 'lfns': fields[1], 'guids': fields[2], 'fsizes': fields[3],\
                                    'md5sums': fields[4], 'adler32s': '', 'archivals': fields[5]})        
            try:
                url = ub + '/lrc/files'
                if url.find('//lrc') > 0:
                    url = url.replace('//lrc','/lrc')
                tolog("Will send params: %s" % str(params))
                tolog("Trying urlopen with: %s" % (url))
                f = urlopen(url, params)
            except Exception, e:
                tolog("!!WARNING!!4000!! Unexpected exception: %s" % str(e))
                ec = error.ERR_DDMREG
                ret = str(e)
            else:
                ret = f.read()
                if ret != '1':
                    ret = ret.replace('\n', ' ')
                    tolog('!!WARNING!!4000!! LRC registration error: %s' % str(ret))
                    tolog('!!WARNING!!4000!! LRC URL requested: %s' % f.geturl())
                    if ret == 'LFNnonunique':
                        ec = error.ERR_LRCREGDUP
                    elif ret.find("guid-metadata entry already exists") >= 0:
                        ec = error.ERR_GUIDSEXISTSINLRC
                    else:
                        ec = error.ERR_DDMREG