Action-CircuitBreaker
view release on metacpan or search on metacpan
lib/Action/CircuitBreaker.pm view on Meta::CPAN
=head1 ATTRIBUTES
=head2 error_if_code
ro, CodeRef
The code to run to check if the error should count towards the circuit breaker. It defaults to:
# Returns true if there were an exception evaluating to something true
sub { $_[0] }
It will be given these arguments:
=over
=item *
as first argument, a scalar which is the value of any exception that were
raised by the C<$attempt_code>. Otherwise, undef.
=item *
as second argument, a HashRef, which contains these keys:
=back
=over
=item action_retry
it's a reference on the ActionRetry instance. That way you can have access to
the other attributes.
=item attempt_result
It's a scalar, which is the result of C<$attempt_code>. If C<$attempt_code>
returned a list, then the scalar is the reference on this list.
=item attempt_parameters
It's the reference on the parameters that were given to C<$attempt_code>.
=back
C<error_if_code> return value will be interpreted as a boolean : true return
value means the execution of C<$attempt_code> was a failure and should count
towards breaking the ciruit. False means it went well.
Here is an example of code that gets the arguments properly:
my $action = Action::CircuitBreaker->new(
error_if_code => sub {
my ($error, $h) = @_;
my $attempt_code_result = $h->{attempt_result};
my $attempt_code_params = $h->{attempt_parameters};
my @results = @$attempt_code_result;
# will contains (2, 4);
my @original_parameters = @$attempt_code_params;
# will contains (1, 2);
}
);
my @results = $action->run(sub { print @_; }, 1, 2);
=head2 on_failure_code
ro, CodeRef, optional
If given, will be executed when an execution fails.
It will be given the same arguments as C<error_if_code>. See C<error_if_code> for their descriptions
=head2 on_circuit_open
ro, CodeRef, optional
If given, will be executed the circuit gets opened.
It will be given the same arguments as C<error_if_code>. See C<error_if_code> for their descriptions
=head2 on_circuit_close
ro, CodeRef, optional
If given, will be executed the circuit gets closed again.
It will be given no arguments
=head2 max_retries_number
ro, int, optional
Maximum number of retries before opening circuit.
=head2 open_time
ro, int, optional
Time in number of seconds to open the circuit for after C<max_retries_number> have failed.
=head1 METHODS
=head2 run
Does the following:
=over
=item step 1
Tests the value of C<_circuit_open_until>. If it is positive and the current
timestamp is before the value, an error is thrown, because the circuit is
still open. If the value is positive, but before the current timestamp,
the circuit is closed (by setting C<_circuit_open_until> to 0) and optionally,
C<on_circuit_close> is run.
=item step 2
( run in 0.708 second using v1.01-cache-2.11-cpan-99c4e6809bf )