Algorithm-Backoff
view release on metacpan or search on metacpan
lib/Algorithm/Backoff/LIMD.pm view on Meta::CPAN
package Algorithm::Backoff::LIMD;
use strict;
use warnings;
use parent qw(Algorithm::Backoff);
our $AUTHORITY = 'cpan:PERLANCAR'; # AUTHORITY
our $DATE = '2024-02-24'; # DATE
our $DIST = 'Algorithm-Backoff'; # DIST
our $VERSION = '0.010'; # VERSION
our %SPEC;
$SPEC{new} = {
v => 1.1,
is_class_meth => 1,
is_func => 0,
args => {
%Algorithm::Backoff::attr_consider_actual_delay,
%Algorithm::Backoff::attr_max_actual_duration,
%Algorithm::Backoff::attr_max_attempts,
%Algorithm::Backoff::attr_jitter_factor,
%Algorithm::Backoff::attr_max_delay,
%Algorithm::Backoff::attr_min_delay,
%Algorithm::Backoff::attr_initial_delay,
%Algorithm::Backoff::attr_delay_increment_on_failure,
%Algorithm::Backoff::attr_delay_multiple_on_success,
},
result_naked => 1,
result => {
schema => 'obj*',
},
};
sub _success {
my ($self, $timestamp) = @_;
unless (defined $self->{_prev_delay}) {
return $self->{_prev_delay} = $self->{initial_delay};
}
my $delay = $self->{_prev_delay} * $self->{delay_multiple_on_success};
$delay;
}
sub _failure {
my ($self, $timestamp) = @_;
unless (defined $self->{_prev_delay}) {
return $self->{_prev_delay} = $self->{initial_delay};
}
my $delay = $self->{_prev_delay} + $self->{delay_increment_on_failure};
$delay;
}
1;
# ABSTRACT: Linear Increment, Multiplicative Decrement (LIMD) backoff
__END__
=pod
( run in 0.871 second using v1.01-cache-2.11-cpan-63c85eba8c4 )