[asterisk-dev] [Code Review] app_voicemail: fix problem where we kill the msg_id of a message when changing its folder in odbc storage.

jrose reviewboard at asterisk.org
Fri Nov 30 13:05:35 CST 2012


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

(Updated Nov. 30, 2012, 1:05 p.m.)


Review request for Asterisk Developers, Mark Michelson, Matt Jordan, and kmoore.


Changes
-------

Change the msg_id generation to something that can work uniquely with copy.

New format is A-B-C

A is a hash of the system name defined in asterisk.conf. Technically this might not be unique even on two systems with a different system name, in which case... crap. How unlucky is that? Still, using the actual system name would mean we'd have to allow for up to 256 characters and the odds are miniscule of actually having a collision on a production system. This will appear currently as an 8 character hex value.

B is the unsigned long form of the epoch in which the msg_id is generated. This is the longest part of the id and could potentially hit as many as 20 characters. At least, I think that's the upper bound on a 64 bit OS. It might be prodent to trim this down a bit somewhow.

C is obtained via an protected value that should only be touched with the ast_atomic_fetchadd_int (to ensure safety when using from different threads). It is also an 8 character hex value.

So that should be 38 characters all together when B is at the upper bound... which shouldn't occur for a considerable amount of time.

All code that previously generated the msg_id inline now call a signle generate_msg_id function. COPY now uses this msg_generate_id function and generates a completely fresh ID when copying.


Summary
-------

When a message is moved between folders (such as after listening to new messages, they are switched to the old messages folder), the msg_id field added in Asterisk 11 isn't copied. This patch simply adds that field to what is copied in the odbc COPY function and appears to solve the problem.


This addresses bug ASTERISK-20717.
    https://issues.asterisk.org/jira/browse/ASTERISK-20717


Diffs (updated)
-----

  /branches/11/apps/app_voicemail.c 376833 

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


Testing
-------

Made messages in a mailbox using app_voicemail. Checked mysql to see the msg_id. Verified an ID was created.
Listened to messages, made sure the COPY function was invoked. Checked mysql again and saw that the IDs were gone.

Applied the patch, repeated the process, the IDs remained intact.


Thanks,

jrose

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.digium.com/pipermail/asterisk-dev/attachments/20121130/b34b305e/attachment.htm>


More information about the asterisk-dev mailing list