[OpenSIPS-Users] Async DB statement

Bogdan-Andrei Iancu bogdan at opensips.org
Tue Jan 24 10:41:39 EST 2017


Ahmed,

after an async() call, the execution never returns, but it continues 
exclusively via the resume route.

Regards,

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

On 01/24/2017 05:06 PM, Ahmed Munir wrote:
> I mean to say, after calling async statement, somehow it is not 
> routing back the call to the main routing script after post DB query, 
> see e.g. below for the current routing using async;
>
> route [1]{
> ....
>
> if($avp(Outpluseflag) == 0) {
> async(avp_db_query("SELECT Outpulse_number,setid FROM Prefix_data 
> where Program_prefix = '$avp(pg_prefix)'", "$avp(outpluse); 
> $avp(trunkid)"),ob_route_1);
> }
> ..
> }
>
> route[ob_route_1]{
>         $avp(res)=$rc;
>
>         if ($avp(res) > 0) {
>                 cache_store("local", "DID_$tU", "$avp(outpluse)", 60);
>                 cache_store("local", "Trunk_$tU", "$avp(trunkid)", 60);
>
>         }
>
>         $avp(ru)=$(avp(ru){s.substr,1,0});
>
>         #Look for exten and trunk id for the FROM cache Internal 
> number table
>         if(cache_fetch("local", "$tU", $avp(iexten))) {
>                 if(cache_fetch("local", "GroupID_$tU", $avp(igroupid))) {
>                     #$var(flag) = 1;
>                     $avp(flag) = 1;
>                 }
>         }
>
>
> }
>
> At first in route[1], I was setting up 
> '$avp(ru)=$(avp(ru){s.substr,1,0});' and post routing script after 
> async DB statement, but it is not resuming the route from there. As a 
> work around, instead of setting up $avp(ru) and storing variable in 
> cache in route[1], added them in route[ob_route_1] (as example above), 
> it works.
>
> I would like to know, is there way after executing async DB statement 
> (in route[ob_route_1]), we can resume back the route in route[1] or not?
>
> On Tue, Jan 24, 2017 at 9:09 AM, Bogdan-Andrei Iancu 
> <bogdan at opensips.org <mailto:bogdan at opensips.org>> wrote:
>
>     Could you please rephrase / detail your question, as I do not
>     understand what you are asking.
>
>     Thanks,
>
>     Bogdan-Andrei Iancu
>     OpenSIPS Founder and Developer
>     http://www.opensips-solutions.com <http://www.opensips-solutions.com>
>
>     On 01/24/2017 03:44 PM, Ahmed Munir wrote:
>>     Thanks, have been working on this and it is working.
>>     Btw, I would like to know, is there a way to resume route while
>>     using async avp_db_query? As currently setting/declaring another
>>     async route for DB query, looking for resume route in main
>>     routing script.
>>     On Tue, Jan 24, 2017 at 6:45 AM, Bogdan-Andrei Iancu
>>     <bogdan at opensips.org <mailto:bogdan at opensips.org>> wrote:
>>
>>         Hi Ahmed, Note the $rc holds the return code of the LAST
>>         executed statement/instruction/function in the script. In the
>>         first case you do it right by saving the ret code of the
>>         avp_db_query into a separate variable, so you can use it even
>>         later. In the sync script, the $rc, when entering the resume
>>         route, it will hold the return code of the avp_db_query()
>>         function. But the $rc will be changed when doing the xlog(),
>>         the if(), etc...So when you do the last xlog(), the $rc will
>>         have nothing to do with the avp_db_query(). If you need it
>>         later in the script, better save it, as you do in the first
>>         example. Regards,
>>
>>         Bogdan-Andrei Iancu
>>         OpenSIPS Founder and Developer
>>         http://www.opensips-solutions.com
>>         <http://www.opensips-solutions.com>
>>
>>         On 01/20/2017 01:31 AM, Ahmed Munir wrote:
>>>         Hi,
>>>         Currently I'm trying to use async fucntion for avp_db_query.
>>>         The issue I'm facing while using it as not retrieving or
>>>         returning correct return code and not execute later part of
>>>         the routing script. See old & new DB queries;
>>>         Without Async: ---------------------- route[1]{ ...
>>>          if($var(Outpluseflag) == 0) {              
>>>         avp_db_query("SELECT Outpulse_number,setid FROM Prefix_data
>>>         where Program_prefix = '$var(pg_prefix)'", "$avp(outpluse),
>>>         $avp(trunkid)");                 $var(res) = $retcode; # or
>>>         you can just use $retcode!                 xlog("---------
>>>         OB Route 1-1 DB fetched value outpluse -> $avp(outpluse) |
>>>         trunkid -> $avp(trunkid) | Return Code: $rc | Var Res:
>>>         $var(res)-------");                 if ($var(res) > 0) {
>>>                                    cache_store("local", "DID_$tU",
>>>         "$avp(outpluse)", 60);                           
>>>         cache_store("local", "Trunk_$tU", "$avp(trunkid)", 60);
>>>                         }                 #xlog("DB fetched value
>>>         outpluse -> $avp(outpluse) | trunkid -> $avp(trunkid) |
>>>         Return Code -> $var(res)");                 xlog("---------
>>>         OB Route 1-2 DB fetched value outpluse -> $avp(outpluse) |
>>>         trunkid -> $avp(trunkid) | Return Code: $rc | Var Res:
>>>         $var(res)-------"); }
>>>         } With Async: -------------------
>>>         route[1]{
>>>         ...
>>>         if($var(Outpluseflag) == 0) {     
>>>         async(avp_db_query("SELECT Outpulse_number,setid FROM
>>>         Prefix_data where Program_prefix = '$var(pg_prefix)'",
>>>         "$avp(outpluse), $avp(trunkid)"),ob_route_1); } }
>>>         route[ob_route_1]{         xlog("--------- OB Route 1-1 DB
>>>         fetched value outpluse -> $avp(outpluse) | trunkid ->
>>>         $avp(trunkid) | Return Code: $rc-------");         if ($rc >
>>>         0) {                cache_store("local", "DID_$tU",
>>>         "$avp(outpluse)", 60);                cache_store("local",
>>>         "Trunk_$tU", "$avp(trunkid)", 60);         }       
>>>         xlog("--------- OB Route 1-2 DB fetched value outpluse ->
>>>         $avp(outpluse) | trunkid -> $avp(trunkid) | Return Code:
>>>         $rc-------"); }
>>>         The records in xlog I'm getting without using async; Jan 19
>>>         18:05:39 qorblpsisprxyd1 /usr/sbin/opensips[14040]:
>>>         --------- OB Route 1-1 DB fetched value outpluse ->
>>>         6099020000 <tel:%28609%29%20902-0000> | trunkid -> 117 |
>>>         Return Code: 1 | Var Res: 1------- Jan 19 18:05:39
>>>         qorblpsisprxyd1 /usr/sbin/opensips[14040]: --------- OB
>>>         Route 1-2 DB fetched value outpluse -> 6099020000
>>>         <tel:%28609%29%20902-0000> | trunkid -> 117 | Return Code: 1
>>>         | Var Res: 1-------
>>>         Whereas, records in xlog I'm getting using async; Jan 19
>>>         18:10:07 qorblpsisprxyd1 /usr/sbin/opensips[14109]:
>>>         --------- OB Route 1-1 DB fetched value outpluse ->
>>>         6099020000 <tel:%28609%29%20902-0000> | trunkid -> 117 |
>>>         Return Code: 1------- Jan 19 18:10:07 qorblpsisprxyd1
>>>         /usr/sbin/opensips[14109]: --------- OB Route 1-2 DB fetched
>>>         value outpluse -> 6099020000 <tel:%28609%29%20902-0000> |
>>>         trunkid -> 117 | Return Code: 0-------
>>>         Is there is way to properly retain the $retcode/$rc in
>>>         version 2.2.2? Seems like using async return code(s) are not
>>>         properly set or the avp variables are not setting up correct
>>>         using async statement.
>>>         Please advise, if the above async db statement is correct as
>>>         shared in sample above.
>>>         -- 
>>>         Regards, Ahmed Munir Chohan
>>>
>>>         _______________________________________________
>>>         Users mailing list
>>>         Users at lists.opensips.org <mailto:Users at lists.opensips.org>
>>>         http://lists.opensips.org/cgi-bin/mailman/listinfo/users
>>>         <http://lists.opensips.org/cgi-bin/mailman/listinfo/users>
>>
>>     -- 
>>     Regards, Ahmed Munir Chohan
>
> -- 
> Regards, Ahmed Munir Chohan
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.opensips.org/pipermail/users/attachments/20170124/8d70f1aa/attachment.html>


More information about the Users mailing list