[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