X-Git-Url: https://git.gag.com/?a=blobdiff_plain;f=server-src%2Famcheck-device.pl;h=3a72bbe0053a0296889163fc22edb45fc589dc91;hb=8eb7e8e19f1373f6be7f1f7837b997748ce31d0e;hp=d9689cb9ad8ae55966b8b1fbf1a805dd0c79009b;hpb=cb38d19aa8dc2c5d380ab2d7ad9724a5d99eee5d;p=debian%2Famanda diff --git a/server-src/amcheck-device.pl b/server-src/amcheck-device.pl index d9689cb..3a72bbe 100644 --- a/server-src/amcheck-device.pl +++ b/server-src/amcheck-device.pl @@ -29,6 +29,7 @@ use Amanda::Device qw( :constants ); use Amanda::MainLoop; use Amanda::Changer; use Amanda::Taper::Scan; +use Amanda::Interactivity; use Getopt::Long; Amanda::Util::setup_application("amcheck-device", "server", $CONTEXT_CMDLINE); @@ -37,6 +38,7 @@ my $config_overrides = new_config_overrides($#ARGV+1); my $overwrite = 0; Getopt::Long::Configure(qw{bundling}); GetOptions( + 'version' => \&Amanda::Util::version_opt, 'o=s' => sub { add_config_override_opt($config_overrides, $_[1]); }, 'w' => \$overwrite, ) or usage(); @@ -141,16 +143,23 @@ sub failure { sub do_check { my ($finished_cb) = @_; my ($res, $label, $mode); + my $tlf = Amanda::Config::config_dir_relative(getconf($CNF_TAPELIST)); + my $tl = Amanda::Tapelist->new($tlf); + my $chg = Amanda::Changer->new(undef, tapelist => $tl); + return failure($chg, $finished_cb) if ($chg->isa("Amanda::Changer::Error")); + my $interactivity = Amanda::Interactivity->new( + name => getconf($CNF_INTERACTIVITY)); + my $scan_name = getconf($CNF_TAPERSCAN); + my $taperscan = Amanda::Taper::Scan->new(algorithm => $scan_name, + changer => $chg, + interactivity => $interactivity, + tapelist => $tl); my $steps = define_steps - cb_ref => \$finished_cb; + cb_ref => \$finished_cb, + finalize => sub { $taperscan->quit(); }; step start => sub { - my $chg = Amanda::Changer->new(); - - return failure($chg, $finished_cb) if ($chg->isa("Amanda::Changer::Error")); - - my $taperscan = Amanda::Taper::Scan->new(changer => $chg); $taperscan->scan( result_cb => $steps->{'result_cb'}, user_msg_fn => \&_user_msg_fn @@ -159,20 +168,20 @@ sub do_check { step result_cb => sub { (my $err, $res, $label, $mode) = @_; - return failure($err, $finished_cb) if $err; - - if (defined $res->{'device'}->volume_label()) { - $res->set_label(label => $res->{'device'}->volume_label(), - finished_cb => $steps->{'set_labeled'}); - } else { - $steps->{'set_labeled'}->(undef); - }; - }; + if ($err) { + if ($res) { + $res->release(finished_cb => sub { + return failure($err, $finished_cb); + }); + return; + } else { + return failure($err, $finished_cb); + } + } - step set_labeled => sub { my $modestr = ($mode == $ACCESS_APPEND)? "append" : "write"; my $slot = $res->{'this_slot'}; - if (defined $res->{'device'}->volume_label()) { + if (defined $res->{'device'} and defined $res->{'device'}->volume_label()) { print "Will $modestr to volume '$label' in slot $slot.\n"; } else { print "Will $modestr label '$label' to new volume in slot $slot.\n";