File Coverage

blib/lib/Cassandra/Client/Policy/Retry/Default.pm
Criterion Covered Total %
statement 11 33 33.3
branch 0 18 0.0
condition 0 6 0.0
subroutine 4 9 44.4
pod 0 5 0.0
total 15 71 21.1


line stmt bran cond sub pod time code
1             package Cassandra::Client::Policy::Retry::Default;
2             our $AUTHORITY = 'cpan:TVDW';
3             $Cassandra::Client::Policy::Retry::Default::VERSION = '0.21';
4 13     13   217 use 5.010;
  13         68  
5 13     13   89 use strict;
  13         50  
  13         382  
6 13     13   70 use warnings;
  13         24  
  13         870  
7              
8 13         7931 use Cassandra::Client::Policy::Retry qw/
9             try_next_host
10             retry
11             rethrow
12 13     13   6914 /;
  13         47  
13              
14             sub new {
15 0     0 0   my ($class, %args)= @_;
16 0           my $max_retries;
17 0           foreach(qw/max_retries_read_timeout max_retries_unavailable max_retries_write_timeout max_retries_request_error/) {
18 0 0         $max_retries->{$_} = exists $args{$_} ? 0+ delete $args{$_} : 1;
19             }
20              
21 0 0         if (%args) {
22 0           die 'Unknown arguments '. (join ', ', keys %args);
23             }
24 0           return bless {
25             max_retries => $max_retries,
26             }, $class;
27             }
28              
29             sub on_read_timeout {
30 0     0 0   my ($self, $statement, $consistency_level, $required_responses, $received_responses, $data_retrieved, $nr_retries)= @_;
31              
32 0 0         return rethrow if $nr_retries >= $self->{max_retries}{max_retries_read_timeout};
33 0 0         return retry if $received_responses < $required_responses;
34 0 0 0       return retry if $received_responses >= $required_responses and !$data_retrieved;
35 0           return rethrow;
36             }
37              
38             sub on_unavailable {
39 0     0 0   my ($self, $statement, $consistency_level, $required_replicas, $alive_replicas, $nr_retries)= @_;
40              
41 0 0         return rethrow if $nr_retries >= $self->{max_retries}{max_retries_unavailable};
42 0           return try_next_host;
43             }
44              
45             sub on_write_timeout {
46 0     0 0   my ($self, $statement, $consistency_level, $write_type, $required_acks, $received_acks, $nr_retries)= @_;
47              
48 0 0         return rethrow if $nr_retries >= $self->{max_retries}{max_retries_write_timeout};
49 0 0 0       return retry if $write_type eq 'BATCH_LOG' or $statement->{idempotent};
50 0           return rethrow;
51             }
52              
53             sub on_request_error {
54 0     0 0   my ($self, $statement, $consistency_level, $error, $nr_retries)= @_;
55              
56 0 0         return rethrow if $nr_retries >= $self->{max_retries}{max_retries_request_error};
57 0           return try_next_host;
58             }
59              
60             1;
61              
62             __END__