[asterisk-dev] [Code Review] 2880: CDRs: prevent backend modules from unregistering while active CDRs are in flight

Matt Jordan reviewboard at asterisk.org
Tue Oct 15 06:18:46 CDT 2013


-----------------------------------------------------------
This is an automatically generated e-mail. To reply, visit:
https://reviewboard.asterisk.org/r/2880/
-----------------------------------------------------------

(Updated Oct. 15, 2013, 11:18 a.m.)


Review request for Asterisk Developers.


Changes
-------

Addressed Corey's findings.


Repository: Asterisk


Description
-------

During shutdown, Asterisk attempts to flush out any active CDRs by calling ast_cdr_engine_term. This is to try to get as much billing data recorded as possible before Asterisk shuts down/restarts and that data is lost. Unfortunately, module unloading occurs prior to calling ast_cdr_engine_term, and the CDR backend modules have already unregistered themselves. Thus, while the records are successfully flushed from the system, there are no registered backends left to handle the data.

This is technically a problem in prior versions of Asterisk as well; however, it is far less likely to occur in Asterisk 1.8/11 due to CDRs being build on an asynchronous message bus in Asterisk 12.

This patch modified ast_cdr_unregister such that if active_cdrs_by_channel has an entry, the unregistration fails. This would have the side effect of preventing CDR module unloading via the CLI on a busy system - but if you're doing that, you're already losing billing data, so that seems like a very bad idea anyway.


Diffs (updated)
-----

  /branches/12/addons/cdr_mysql.c 400957 
  /branches/12/cdr/cdr_adaptive_odbc.c 400957 
  /branches/12/cdr/cdr_csv.c 400957 
  /branches/12/cdr/cdr_custom.c 400957 
  /branches/12/cdr/cdr_manager.c 400957 
  /branches/12/cdr/cdr_odbc.c 400957 
  /branches/12/cdr/cdr_pgsql.c 400957 
  /branches/12/cdr/cdr_radius.c 400957 
  /branches/12/cdr/cdr_sqlite.c 400957 
  /branches/12/cdr/cdr_sqlite3_custom.c 400957 
  /branches/12/cdr/cdr_syslog.c 400957 
  /branches/12/cdr/cdr_tds.c 400957 
  /branches/12/include/asterisk/cdr.h 400957 
  /branches/12/main/cdr.c 400957 

Diff: https://reviewboard.asterisk.org/r/2880/diff/


Testing
-------

The various dial tests that have a tendency to end very quickly while CDR data is in flight now pass consistently.


Thanks,

Matt Jordan

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.digium.com/pipermail/asterisk-dev/attachments/20131015/d4272f84/attachment.html>


More information about the asterisk-dev mailing list