Lazy dcache.perl: Difference between revisions
Jump to navigation
Jump to search
No edit summary |
No edit summary |
||
| Line 1: | Line 1: | ||
< | <pre> #!/usr/bin/perl -w | ||
my $confDcachePath = "/daq/pnfs/triumf.ca/data/belle2/2015"; | my $confDcachePath = "/daq/pnfs/triumf.ca/data/belle2/2015"; | ||
| Line 74: | Line 74: | ||
#end | #end | ||
</ | </pre> | ||
Revision as of 19:16, 17 July 2015
#!/usr/bin/perl -w
my $confDcachePath = "/daq/pnfs/triumf.ca/data/belle2/2015";
$| = 1;
my $KiB = 1024;
my $MiB = 1024*1024;
my $GiB = 1024*1024*1024;
my $file = shift @ARGV;
my @file = split(/\//, $file);
my $fname = pop @file;
die "Input file $file is not readable: $!\n" unless -r $file;
my $size = -s $file;
print "Consider $fname $size bytes $file\n";
my $isThere = checkFile($fname, $size);
if ($isThere)
{
# nothing to do
print "File $fname already in dcache!\n";
exit 0;
}
my $dfile = $confDcachePath."/".$fname;
print "Backup $fname $size bytes $file to $dfile\n";
my $cmd = "/usr/bin/time dccp $file $dfile";
#my $cmd = "touch $dfile";
print "Run $cmd\n";
system $cmd;
die "Output file $dfile does not exist: $!\n" if ! -e $dfile;
my $dsize = -s $dfile;
die "Output file $dfile size mismatch: $dsize expected $size\n" unless $dsize == $size;
exit 0;
sub checkFile
{
my $file = shift @_;
my $size = shift @_;
my $dfile = "$confDcachePath/$file";
my $cmd = "/bin/ls -l $dfile";
my $ls = `$cmd 2>&1`;
#print "[$ls]\n";
return 0 if ($ls =~ /No such file or directory/);
my ($perm, $nlink, $uid, $gid, $xsize) = split(/\s+/, $ls);
#print "size [$size] [$xsize]\n";
print "Found dcache file: $dfile, size: $size bytes\n";
# dCache will report a size of 1 is the file is > 2GB
if ($size > 2147483647) {
print "File is larger than 2 GB, dCache reports a size of $xsize";
return 1 if ($xsize == 1);
} else {
return 1 if ($size == $xsize);
}
# file not found, or wrong size
return 0;
}
#end