Algorithm-Retry
view release on metacpan or search on metacpan
lib/Algorithm/Retry/Fibonacci.pm view on Meta::CPAN
package Algorithm::Retry::Fibonacci;
our $DATE = '2019-04-10'; # DATE
our $VERSION = '0.002'; # VERSION
use strict;
use warnings;
use parent qw(Algorithm::Retry);
our %SPEC;
$SPEC{new} = {
v => 1.1,
is_class_meth => 1,
is_func => 0,
args => {
%Algorithm::Retry::attr_consider_actual_delay,
%Algorithm::Retry::attr_max_attempts,
%Algorithm::Retry::attr_jitter_factor,
%Algorithm::Retry::attr_delay_on_success,
%Algorithm::Retry::attr_max_delay,
initial_delay1 => {
summary => 'Initial delay for the first attempt after failure, '.
'in seconds',
schema => 'ufloat*',
req => 1,
},
initial_delay2 => {
summary => 'Initial delay for the second attempt after failure, '.
'in seconds',
schema => 'ufloat*',
req => 1,
},
},
result_naked => 1,
result => {
schema => 'obj*',
},
};
sub _success {
my ($self, $timestamp) = @_;
$self->{delay_on_success};
}
sub _failure {
my ($self, $timestamp) = @_;
if ($self->{_attempts} == 1) {
$self->{_delay_n_min_1} = 0;
$self->{_delay_n} = $self->{initial_delay1};
} elsif ($self->{_attempts} == 2) {
$self->{_delay_n_min_1} = $self->{initial_delay1};
$self->{_delay_n} = $self->{initial_delay2};
} else {
my $tmp = $self->{_delay_n};
$self->{_delay_n} = $self->{_delay_n_min_1} + $self->{_delay_n};
$self->{_delay_n_min_1} = $tmp;
$self->{_delay_n};
}
}
1;
# ABSTRACT: Backoff using Fibonacci sequence
__END__
=pod
( run in 0.965 second using v1.01-cache-2.11-cpan-63c85eba8c4 )