Skip to content
Snippets Groups Projects
Commit bbb6dd90 authored by Wainer Vandelli's avatar Wainer Vandelli
Browse files

castor functions moved into a dedicated module

parent 3197c342
No related branches found
No related tags found
No related merge requests found
__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()
......@@ -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
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment