diff --git a/Script/castorstorage.py b/Script/castorstorage.py new file mode 100644 index 0000000000000000000000000000000000000000..e2cd49ccc0af2b665bb65d0fc1ab857a90234709 --- /dev/null +++ b/Script/castorstorage.py @@ -0,0 +1,164 @@ + +__version__='$Revision:$' + +from subprocess import * + +def _castorenv(stager, pool): + return {'RFIO_USE_CASTOR_V2':'YES', + 'STAGE_HOST':stager, + 'STAGE_SVCCLASS':pool} + + +def checksum(filename, stager, pool, logger=None): + + logInfo = {'file':logger.findCaller()[0], + 'line':logger.findCaller()[1]} + logger.debug('Fetching checksum from castor for: ' + + filename, extra = logInfo) + nsls = Popen(['nsls', '-l', '--checksum', filename], + stdout=PIPE, stderr=STDOUT, env=_castorenv(stager,pool)) + ret = nsls.wait() + nslsOut = nsls.stdout.read() + if logger: + logInfo = {'file':logger.findCaller()[0], + 'line':logger.findCaller()[1]} + logger.debug(nslsOut, extra=logInfo) + + try: + id = nslsOut.split().index('AD') + return nslsOut.split()[id+1] + except ValueError: + if logger: + logInfo = {'file':logger.findCaller()[0], + 'line':logger.findCaller()[1]} + + logger.warning('Adler32 checksum not found for ' + + filename + '. nsls output: ' + + nslsOut ,extra=logInfo) + return None + + +def sizechecksum(filename, stager, pool, logger=None): + + logInfo = {'file':logger.findCaller()[0], + 'line':logger.findCaller()[1]} + logger.debug('Fetching checksum from castor for: ' + + filename, extra = logInfo) + nsls = Popen(['nsls', '-l', '--checksum', filename], + stdout=PIPE, stderr=STDOUT, env=_castorenv(stager,pool)) + ret = nsls.wait() + nslsOut = nsls.stdout.read() + + if logger: + logInfo = {'file':logger.findCaller()[0], + 'line':logger.findCaller()[1]} + logger.debug(nslsOut, extra=logInfo) + + size = checksum = None + if ret == 0: + + try: + splitted = nslsOut.split() + + size = int(splitted[4]) + + id = splitted.index('AD') + checksum = (nslsOut.split()[id+1]).zfill(8) + + except ValueError: + size = checksum = None + + if logger: + logInfo = {'file':logger.findCaller()[0], + 'line':logger.findCaller()[1]} + logger.warning('Adler32 checksum not found for ' + + filename + '. nsls output: ' + + nslsOut, extra=logInfo) + + except IndexError: + size = checksum = None + + if logger: + logInfo = {'file':logger.findCaller()[0], + 'line':logger.findCaller()[1]} + logger.warning('Error parsing nsls output ' + + nslsOut, extra=logInfo) + + return size,checksum + + +def listdir(directory, stager, pool, logger=None): + + nsls = Popen(['nsls', directory], + stdout=PIPE, stderr=STDOUT, env=_castorenv(stager,pool)) + ret = nsls.wait() + nslsOut = nsls.stdout.read() + + if logger: + logInfo = {'file':logger.findCaller()[0], + 'line':logger.findCaller()[1]} + logger.debug(nslsOut, extra = logInfo) + + return ((ret == 0), nslsOut) + + +def migrated(filename, stager, pool, logger=None): + + nsls = Popen(['nsls', '-l', filename], + stdout=PIPE, stderr=STDOUT, env=_castorenv(stager,pool)) + ret = nsls.wait() + nslsOut = nsls.stdout.read() + + if logger: + logInfo = {'file':logger.findCaller()[0], + 'line':logger.findCaller()[1]} + logger.debug(nslsOut, extra = logInfo) + + return (ret == 0 and 'm' in nslsOut.split(' ')[0]) + + +def mkdir(directory, stager, pool, logger=None): + + nsmkdir = Popen(['nsmkdir', '-p', directory], stdout=PIPE, + stderr=STDOUT, env=_castorenv(stager,pool)) + ret = nsmkdir.wait() + + if logger: + logInfo = {'file':logger.findCaller()[0], + 'line':logger.findCaller()[1]} + logger.debug(nsmkdir.stdout.read(),extra = logInfo) + + return ret + + +def remove(dstfile, stager, pool, logger=None): + + rfrm = Popen(['rfrm', dstfile], stdout = PIPE, + stderr = STDOUT, env=_castorenv(stager,pool)) + ret = rfrm.wait() + + if logger: + logInfo = {'file':logger.findCaller()[0],'line':logger.findCaller()[1]} + logger.debug(rfrm.stdout.read(),extra = logInfo) + + return ret + + +def backgroundcopy(srcfile, dstfile, stager, pool, logger=None): + + rfcp = Popen(['rfcp', srcfile, dstfile], stdout = PIPE, + stderr = STDOUT, env = _castorenv(stager,pool)) + + return rfcp, rfcp.pid + + +def copystate(proc): + + return proc.poll() + + +def copystdout(proc): + + return proc.stdout.read() + + diff --git a/Script/utils.py b/Script/utils.py index b3203376c316cd1f2b18917c258402f8f8c4cd4d..61665ae7a5ac6bc9045661fed7402ccf4b69bbb6 100644 --- a/Script/utils.py +++ b/Script/utils.py @@ -2,7 +2,6 @@ __version__='$Revision$' import logging -from subprocess import * #### Set Log severity level ##### def set_log_level(level, logger): @@ -20,76 +19,6 @@ def set_log_level(level, logger): -def castorChecksum(castorfile, castorenv, logger): - - logInfo = {'file':logger.findCaller()[0], - 'line':logger.findCaller()[1]} - logger.debug('Fetching checksum from castor for: ' - + castorfile, extra = logInfo) - nsls = Popen(['nsls', '-l', '--checksum', castorfile], - stdout=PIPE, stderr=STDOUT, env=castorenv) - ret = nsls.wait() - nslsOut = nsls.stdout.read() - logInfo = {'file':logger.findCaller()[0], - 'line':logger.findCaller()[1]} - logger.debug(nslsOut, extra=logInfo) - - try: - id = nslsOut.split().index('AD') - return nslsOut.split()[id+1] - except ValueError: - logInfo = {'file':logger.findCaller()[0], - 'line':logger.findCaller()[1]} - - logger.warning('Adler32 checksum not found for ' - + castorfile + '. nsls output: ' - + nslsOut ,extra=logInfo) - return None - - -def castorinfo(castorfile, castorenv, logger): - - logInfo = {'file':logger.findCaller()[0], - 'line':logger.findCaller()[1]} - logger.debug('Fetching checksum from castor for: ' - + castorfile, extra = logInfo) - nsls = Popen(['nsls', '-l', '--checksum', castorfile], - stdout=PIPE, stderr=STDOUT, env=castorenv) - ret = nsls.wait() - nslsOut = nsls.stdout.read() - logInfo = {'file':logger.findCaller()[0], - 'line':logger.findCaller()[1]} - logger.debug(nslsOut, extra=logInfo) - - size = checksum = None - if ret == 0: - logInfo = {'file':logger.findCaller()[0], - 'line':logger.findCaller()[1]} - - try: - splitted = nslsOut.split() - - size = int(splitted[4]) - - id = splitted.index('AD') - checksum = (nslsOut.split()[id+1]).zfill(8) - - except ValueError: - size = checksum = None - - logger.warning('Adler32 checksum not found for ' - + castorfile + '. nsls output: ' - + nslsOut, extra=logInfo) - - except IndexError: - size = checksum = None - - logger.warning('Error parsing nsls output ' - + nslsOut, extra=logInfo) - - return size,checksum - -