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 )