[sr-dev] git:master: modules_k/presence: Improved handling of retransmitted SUBSCRIBE requests

Daniel-Constantin Mierla miconda at gmail.com
Mon Jan 30 18:40:30 CET 2012


Hello,

On 1/30/12 6:35 PM, Peter Dunkley wrote:
> Hi,
>
> Any retransmission will cause the problem, so anyone using UDP over 
> the Internet to a Kamailio presence server where there is occasional 
> packet-loss will see it.  It was just first noticed here under heavy load.
>
> By creating a new transaction and absorbing the retransmissions, do 
> you mean calling t_newtran()/t_release() when the SUBSCRIBE is received?

yes, like in default config, using t_newtran() before handling the 
subscribe. t_check_trans() is used to figure out of there is already a 
transaction for that request and absorbs the request if it is 
retransmissions.

Not sure t_release() is explicitly needed anymore, Andrei did some work 
long time ago in this area, iirc, but if used it is harmless, so it is 
still in the default config.

Cheers,
Daniel

>
> If so I didn't think of that.  It'd make sense to do that too.  I 
> think the presence module should cope with retransmissions (especially 
> as we need it to cope in a multi-server environment with 
> load-balancers/fail-over and a shared database).  But if using 
> t_newtran()/t_release() will handle retransmissions in the normal case 
> it should help reduce the load on the database.
>
> Thanks,
>
> Peter
>
>
> On Mon, 2012-01-30 at 18:26 +0100, Daniel-Constantin Mierla wrote:
>> Hello,
>>
>> it can be held for next minor release to be tested more, if you feel 
>> it is better (we have to include something there as well :-) ). From 
>> commit log I understood is happening usually under RLS heavy load 
>> with retransmissions, does not help creating the transaction and 
>> absorbing the retransmissions with tm?
>>
>> Cheers,
>> Daniel
>>
>> On 1/30/12 6:19 PM, Peter Dunkley wrote:
>>> Hello,
>>>
>>> I believe that this bug also affects the 3.2 branch, but the change 
>>> is quite big and with the next release of 3.2 due tomorrow I thought 
>>> it best to hold off "cherry-pick"ing it until after the release.  
>>> That is, unless anyone else thinks it should go in there?
>>>
>>> Regards,
>>>
>>> Peter
>>>
>>> On Mon, 2012-01-30 at 18:16 +0100, Peter Dunkley wrote:
>>>> Module: sip-router
>>>> Branch: master
>>>> Commit: e6a50c5c0957a5ad3e08e57ede5be775a41ac24f
>>>> URL:http://git.sip-router.org/cgi-bin/gitweb.cgi/sip-router/?a=commit;h=e6a50c5c0957a5ad3e08e57ede5be775a41ac24f
>>>>
>>>> Author: pd<peter.dunkley at crocodile-rcs.com  <mailto:peter.dunkley at crocodile-rcs.com>>
>>>> Committer: pd<peter.dunkley at crocodile-rcs.com  <mailto:peter.dunkley at crocodile-rcs.com>>
>>>> Date:   Mon Jan 30 17:06:42 2012 +0000
>>>>
>>>> modules_k/presence: Improved handling of retransmitted SUBSCRIBE requests
>>>>
>>>> - handle_subscribe() doesn't handle retransmitted SUBSCRIBEs properly. This was
>>>>    noticed with back-end SUBSCRIBEs from RLS under heavy load (also tried TCP
>>>>    here but under-load this caused a different set of problems with buffer
>>>>    sizes and buffers taking too long to process).
>>>> - Although this was originally observed with RLS back-end SUBSCRIBEs it
>>>>    appears to be a general issue when UDP is used.
>>>> - There were two main problems:
>>>>    1) On an un-SUBSCRIBE the record in the hash-table or DB will be removed.  If
>>>>       the un-SUBSCRIBE is retransmitted there is no record to be found and
>>>>       handle_subscribe() fails.
>>>>    2) After fixing 1, and on re-SUBSCRIBE, remote CSeq's with lower than
>>>>       expected values cause failures.  This can also happen when there are
>>>>       retransmissions.
>>>> - The fix was to catch both these cases and treat them as a special class of
>>>>    error.  In these two cases and when the protocol is UDP, a correct-looking
>>>>    2XX response is sent, but no further processing (database updates, sending
>>>>    NOTIFY, and so on) is performed on the SUBSCRIBE request.
>>>> - Also modified the query in get_database_info() to just use Call-ID, To-tag,
>>>>    and From-tag for dialog matching (so it duplicates the query from
>>>>    get_stored_info()) as the query that was there looked a little aggressive.
>>>>
>
>
> -- 
> Daniel-Constantin Mierla -- http://www.asipto.com
> http://linkedin.com/in/miconda -- http://twitter.com/miconda
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.sip-router.org/pipermail/sr-dev/attachments/20120130/98160804/attachment.htm>


More information about the sr-dev mailing list