Lazy dcache.perl

From MidasWiki
Revision as of 11:14, 17 July 2015 by Lindner (talk | contribs)
Jump to navigation Jump to search

<source> #!/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";

  1. 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";
  1. 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;
 }
  1. end

</source>