Author: timbo
Date: Wed Jun 11 08:44:30 2008
New Revision: 11404

Modified:
   dbi/trunk/lib/DBD/Gofer/Transport/Base.pm

Log:
Refactor response_needs_retransmit by separating decision logic into new 
response_retry_preference method.
(to ease retry on 503 behaviour in http transport)


Modified: dbi/trunk/lib/DBD/Gofer/Transport/Base.pm
==============================================================================
--- dbi/trunk/lib/DBD/Gofer/Transport/Base.pm   (original)
+++ dbi/trunk/lib/DBD/Gofer/Transport/Base.pm   Wed Jun 11 08:44:30 2008
@@ -170,12 +170,9 @@
 }
 
 
-sub response_needs_retransmit {
+sub response_retry_preference {
     my ($self, $request, $response) = @_;
 
-    my $err = $response->err
-        or return 0; # nothing went wrong
-
     my $retry;
 
     # give the user a chance to express a preference (or undef for default)
@@ -195,25 +192,40 @@
         $retry = 1 if $idempotent;
     }
 
+    return $retry;
+}
+
+
+sub response_needs_retransmit {
+    my ($self, $request, $response) = @_;
+
+    my $err = $response->err
+        or return 0; # nothing went wrong
+
+    my $retry = $self->response_retry_preference($request, $response);
+
     if (!$retry) {  # false or undef
         $self->trace_msg("response_needs_retransmit: response not suitable for 
retry\n");
         return 0;
     }
 
+    # we'd like to retry but have we retried too much already?
+
     my $retry_limit = $self->go_retry_limit;
-    # $retry_limit = 2 unless defined $retry_limit; # not safe enough to do 
this
     if (!$retry_limit) {
         $self->trace_msg("response_needs_retransmit: retries disabled 
(retry_limit not set)\n");
         return 0;
     }
-    my $meta = $request->meta;
-    if (($meta->{retry_count}||=0) >= $retry_limit) {
-        $self->trace_msg("response_needs_retransmit: $meta->{retry_count} is 
too many retries\n");
+
+    my $request_meta = $request->meta;
+    if (($request_meta->{retry_count}||=0) >= $retry_limit) {
+        $self->trace_msg("response_needs_retransmit: 
$request_meta->{retry_count} is too many retries\n");
         return 0;
     }
-    ++$meta->{retry_count};                 # count for this request
+    ++$request_meta->{retry_count};         # count for this request
     ++$self->meta->{request_retry_count};   # cumulative transport stats
-    $self->trace_msg("response_needs_retransmit: retry 
$meta->{retry_count}\n");
+
+    $self->trace_msg("response_needs_retransmit: retry 
$request_meta->{retry_count}\n");
     return 1;
 }
 

Reply via email to