X-Git-Url: https://git.gag.com/?a=blobdiff_plain;f=server-src%2Famrmtape.pl;h=7c052a52216f16b1752d13d223157450d2779305;hb=refs%2Ftags%2Fupstream%2F3.3.1;hp=392228f30a1f22c96f29f55edf973e23e9bf0076;hpb=cd0b924f27312d57bd42f6c4fae2b795139e2d0b;p=debian%2Famanda diff --git a/server-src/amrmtape.pl b/server-src/amrmtape.pl index 392228f..7c052a5 100644 --- a/server-src/amrmtape.pl +++ b/server-src/amrmtape.pl @@ -107,7 +107,10 @@ Amanda::Util::setup_application("amrmtape", "server", $CONTEXT_CMDLINE); my $config_overrides = new_config_overrides( scalar(@ARGV) + 1 ); +debug("Arguments: " . join(' ', @ARGV)); +Getopt::Long::Configure(qw{ bundling }); my $opts_ok = GetOptions( + 'version' => \&Amanda::Util::version_opt, "changer=s" => \$changer_name, "cleanup" => \$cleanup, "dryrun|n" => \$dry_run, @@ -239,7 +242,7 @@ my $scrub_db = sub { } my $level = $parts[1]; my $cur_label = $parts[7]; - if ($cur_label eq $label) { + if (defined $cur_label and $cur_label eq $label) { $dead_level = $level; vlog "Discarding Host: $host, Disk: $disk, Level: $level\n"; } elsif ( $level > $dead_level ) { @@ -306,26 +309,36 @@ my $erase_volume = make_cb('erase_volume' => sub { my $dev = $resv->{'device'}; die "Can not erase $label because the device doesn't support this feature" unless $dev->property_get('full_deletion'); - if (!$dry_run) { - $dev->erase() - or die "Failed to erase volume"; - $dev->finish(); - # label the tape with the same label it had - if ($keep_label) { - $dev->start($ACCESS_WRITE, $label, undef) - or die "Failed to write tape label"; - } - } + my $rel_cb = make_cb('rel_cb' => sub { + $resv->release(finished_cb => sub { + my ($err) = @_; - $resv->release(finished_cb => sub { - my ($err) = @_; + $chg->quit(); + die $err if $err; - $chg->quit(); - die $err if $err; - - $scrub_db->(); + $scrub_db->(); + }); }); + + if (!$dry_run) { + $dev->erase() + or die "Failed to erase volume"; + $resv->set_label(finished_cb => sub { + $dev->finish(); + + # label the tape with the same label it had + if ($keep_label) { + $dev->start($ACCESS_WRITE, $label, undef) + or die "Failed to write tape label"; + return $resv->set_label(label => $label, finished_cb => $rel_cb); + } + $rel_cb->(); + }); + } else { + $rel_cb->(); + } + }); } else { $scrub_db->();