-#! @PERL@
# Copyright (c) 2009, 2010 Zmanda Inc. All Rights Reserved.
#
# This program is free software; you can redistribute it and/or modify it
use POSIX qw( :errno_h );
use Amanda::Changer;
use Amanda::Config qw( :getconf config_dir_relative );
+use Amanda::Debug qw( :logging );
use Amanda::Header;
use Amanda::Holding;
use Amanda::MainLoop qw( :GIOCondition );
my $scribe = Amanda::Taper::Scribe->new(
taperscan => $controller->{'taperscan'},
feedback => $self,
- debug => $Amanda::Config::debug_taper);
+ debug => $Amanda::Config::debug_taper,
+ eject_volume => getconf($CNF_EJECT_VOLUME));
$self->{'scribe'} = $scribe;
$self->{'scribe'}->start(write_timestamp => $write_timestamp,
}
}
+sub CLOSE_VOLUME {
+ my $self = shift;
+ my ($msgtype, %params) = @_;
+
+ $self->_assert_in_state("idle") or return;
+
+ $self->{'scribe'}->close_volume();
+}
+
sub result_cb {
my $self = shift;
my %params = %{$self->{'dump_params'}};
# TODO: if $params{error} is set, report it back to the driver
# (this will be a change to the protocol)
+ log_add($L_INFO, "$params{'error'}") if defined $params{'error'};
+
if ($params{'volume_label'}) {
$self->{'label'} = $params{'volume_label'};
my $self = shift;
my %params = @_;
- log_add($L_INFO, $params{'message'});
+ debug("$params{'message'}");
+ log_add($L_INFO, "$params{'message'}");
}
##
$header_xfer->start($steps->{'header_xfer_xmsg_cb'});
my $header_addrs = $xsrc->get_addrs();
- $header_addrs = [ grep { $_->[0] eq '127.0.0.1' } @$header_addrs ];
- die "Source::DirectTCPListen did not return a localhost address"
- unless @$header_addrs;
my $header_port = $header_addrs->[0][1];
# and tell the driver which ports we're listening on
if ($xmsg->{'type'} == $XMSG_INFO) {
info($xmsg->{'message'});
} elsif ($xmsg->{'type'} == $XMSG_ERROR) {
- $errmsg = $xmsg->{'messsage'};
+ $errmsg = $xmsg->{'message'};
} elsif ($xmsg->{'type'} == $XMSG_DONE) {
if ($errmsg) {
$finished_cb->($errmsg);
if (exists $splitting_args{$_});
}
+ my $device = $self->{'scribe'}->get_device();
+ if (!defined $device) {
+ die "no device is available to create an xfer_dest";
+ }
+ $splitting_args{'leom_supported'} = $device->property_get("leom");
# and convert those to get_xfer_dest args
%get_xfer_dest_args = get_splitting_args_from_config(
%splitting_args);
$get_xfer_dest_args{'max_memory'} = getconf($CNF_DEVICE_OUTPUT_BUFFER_SIZE);
if (!getconf_seen($CNF_DEVICE_OUTPUT_BUFFER_SIZE)) {
- my $device = $self->{'scribe'}->get_device();
my $block_size4 = $device->block_size * 4;
if ($block_size4 > $get_xfer_dest_args{'max_memory'}) {
$get_xfer_dest_args{'max_memory'} = $block_size4;
}
}
- $get_xfer_dest_args{'can_cache_inform'} = ($msgtype eq Amanda::Taper::Protocol::FILE_WRITE);
+ $device = undef;
+ $get_xfer_dest_args{'can_cache_inform'} = ($msgtype eq Amanda::Taper::Protocol::FILE_WRITE and $get_xfer_dest_args{'allow_split'});
# if we're unable to fulfill the user's splitting needs, we can still give
# the dump a shot - but we'll warn them about the problem