[asterisk-bugs] [Asterisk 0010668]: Incomplete CDR lock
noreply at bugs.digium.com
noreply at bugs.digium.com
Fri Sep 14 14:10:55 CDT 2007
A NOTE has been added to this issue.
======================================================================
http://bugs.digium.com/view.php?id=10668
======================================================================
Reported By: arkadia
Assigned To: murf
======================================================================
Project: Asterisk
Issue ID: 10668
Category: CDR/General
Reproducibility: always
Severity: minor
Priority: normal
Status: assigned
Asterisk Version: 1.4.11
SVN Branch (only for SVN checkouts, not tarball releases): 1.4
SVN Revision (number only!):
Disclaimer on File?: N/A
Request Review:
======================================================================
Date Submitted: 09-07-2007 08:26 CDT
Last Modified: 09-14-2007 14:10 CDT
======================================================================
Summary: Incomplete CDR lock
Description:
This is all about the meaning of AST_CDR_FLAG_LOCKED flag for CDR.
I assume if CDR has this flag set then it wont be updated anymore by any
ast_cdr_ functions except cases when we force such update. ast_cdr_reset()
is example of function which allows to update locked CDRs if special flag
is given.
Based on this assumption I prepared the patch with such changes:
ast_cdr_setvar() - not allowed to touch locked CDRs. I don't see any
cases when we need to change locked CDRs too. Not touching locked CDRs is
helpfull when ForkCDR being used and every new CDR may have different
custom variables.
ast_cdr_answer() - don't change status of locked CDRs. That might be
helpfull when we have a chain of CDRs for one incoming call for which we
perform several tries to make outgoing call. Every outgoing attempt may
finish with its own completion code. And if the final attempt is 'answered'
then we have only one CDR with 'answered' status. All other will keep
connection error codes which is very helpful for error monitoring.
ast_cdr_end() - don't change locked CDRs by the same reason as
ast_cdr_answer()
As there will be no changes in CDR after lock, app_forkcdr.c should be
updated to end original locked CDR.
Also it'll be great to make optional cdr reset in this application, but
thats a theme for another patch.
======================================================================
----------------------------------------------------------------------
murf - 09-14-07 14:10
----------------------------------------------------------------------
There's a lot of things to answer... Let's see if I can cover things.
1. CDR_CONTROL() and a hangup. I suggest making sure that any CDR's
created
get closed in the hangup extension (h), at least, if they are cut
short.
2. when you end a CDR_CONTROL() cdr, it gets posted to the backend(s).
3. There will no longer be a string of CDR structures on a channel.
(ForkCDR was
the only mechanism that made the list. So, no LOCK flag, no list. Just
one
CDR. It horribly complicated things, and as your bug points out, never
was
fully implemented.
4. CDR field races. You have a good point. We could easily initialize
several
CDR fields from the channel/cdr on initialization. That would save
dialplan
statements and reduce races.
5. Adding arg options to ForkCDR in 1.4; I gave this some thought, and I
don't
think we can get away with it.
Because it's released, we really have no excuse for modifying an app
interface. It's an enhancement, no matter how useful or badly needed.
And I don't see ForkCDR in trunk; So, let's see if CDR_CONTROL() or
dialplan
logic can get the needed effect.
6. Set of variables == CDR; no, not really. It's a real live CDR, just
not
attached to a channel; No automatic handling at all. Purely a function
of the dialplan; end== posted to backends.
Issue History
Date Modified Username Field Change
======================================================================
09-14-07 14:10 murf Note Added: 0070572
======================================================================
More information about the asterisk-bugs
mailing list