optimize CDR rating after timed rate perf regression, RT#15739
authorivan <ivan>
Wed, 4 Jan 2012 01:20:13 +0000 (01:20 +0000)
committerivan <ivan>
Wed, 4 Jan 2012 01:20:13 +0000 (01:20 +0000)
FS/FS/Schema.pm
FS/FS/part_pkg/voip_cdr.pm

index 5046ec7..7825973 100644 (file)
@@ -2694,7 +2694,9 @@ sub tables_hashref {
       ],
       'primary_key' => 'ratedetailnum',
       'unique'      => [ [ 'ratenum', 'orig_regionnum', 'dest_regionnum' ] ],
       ],
       'primary_key' => 'ratedetailnum',
       'unique'      => [ [ 'ratenum', 'orig_regionnum', 'dest_regionnum' ] ],
-      'index'       => [ [ 'ratenum', 'dest_regionnum' ] ],
+      'index'       => [ [ 'ratenum', 'dest_regionnum' ],
+                         [ 'ratenum', 'ratetimenum' ]
+                       ],
     },
 
     'rate_region' => {
     },
 
     'rate_region' => {
index df1f2cc..08cf4a1 100644 (file)
@@ -570,8 +570,11 @@ sub calc_usage {
             if ( !exists($interval_cache{$regionnum}) ) {
               my @intervals = (
                 sort { $a->stime <=> $b->stime }
             if ( !exists($interval_cache{$regionnum}) ) {
               my @intervals = (
                 sort { $a->stime <=> $b->stime }
-                map { my $r = $_->rate_time; $r ? $r->intervals : () }
-                $rate->rate_detail
+                  map { $_->rate_time->intervals }
+                    qsearch({ 'table'     => 'rate_detail',
+                              'hashref'   => { 'ratenum' => $rate->ratenum },
+                              'extra_sql' => 'AND ratetimenum IS NOT NULL',
+                           })
               );
               $interval_cache{$regionnum} = \@intervals;
               warn "  cached ".scalar(@intervals)." interval(s)\n"
               );
               $interval_cache{$regionnum} = \@intervals;
               warn "  cached ".scalar(@intervals)." interval(s)\n"