* Jean-Louis Martineau <jmartin...@carbonite.com> [20161216 12:10]:
> On 16/12/16 10:33 AM, Jean-Francois Malouin wrote:
> >This config has 'taper-parallel-write' set to 2 and during the amdump
> >run both tape drives were in use at the same time at some point. Could
> >this explain the discrepancy between both outputs?
> >
> yes, amtoc print the dump in the order they are listed in the log file.
> 
> 3.3 amtoc have the same problem.
> 
> Try the attached patch!

That seemed that have worked!

Thanks Jean-Louis!

jf

> 
> Jean-Louis
> 

> diff --git a/server-src/amtoc.pl b/server-src/amtoc.pl
> index f62dcef..dc6fcd6 100644
> --- a/server-src/amtoc.pl
> +++ b/server-src/amtoc.pl
> @@ -1,5 +1,8 @@
>  #!@PERL@ -w
>  
> +use strict;
> +use warnings;
> +
>  # create a TOC (Table Of Content) file for an amanda dump
>  
>  # Author: nicolas.mayenco...@cui.unige.ch
> @@ -32,6 +35,44 @@
>  # 3.1.4 2000-01-14 d...@whistle.com
>  #    Add a flag (-w) for vertical whitespace
>  
> +my %lines;
> +my %dates;
> +my %labels;
> +my $IF;
> +my $OF;
> +my $tabular;
> +my $fnbr;
> +my $hstprt;
> +my $dt;
> +my $lvl;
> +my $sz;
> +my $ch;
> +my $s;
> +my @subs;
> +my $dir;
> +my $i;
> +my $info;
> +my $tocfilename;
> +my $vwspace;
> +my $logfile;
> +my $filenumber;
> +my $tot_or_size;
> +my $line;
> +my $host;
> +my $disk;
> +my %osize;
> +my %fail;
> +my $flash_mode;
> +my $storage;
> +my $pool;
> +my $label;
> +my $filenum;
> +my $date;
> +my $chunk;
> +my $level;
> +my $mysize;
> +my $note;
> +my $size;
>  
>  #--------------------------------------------------------
>  sub pr($$$$$$$) { 
> @@ -136,8 +177,8 @@ $dir=$logfile;
>  $dir =~ s/[^\/]*$//;
>  
>  
> -if ($logfile eq '-') {$IF=STDIN} else 
> -  {die ("Cannot open logfile $logfile") unless open (IF,"$logfile");$IF=IF;}
> +if ($logfile eq '-') {$IF=*STDIN} else 
> +  {die ("Cannot open logfile $logfile") unless open ($IF,"$logfile");}
>  
>  $filenumber=0;
>  $tot_or_size=0;
> @@ -160,35 +201,72 @@ while ( <$IF> ) {
>      $flash_mode = 1;
>      next;
>    }
> -  if ( ! /^([A-Z]+) taper (\S+) (\S+) (\S+) (\S+) (\S+)/) { next;}
> +  if ( ! /^([A-Z]+) taper \S+ \S+ (\S+) (\S+) (\S+) (\S+) (\S+)/) { next;}
>    # $_ = $1;
>    if (/PART taper/) {
> -    /^([A-Z]+) taper (\S+) (\S+) (\S+) (\S+) (\S+) (\S+) (\S+)/;
> -    $filenum = $3;
> -    $host = $4;
> -    $disk = $5;
> -    $date = $6;
> -    $chunk = $7;
> -    $level = $8;
> +    if (/^([A-Z]+) taper ("ST:\S+") ("POOL:\S+") (\S+) (\S+) (\S+) (\S+) 
> (\S+) (\S+) (\S+)/) {
> +        $storage = $2;
> +        $pool = $3;
> +        $label = $4;
> +        $filenum = $5;
> +        $host = $6;
> +        $disk = $7;
> +        $date = $8;
> +        $chunk = $9;
> +        $level = $10;
> +     $labels{$storage}{$pool}{$host}{$disk}{$date} = $label;
> +    } else {
> +        /^([A-Z]+) taper (\S+) (\S+) (\S+) (\S+) (\S+) (\S+) (\S+)/;
> +        $label = $2;
> +        $filenum = $3;
> +        $host = $4;
> +        $disk = $5;
> +        $date = $6;
> +        $chunk = $7;
> +        $level = $8;
> +    }
>      if ($filenum != $filenumber) {
>        # This should not be possible */
>        $filenumber = $filenum;
>      }
> +  } elsif (/START taper/) {
> +    if (/^([A-Z]+) taper (\S+) (\S+) ("ST:\S+") ("POOL:\S+") (\S+) (\S+) 
> (\S+)/) {
> +        $date = $3;
> +        $storage = $4;
> +        $pool = $5;
> +        $label = $7;
> +        $level = $7;
> +    } else {
> +        /^([A-Z]+) taper (\S+) (\S+) (\S+) (\S+) (\S+)/;
> +        $date = $3;
> +        $label = $4;
> +        $level = $5;
> +    }
>    } else {
> -    /^([A-Z]+) taper (\S+) (\S+) (\S+) (\S+) (\S+)/;
> -    $host = $2;
> -    $disk = $3;
> -    $date = $4;
> -    $chunk = $5;
> -    $level = $6;
> +    if (/^([A-Z]+) taper ("ST:\S+") ("POOL:\S+") (\S+) (\S+) (\S+) (\S+) 
> (\S+)/) {
> +        $storage = $2;
> +        $pool = $3;
> +        $host = $4;
> +        $disk = $5;
> +        $date = $6;
> +        $chunk = $7;
> +        $level = $8;
> +     $label = $labels{$storage}{$pool}{$host}{$disk}{$date};
> +    } else {
> +        /^([A-Z]+) taper (\S+) (\S+) (\S+) (\S+) (\S+)/;
> +        $host = $2;
> +        $disk = $3;
> +        $date = $4;
> +        $chunk = $5;
> +        $level = $6;
> +    }
>    }
>    switch: {
>      /START taper/ && do {
> -      $tocfilename=&tfn($chunk) if ($#subs >= 0);
> -      if (!$tocfilename || ($tocfilename eq '-')) {$OF=STDOUT;}
> +      $tocfilename=&tfn($label) if ($#subs >= 0);
> +      if (!$tocfilename || ($tocfilename eq '-')) {$OF=*STDOUT;}
>        else {
> -          die ("Cannot open tocfile $tocfilename") unless 
> open(OF,">$tocfilename");
> -          $OF=OF;
> +          die ("Cannot open tocfile $tocfilename") unless 
> open($OF,">$tocfilename");
>          }
>  
>       print $OF "\f" if ($vwspace && $filenumber);
> @@ -203,8 +281,9 @@ while ( <$IF> ) {
>  
>  
>        $filenumber=0;
> -      &pr("#","Server","/partition","date", "level","size[Kb]","part");
> -      &pr("$filenumber","$chunk","","$disk","-","-","-");
> +#      &pr("#","Server","/partition","date", "level","size[Kb]","part");
> +#      &pr("$filenumber","$label","","$date","-","-","-");
> +      $dates{$label} = $date;
>        last switch; };
>      /^(?:SUCCESS|CHUNK|PART|DONE) taper/ && do {
>        if(/SUCCESS/){
> @@ -217,18 +296,23 @@ while ( <$IF> ) {
>       $filenumber--;
>       $filenum = " ";
>        }
> -      $mysize = 0;
> +      my $mysize = 0;
>        if(/ kb (\d+) /){
>       $mysize = $1;
> +      } elsif(/ bytes (\d+) /){
> +     $mysize = int($1/1024);
>        }
>        if ( $fail{$host}{$disk} ) {
> -        
> &pr("$filenum","${host}","${disk}","${date}","${level}","FAIL","${chunk}");
> +     my @line = ($filenum, $host, $disk, $date, $level, "FAIL", $chunk);
> +     push @{$lines{$label}}, \@line;
>        } else {
> -     if (defined($flash_mode)) {
> -          
> &pr("$filenum","${host}","${disk}","${date}","${level}","$mysize","${chunk}");
> +     if (defined($flash_mode)) {
> +       my @line = ($filenum, $host, $disk, $date, $level, "$mysize", $chunk);
> +       push @{$lines{$label}}, \@line;
>       } else {
> -       if (defined($osize{$host}{$disk}) && !/^CHUNK/ && !/^PART/) {
> -            
> &pr("$filenum","${host}","${disk}","${date}","${level}","$osize{$host}{$disk}","${chunk}");
> +       if (defined($osize{$host}{$disk}) && !/^CHUNK/ && !/^PART/) {
> +         my @line = ($filenum, $host, $disk, $date, $level, 
> "$osize{$host}{$disk}", $chunk);
> +         push @{$lines{$label}}, \@line;
>         } else {
>           $note = "";
>           if(!/^CHUNK/ && !/^PART/){
> @@ -236,7 +320,8 @@ while ( <$IF> ) {
>           } else {
>             $note = "*";
>           }
> -            
> &pr("$filenum","${host}","${disk}","${date}","${level}","$note$mysize","${chunk}");
> +         my @line = ($filenum, $host, $disk, $date, $level, "$note$mysize", 
> $chunk);
> +         push @{$lines{$label}}, \@line;
>         }
>       }
>        }
> @@ -244,24 +329,47 @@ while ( <$IF> ) {
>      /INFO taper retrying/ && do {
>        --$filenumber;
>        last switch; };
> -    /INFO taper tape .* \[OK\]/ && do {
> +    /INFO taper tape (\S+) .* \[OK\]/ && do {
> +      $label = $1;
>        $line =~ / kb (\d+) /;
>        $size = $1;
>        $line =~ / fm (\d+) /;
> -      print "\n\n" if ($vwspace);
> -      &pr("$1","total","on_tape","-","-","$size","-");
> +      my @line = ($1, "total", "on_tape", "-", "-", "$size", "-");
> +      push @{$lines{$label}}, \@line;
>        last switch; };
>      /FAIL taper/ && do { next; };
>    }
>    $filenumber += 1;
>  }
> -if (defined($flash_mode)) {
> -  &pr("-","total","origin","-","not","available","-");
> -} else {
> -  &pr("-","total","origin","-","-","$tot_or_size","-");
> -}
>  close $IF;
> -close OF;
> +
> +foreach my $label (sort keys %lines) {
> +    $tocfilename=&tfn($label) if ($#subs >= 0);
> +    if (!$tocfilename || ($tocfilename eq '-')) {$OF=*STDOUT;}
> +    else {
> +        die ("Cannot open tocfile $tocfilename") unless 
> open($OF,">$tocfilename");
> +    }
> +    my $ofh = select($OF);
> +    $~ = "OF";
> +    select($ofh);
> +
> +    print $OF "\f" if $vwspace;
> +    pr("#","Server","/partition","date", "level","size[Kb]","part");
> +    pr("0","$label","","$dates{$label}","-","-","-");
> +    foreach my $line (@{$lines{$label}}) {
> +     &pr(@{$line});
> +    }
> +
> +    print "\n\n" if ($vwspace);
> +    if ($tocfilename && $tocfilename ne '-') {
> +        close $OF;
> +    }
> +}
> +#if (defined($flash_mode)) {
> +#    pr("-","total","origin","-","not","available","-");
> +#} else {
> +#    pr("-","total","origin","-","-","$tot_or_size","-");
> +#}
>  
>  
>  format OF =
> @@ -273,3 +381,4 @@ format STDOUT =
>  @>>  @<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< @<<<<<<<<<<<<<< @>> @>>>>>>>> 
> @>>>
>  $fnbr,$hstprt,$dt,$lvl,$sz,$ch
>  .
> +


-- 
Jean-Francois Malouin | IT Operations and Infrastructure
McConnell Brain Imaging Centre | MNI | McGill University

Reply via email to