[SR-Users] Multiple async operations in single transaction fail (using http_async_client)

Daniel-Constantin Mierla miconda at gmail.com
Mon May 30 10:55:26 CEST 2016


Hello,

I saw you opened an issue on github on this topic -- let's continue
there the discussion.

Cheers,
Daniel


On 26/05/16 19:05, Thom Seddon wrote:
> Hi All,
>
> I've been doing some work this week with the new http_async_client
> module, it seems that with it's default behaviour it's not possible to
> execute another async query in the block immediately following the
> response, for example the following config:
>
> request_route {
>   if (!t_newtran()) {
>       sl_reply_error();
>       exit();
>   }
>   http_async_query("http://localhost:8090/req_1", '{"user":"$fU"}',
> "REQ_1");
> }
>
> route[REQ_1] {
>   xlog("L_INFO", "route[REQ_1]: INIT\n");
>   if ($http_ok) {
>     xlog("L_INFO", "route[REQ_1]: status $http_rs\n");
>     xlog("L_INFO", "route[REQ_1]: Sending REQ_2\n");
>     http_async_query("http://localhost:8090/req_2", '{"user":"$fU"}',
> "REQ_2");
>   } else {
>     xlog("L_INFO", "route[REQ_1]: error  $http_err)\n");
>   }
> }
>
> route[REQ_2] {
>   xlog("L_INFO", "route[REQ_2]: INIT\n");
>   if ($http_ok) {
>     xlog("L_INFO", "route[REQ_2]: status $http_rs\n");
>   } else {
>     xlog("L_INFO", "route[REQ_2]: error  $http_err)\n");
>   }
> }
>
> Generates the following error:
>
> 10(11832) INFO: <script>: route[REQ_1]: INIT
> 10(11832) INFO: <script>: route[REQ_1]: status 200
> 10(11832) INFO: <script>: route[REQ_1]: Sending REQ_2
> 10(11832) WARNING: tm [t_suspend.c:186]: t_continue(): transaction is
> not suspended [53195:560306836]
>
> Looking at the source, http_async_client calls t_suspend, then goes
> away and performs the request in the background. On response it calls
> t_continue and then this block
> <https://github.com/kamailio/kamailio/blob/4.4/modules/tm/t_suspend.c#L270-L275>
> in t_continue will continue execution, the second query will cause
> http_async_client to call t_suspend whilst sill executing from
> the previous t_continue. Once they query is sent, the first t_continue
> will complete, removing the T_ASYNC_SUSPENDED flag. When the second
> query returns it doesn't find the flag and so fails as shown.
>
> I'm far from an expect on this so would really appreciate some
> pointers, it seems to fundamental to be a race condition in tm but the
> usage in http_async_client seems to match usage in other modules so
> I'm not sure on the best tactic.
> I've tried peppering append_branch and async_route call's in various
> places to no avail.
>
> Full debug log here: http://pastebin.com/raw/rFmm0fmf
>
> Any help appreciated,
>
> *Thom Seddon*
>
>
>
> _______________________________________________
> SIP Express Router (SER) and Kamailio (OpenSER) - sr-users mailing list
> sr-users at lists.sip-router.org
> http://lists.sip-router.org/cgi-bin/mailman/listinfo/sr-users

-- 
Daniel-Constantin Mierla
http://www.asipto.com - http://www.kamailio.org
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-users/attachments/20160530/aa315c21/attachment.html>


More information about the sr-users mailing list