[OpenSIPS-Users] Asynchronous processing in OpenSIPS 1.12

Bogdan-Andrei Iancu bogdan at opensips.org
Wed Sep 3 09:31:36 CEST 2014


Brett,

The timeout for the async ops will be control by the reactor (like 
triggering the timouts) and set by the module starting the op - like the 
rest_client module will set the timeout for the HTTP rest queries.

The processes are not suspended, just the context of an execution. So at 
the end is just about memory - of course there should be a safety net to 
limit the number of suspended async I/Os per type of I/O. Each type of 
I/O op will have a priority in relation to other I/O ops (like timer 
jobs higher than aysnc resume, async resume higher than reading from 
network).

An async I/O is done during handling a SIP message, so it does not 
interfere with TM timers (which are activated only when sending the 
traffic out). otherwise the dialogs and transactions (with their 
eco-system) are not affected at all.

Regards,

Bogdan-Andrei Iancu
OpenSIPS Founder and Developer
http://www.opensips-solutions.com

On 02.09.2014 19:53, Brett Nemeroff wrote:
> I'm curious what the failure cases look like here..
> What happens when your "long running db query" is excessively long? Is 
> there a timeout? What happens if you have 1000s of backed up 
> processes. Would love to see some sort of fifo command somehow 
> quantify the effectiveness of it being async. Not sure how to say this 
> right. But I'd like to be able to query a value that says either "bg 
> tasks are being handled in a timely fashion" or "bg tasks are so slow 
> it's starting to affect performance"
>
> Of course, these are not "normal" cases... wondering how "graceful" we 
> can allow it to be broken. I assume that the context saving will take 
> X memory and eventually it will fill up? Where is that memory stored? 
> How is it allocated? How much memory do you need for each backgrounded 
> task?
>
> Another thought..  how are dialog/transaction "variables" handled? 
> AVPs? "vars"? How are dialogs handled across such an operation? What 
> about standard (SIP) timer operations? What about dialog fr_timer and 
> fr_inv_timer, do they continue to run?
>
> Thanks, really looking forward to async!
> -Brett
>
>
>
> On Tue, Sep 2, 2014 at 11:26 AM, Răzvan Crainea <razvan at opensips.org 
> <mailto:razvan at opensips.org>> wrote:
>
>     Hi all,
>
>     Among the last discussion of the last IRC meeting[1] was related
>     to Asynchronous processing in OpenSIPS script - we want to add a
>     new mechanism that allows you to perform asynchronous operations
>     (such as DB , REST or exec operations) directly from the script.
>     Using this feature will increase the throughput of OpenSIPS, since
>     the SIP processes will no longer be stuck waiting for I/O responses.
>
>     When reaching an asynchronous operation, the SIP message
>     processing will be stopped, and resumed in a different script
>     route. In the script, this should be reflected something like this:
>
>     route {
>         ...
>         # other non I/O operations
>         async(my_resume_route) {
>             avp_db_query("SELECT setid from subscribers where username
>     = '$fU'", "$avp(setid)");
>         }
>         # we never get here.
>         exit;
>     }
>
>     route[my_resume_route] {
>         xlog("The set used by the callee is $avp(setid)\n");
>         # continue message processing
>     }
>
>     Only the functions that are used in an "async" block will be ran
>     asynchronously. If the function does not support async processing,
>     it will block waiting for the response and resume in the route
>     indicated by the "async" block - so the scripting experience will
>     be the same even if the async OP could not be done.
>     In order to resume the processing in a different route, we need to
>     store a context of the message. This will be done using the
>     transaction module[2]. If this module is not used, the
>     asynchronous mechanism will not work.
>
>     lirakis suggested to have different processes that waits for the
>     asynchronous I/O responses and continues the processing. However,
>     we think having the SIP worker processes resume the operations
>     will behave better, since we'll have fewer processes and we won't
>     loose time with context switches.
>
>     How do you see this feature? How would you like to use it? Feel
>     free to contribute with any input you find suitable!
>
>     [1] http://www.opensips.org/Community/IRCmeeting20140827
>     [2] http://www.opensips.org/html/docs/modules/1.12.x/tm
>
>     Best regards,
>
>     -- 
>     Răzvan Crainea
>     OpenSIPS Solutions
>     www.opensips-solutions.com <http://www.opensips-solutions.com>
>
>
>     _______________________________________________
>     Users mailing list
>     Users at lists.opensips.org <mailto:Users at lists.opensips.org>
>     http://lists.opensips.org/cgi-bin/mailman/listinfo/users
>
>
>
>
> _______________________________________________
> Users mailing list
> Users at lists.opensips.org
> http://lists.opensips.org/cgi-bin/mailman/listinfo/users

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.opensips.org/pipermail/users/attachments/20140903/d10ef11a/attachment-0001.htm>


More information about the Users mailing list