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 <raz...@opensips.org
<mailto:raz...@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@lists.opensips.org <mailto:Users@lists.opensips.org>
http://lists.opensips.org/cgi-bin/mailman/listinfo/users
_______________________________________________
Users mailing list
Users@lists.opensips.org
http://lists.opensips.org/cgi-bin/mailman/listinfo/users
_______________________________________________
Users mailing list
Users@lists.opensips.org
http://lists.opensips.org/cgi-bin/mailman/listinfo/users