Algorithm-Backoff-RetryTimeouts
view release on metacpan - search on metacpan
view release on metacpan or search on metacpan
lib/Algorithm/Backoff/RetryTimeouts.pm view on Meta::CPAN
package Algorithm::Backoff::RetryTimeouts;
use utf8;
use strict;
use warnings;
use Algorithm::Backoff::Exponential;
use base qw< Algorithm::Backoff::Exponential >;
use Storable qw< dclone >;
use Time::HiRes qw< time >;
use namespace::clean;
# ABSTRACT: A backoff-style retry algorithm with adjustable timeout support
use version;
our $VERSION = 'v1.0.0'; # VERSION
#pod =head1 SYNOPSIS
#pod
#pod use Algorithm::Backoff::RetryTimeouts;
#pod
#pod my $retry_algo = Algorithm::Backoff::RetryTimeouts->new(
#pod # common adjustments (defaults shown)
#pod max_attempts => 8,
#pod max_actual_duration => 50,
#pod jitter_factor => 0.1,
#pod timeout_jitter_factor => 0.1,
#pod adjust_timeout_factor => 0.5,
#pod min_adjust_timeout => 5,
#pod
#pod # other defaults
#pod initial_delay => sqrt(2),
#pod exponent_base => sqrt(2),
#pod delay_on_success => 0,
#pod min_delay => 0,
#pod max_delay => undef,
#pod consider_actual_delay => 1,
#pod );
#pod
#pod my ($delay, $timeout);
#pod $timeout = $retry_algo->timeout;
#pod
#pod my $is_successful = 0;
#pod while (!$is_successful) {
#pod $actionee->timeout( $timeout );
#pod $is_successful = $actionee->do_the_thing;
#pod
#pod ($delay, $timeout) = $is_successful ? $retry_algo->success : $retry_algo->failure;
#pod die "Ran out of time" if $delay == -1;
#pod sleep $delay;
#pod }
#pod
#pod =head1 DESCRIPTION
#pod
#pod This module is a subclass of L<Algorithm::Backoff::Exponential> that adds support for
#pod adjustable timeouts during each retry. This also comes with a sane set of defaults as a
#pod good baseline for most kinds of retry operations.
#pod
#pod A combination of features solves for most problems that would arise from retry operations:
#pod
#pod =over
#pod
#pod =item *
#pod
#pod B<Maximum attempts> - Forces the algorithm to give up if repeated attempts don't yield
#pod success.
#pod
#pod =item *
#pod
#pod B<Maximum duration> - Forces the algorithm to give up if no successes happen within a
#pod certain time frame.
#pod
#pod =item *
#pod
#pod B<Exponential backoff> - A C<sqrt(2)> exponential delay keeps single retries from waiting
#pod too long, while spreading out repeated retries that may fail too quickly and run out of
#pod max attempts. This also decreases the congestion that happens with repeated attempts.
#pod
#pod =item *
#pod
#pod B<Jitter> - Adding random jitter to the retry delays solves for the Thundering Herd
#pod problem.
view all matches for this distributionview release on metacpan - search on metacpan
( run in 1.547 second using v1.00-cache-2.02-grep-82fe00e-cpan-c30982ac1bc3 )