Imported Upstream version 3.3.3
[debian/amanda] / perl / Amanda / Recovery / Clerk.pm
index 810621f792d1a6ce7b81494ad0f0f1c9b16ac975..c40d40f7de7d5e0b9e6d40f9fb38eaa75f5ea792 100644 (file)
@@ -1,8 +1,9 @@
-# Copyright (c) 2010 Zmanda, Inc.  All Rights Reserved.
+# Copyright (c) 2010-2012 Zmanda, Inc.  All Rights Reserved.
 #
-# This library is free software; you can redistribute it and/or modify it
-# under the terms of the GNU Lesser General Public License version 2.1 as
-# published by the Free Software Foundation.
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+#* License as published by the Free Software Foundation; either
+# version 2.1 of the License, or (at your option) any later version.
 #
 # This library is distributed in the hope that it will be useful, but
 # WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
@@ -69,7 +70,7 @@ Amanda::Recovery::Clerk - handle assembling dumpfiles from multiple parts
 
 =head1 OVERVIEW
 
-This package is the counterpart to L<Amanda::Recovery::Scribe>, and handles
+This package is the counterpart to L<Amanda::Taper::Scribe>, and handles
 re-assembling dumpfiles from multiple parts, possibly distributed over several
 volumes.
 
@@ -228,12 +229,12 @@ sub get_xfer_src {
     my $self = shift;
     my %params = @_;
 
-    for my $rq_param qw(dump xfer_src_cb) {
+    for my $rq_param (qw(dump xfer_src_cb)) {
        croak "required parameter '$rq_param' missing"
            unless exists $params{$rq_param};
     }
 
-    die "Clerk is already busy" if $self->{'xfer_state'};
+    confess "Clerk is already busy" if $self->{'xfer_state'};
 
     # set up a new xfer_state
     my $xfer_state = $self->{'xfer_state'} = {
@@ -262,13 +263,13 @@ sub start_recovery {
     my %params = @_;
 
     $self->dbg("starting recovery");
-    for my $rq_param qw(xfer recovery_cb) {
+    for my $rq_param (qw(xfer recovery_cb)) {
        croak "required parameter '$rq_param' missing"
            unless exists $params{$rq_param};
     }
 
-    die "no xfer is in progress" unless $self->{'xfer_state'};
-    die "get_xfer_src has not finished"
+    confess "no xfer is in progress" unless $self->{'xfer_state'};
+    confess "get_xfer_src has not finished"
        if defined $self->{'xfer_state'}->{'xfer_src_cb'};
 
     my $xfer_state = $self->{'xfer_state'};
@@ -302,8 +303,8 @@ sub quit {
     my %params = @_;
     my $finished_cb = $params{'finished_cb'};
 
-    die "Cannot quit a Clerk while a transfer is in progress"
-       if $self->{'xfer_state'};
+    confess "Cannot quit a Clerk while a transfer is in progress"
+       if $self->{'xfer_state'} and $self->{'xfer_state'}->{'xfer'};
 
     my $steps = define_steps 
        cb_ref => \$finished_cb,
@@ -340,7 +341,7 @@ sub _xmsg_part_done {
     my $next_label = $xfer_state->{'next_part'}->{'label'};
     my $next_filenum = $xfer_state->{'next_part'}->{'filenum'};
 
-    die "read incorrect filenum"
+    confess "read incorrect filenum"
        unless $next_filenum == $msg->{'fileno'};
     $self->dbg("done reading file $next_filenum on '$next_label'");
 
@@ -374,6 +375,7 @@ sub _xmsg_done {
     return $xfer_state->{'recovery_cb'}->(
        result => $result,
        errors => $xfer_state->{'errors'},
+       bytes_read => $xfer_state->{'xfer_src'}->get_bytes_read()
     );
 }
 
@@ -416,7 +418,7 @@ sub _maybe_start_part {
        # first, see if anything remains to be done
        if (!exists $xfer_state->{'dump'}{'parts'}[$xfer_state->{'next_part_idx'}]) {
            # this should not happen until the xfer is started..
-           die "xfer should be running already"
+           confess "xfer should be running already"
                unless $xfer_state->{'xfer'};
 
            # tell the source to generate EOF