AC-MrGamoo
view release on metacpan or search on metacpan
lib/AC/MrGamoo/Job/XferInfo.pm view on Meta::CPAN
my $MAXRETRY = 1;
# id, filename, dstname, size, location, dst
sub new {
my $class = shift;
my $job = shift;
my $me = bless { @_ }, $class;
$me->{server} = $me->{dst};
return $me;
}
sub pend {
my $me = shift;
my $job = shift;
# create instances, put on pending queue
my $x = AC::MrGamoo::Job::Xfer->new($job, $me, $me->{dst});
return unless $x;
$me->{instance}{ $x->{id} } = $x;
return;
}
sub failed {
my $me = shift;
my $x = shift;
my $job = shift;
delete $me->{instance}{ $x->{id} };
# retry? replan? abort?
my $server = $me->{dst};
my $status = get_peer_status_from_id($server);
my $loc = $job->{file_info}{$me->{filename}}{location} || $me->{location};
verbose("xfer failed $me->{id} $server ($status) $me->{filename} @$loc");
my $skip = $job->{options}{skipmissinginputfiles}; # QQQ
if( $job->{phase_no} == -1 && $skip ){
# ignore
return;
}
if( $status != 200 ){
# replan tasks
$job->_replan_server($server, 'xfer', $me);
return;
}
if( $me->{retries} ++ > $MAXRETRY ){
# replan tasks
$job->_replan($server, 'xfer', $me);
return;
}
# retry
debug("retry xfer");
$me->pend($job);
}
sub finished {
my $me = shift;
my $x = shift;
my $job = shift;
delete $me->{instance}{ $x->{id} };
$me->{finished} = 1;
}
1;
( run in 0.501 second using v1.01-cache-2.11-cpan-39bf76dae61 )