[freeside-commits] freeside/FS/bin freeside-cdrrewrited,1.7,1.8

Ivan,,, ivan at wavetail.420.am
Mon May 9 13:15:59 PDT 2011


Update of /home/cvs/cvsroot/freeside/FS/bin
In directory wavetail.420.am:/tmp/cvs-serv29969

Modified Files:
	freeside-cdrrewrited 
Log Message:
better retry behavior for non-found taqua CDR rewrites, RT#12181

Index: freeside-cdrrewrited
===================================================================
RCS file: /home/cvs/cvsroot/freeside/FS/bin/freeside-cdrrewrited,v
retrieving revision 1.7
retrieving revision 1.8
diff -u -w -d -r1.7 -r1.8
--- freeside-cdrrewrited	2 May 2011 16:14:24 -0000	1.7
+++ freeside-cdrrewrited	9 May 2011 20:15:57 -0000	1.8
@@ -30,6 +30,10 @@
 
 #--
 
+my %accountcode_unmatch = ();
+my $accountcode_retry = 4 * 60 * 60; # 4 hours
+my $accountcode_giveup = 4 * 24 * 60 * 60; # 4 days
+
 while (1) {
 
   #hmm... don't want to do an expensive search with an ever-growing bunch
@@ -37,6 +41,20 @@
   # rewritten "skipped", i.e. why we're a daemon in the first place
   # instead of just doing this search like normal CDRs
 
+  my @recent = grep { ($accountcode_unmatch{$_} + $accountcode_retry) < time }
+                 keys %accountcode_unmatch;
+  #hmm :/
+  my $extra_sql = '';
+  if ( @recent ) {
+    $extra_sql .= ' AND '.
+      join(' AND ',
+                    map { my($sessionnum,$src) = split(',', $_);
+                          "( sessionnum != '$sessionnum' OR src != '$src' )";
+                        }
+                      @recent
+          );
+  }
+
   my $found = 0;
   foreach my $cdr ( 
     qsearch( {
@@ -45,6 +63,7 @@
       'hashref'   => {},
       'extra_sql' => 'WHERE freesidestatus IS NULL'.
                      ' AND freesiderewritestatus IS NULL'.
+                     $extra_sql.
                      ' LIMIT 1024', #arbitrary, but don't eat too much memory
     } )
   ) {
@@ -90,11 +109,20 @@
       });
 
       unless ( $primary ) {
-        warn "WARNING: can't find primary CDR with session ". $cdr->sessionnum.
-             ", src ". $cdr->subscriber. "; will keep trying\n";
+
+        my $cantfind = "can't find primary CDR with session ". $cdr->sessionnum.
+                       ", src ". $cdr->subscriber;
+        if ( $cdr->calldate_unix + $accountcode_giveup < time ) {
+          push @status, 'taqua-accountcode-NOTFOUND';
+          $cdr->status('done'); #so it doesn't try to rate
+        } else {
+          warn "WARNING: $cantfind; will keep trying\n";
+          $accountcode_unmatch{$cdr->sessionnum.','.$cdr->subscriber} = time;
         next;
       }
 
+      } else {
+
       $primary->accountcode( $cdr->lastdata );
       #$primary->freesiderewritestatus( 'taqua-accountcode-primary' );
       my $error = $primary->replace;
@@ -105,6 +133,9 @@
 
       push @status, 'taqua-accountcode';
       $cdr->status('done'); #so it doesn't try to rate
+
+      }
+
     }
 
     $cdr->freesiderewritestatus(



More information about the freeside-commits mailing list