* 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