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

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 | 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 | 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 | trunkid -> 117 | Return Code: 1------- Jan 19 18:10:07 qorblpsisprxyd1 /usr/sbin/opensips[14109]: --------- OB Route 1-2 DB fetched value outpluse -> 6099020000 | 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@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

Reply via email to