[sr-dev] TM changes to support extended async usage
Daniel-Constantin Mierla
miconda at gmail.com
Mon Aug 5 23:07:08 CEST 2013
Hi Jason,
would you make a single patch for tm module out of your branch and send
it over to the list for review? It would be easier to spot the changes...
Thanks,
Daniel
On 8/5/13 11:45 AM, Jason Penton wrote:
> Hi guys..... more specifically, TM experts ;)
>
> I have just committed a tmp branch called tm_async_extensions. We
> noticed with the current async impl, it is not possible to do things
> like forward() and t_relay() in a continued async route block. This is
> mainly because the faked env. created is specifically triggered to be
> a failure route in the continuation code.
>
> We have changed this to execute the route block using the original
> block type when the transaction was suspended (eg REQUEST_ROUTE,
> ON_REPLY, etc). We have also tested using reply blocks (ie suspending
> replies) but that code will come later once everyone is happy that we
> include the current subset of changes to improve normal async REQUEST
> processing.
>
> The current changes require some changes to the main TM structure
> (mainly for 'backing up' state before suspending). There is also a new
> mutex used to prevent multiple concurrent invocations of t_continue
> (previously we were using the reply lock).
>
> It would be great if some TM experts could review the code to ensure
> there are no use cases that we have missed that could break things.
> Daniel I suspect you know TM and its impacts the best, or is there
> someone else we should include?
>
> So far for our use cases, these changes work great. We can do things like:
>
> route[INVITE] {
> t_newtran();
> async_route("INVITERESUME", "10"); #resume transaction in 10
> seconds running route block INVITERESUME
> exit;
> }
>
> route[INVITERESUME] {
> t_relay();
> }
>
> All upstream reply processing is correctly handled, local ACK
> generation and processing works as expected, etc.
>
> The above example may seem absurd (why would we want to delay our
> proxy of an INVITE for 10 seconds????) - Well this is just an easy
> example we use in our test cases. Actually we are using the async
> processing in the IMS code to increase performance when an INVITE for
> example triggers a long running process (like a DIAMETER request to
> get a users profile for example). Using conventional methods (no async
> transactions), the SIP worker process will sit locked up for this time
> (maybe 100's of milliseconds) unnecessarily. We found that using
> t_suspend and t_continue internally in our code improves performance
> significantly. I can see many use cases for the async code to improve
> performance, especially cases where we use backend DB's, memcached,
> radius, diameter, etc before actually "doing SIP routing".....
>
> Any feedback would be greatly appreciated.
>
> Cheers
> Jason
>
>
>
> _______________________________________________
> sr-dev mailing list
> sr-dev at lists.sip-router.org
> http://lists.sip-router.org/cgi-bin/mailman/listinfo/sr-dev
--
Daniel-Constantin Mierla - http://www.asipto.com
http://twitter.com/#!/miconda - http://www.linkedin.com/in/miconda
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.sip-router.org/pipermail/sr-dev/attachments/20130805/f7de6480/attachment.html>
More information about the sr-dev
mailing list