[OpenSIPS-Users] PATCH: avp_db_query() return codes

Bogdan-Andrei Iancu bogdan at opensips.org
Thu Mar 3 09:46:46 CET 2011

Hi John,

Following our chat on IRC, I would like to update also the list here.

As said, currently we are looking into the possibility to extend the 
mechanism of error handling in OpenSIPS - the idea is, instead of keep 
testing all script functions for error cases, we should have an 
automatic way of catching and handling errors from script.

Testing functions (in script) one by one is not a nice an scalable 
approach, considering that all functions may return:
    - true for success
    - false for failure in processing
    - false for internal error
So for each function we need to handle by hand all possible return codes 
to catch the errors. I think this is not an option.

What I want to explore (topic for next week IRC meeting) is a generic 
system of catching and handling internal errors. Options are:
    1) extending the error route to be trigger not only by parsing 
errors, but also by other classes of internal errors (memory stuff, DB 
stuff, etc)
    2) adding a "try {} catch ; " instruction to divert execution to 
anther route when an internal error is triggered.


John Khvatov wrote:
> Hello all.
> I wrote a small patch for avpops module:
> http://dev.sgu.ru/pub/0001-avp_db_query-improved-error-reporting.patch
> Current implementation of avp_db_query returns -1 on internal error or empty result. Thus, current function interface does not allow to write script with storage error handling.
> Patched avp_db_query() returns:
> -3 on internal error
> -1 on empty result
> 1 on success
> With patched avp_db_query() we can write following logic in opensips.cfg:
> avp_db_query("SELECT 1 WHERE false", "$avp(s:name)")
> if ($retcode == -3) {
>     xlog("Error while querying database. Handle error.");
> }
> else if ($retcode == -1) {
>     xlog("Handle empty result.");
> }
> else {
>     xlog("Handle result");
> }
> I've tested this patch with 1.6.4.
> Please, review my patch and apply to upstream.

Bogdan-Andrei Iancu
OpenSIPS eBootcamp - 28th February 2011
OpenSIPS solutions and "know-how"

More information about the Users mailing list