[OpenSIPS-Users] lua_exec in timer route - OpenSIPS 3.1

Mark Allen mark at allenclan.co.uk
Wed Dec 23 16:23:45 EST 2020


Your right Johan! :-D

For info  - I do see an error in the log...

TIMER_ROUTE: get data
ERROR:core:parse_from_header: bad msg or missing FROM header
ERROR:core:pv_get_from_attr: cannot parse From header
Message info: <null>, <null>, <null>, DUMMY

...where "Message info" comes from: xlog("Message info: $fU, $tU, $td,
$rm");

However, I've had multiple timers kicking off LUA scripts all running for a
while now and I've not seen any problems. YMMV


On Wed, 23 Dec 2020 at 15:17, johan <johan at democon.be> wrote:

> then you are fine :-)
> On 4/12/2020 09:26, Mark Allen wrote:
>
> Interestingly - TIMER already seems to use some form of dummy message to
> avoid problems. If I add the line...
>
>     timer_route[checkNodeCache, 5] {
>         xlog("TIMER_ROUTE");
>         xlog("Message info: $fU, $tU, $td, $rm");
>
> ...what is logged is...
>
>     Message info: <null>, <null>, <null>, DUMMY
>
> ...so LUA will be passed a (very simple) message it seems
>
>
>
> On Thu, 3 Dec 2020 at 15:57, Mark Allen <mark at allenclan.co.uk> wrote:
>
>> LOL! Yes, I did understand, but it is an important distinction.
>>
>> On Thu, 3 Dec 2020 at 15:53, Ben Newlin <Ben.Newlin at genesys.com> wrote:
>>
>>> It seems like you read that as I intended, but I want to clarify I meant
>>> to say I *wouldn’t* feel safe assuming that this would work long term.
>>>
>>>
>>>
>>> Ben Newlin
>>>
>>>
>>>
>>> *From: *Users <users-bounces at lists.opensips.org> on behalf of Mark
>>> Allen <mark at allenclan.co.uk>
>>> *Date: *Thursday, December 3, 2020 at 10:40 AM
>>> *To: *OpenSIPS users mailling list <users at lists.opensips.org>
>>> *Subject: *Re: [OpenSIPS-Users] lua_exec in timer route - OpenSIPS 3.1
>>>
>>> > a memory leak or segfault after continued use
>>>
>>>
>>>
>>> Yes - it would be useful to know if this could result in problems down
>>> the road. Not sure how else I can run a timed job if I can't use the TIMER
>>> route though.
>>>
>>>
>>>
>>> On Thu, 3 Dec 2020 at 15:17, Ben Newlin <Ben.Newlin at genesys.com> wrote:
>>>
>>> Mark,
>>>
>>>
>>>
>>> My concern was less about you using the message object in LUA as it was
>>> with how robust OpenSIPS’ handling is if a message if expected to be there
>>> and memory is allocated and passed but there is no actual message due to
>>> this “trick”. Without digging into the actual code, I would feel safe
>>> assuming that this wouldn’t result in a memory leak or segfault after
>>> continued use.
>>>
>>>
>>>
>>> Ben Newlin
>>>
>>>
>>>
>>> *From: *Users <users-bounces at lists.opensips.org> on behalf of Mark
>>> Allen <mark at allenclan.co.uk>
>>> *Date: *Thursday, December 3, 2020 at 10:04 AM
>>> *To: *OpenSIPS users mailling list <users at lists.opensips.org>
>>> *Subject: *Re: [OpenSIPS-Users] lua_exec in timer route - OpenSIPS 3.1
>>>
>>> Thanks, Johan and Ben.
>>>
>>>
>>>
>>> Johan:
>>>
>>> I tried your suggested approach and (much to my surprise) it worked both
>>> for lua_exec and cache_remove_chunk. Thanks for that.
>>>
>>>
>>>
>>> Ben:
>>>
>>> I understand what you are saying for LUA. However, I think that if it's
>>> made clear that you do not have access to (or should not use) the message,
>>> the results should be predictable. It seems to work for me.
>>>
>>>
>>>
>>> My LUA function is reading in external data and doesn't make use of the
>>> message at all. Perhaps there might be a way to provide an empty message to
>>> LUA if it's invoked in TIMER  routes to avoid possible problems? LUA and
>>> Python offer powerful extendablity to OpenSIPS, so it seems to me to be a
>>> bit of a shame to limit their use at startup or in timers if all that's
>>> needed is a tweak - or even just a warning in the documentation.
>>>
>>>
>>>
>>> As for the "cache_remove_chunk" - it's less clear why TIMER couldn't run
>>> this in a straightforward way as it's not dependent on the current message
>>> as far as I understand it.
>>>
>>>
>>>
>>>
>>>
>>> If anybody wants to try doing this - here's an example that worked for
>>> me in OpenSIPS 3.1...
>>>
>>>
>>>
>>>     timer_route[refreshNodes, 30] {
>>>         route(remove_chunk);
>>>         route(cache_reload);
>>>
>>>     }
>>>
>>>
>>>
>>>
>>>
>>>
>>>
>>>     route[remove_chunk] {
>>>         cache_remove_chunk("validNodes", "*");
>>>     }
>>>
>>>     route[cache_reload] {
>>>         lua_exec("getValidNodes");
>>>         for ($var(node) in $(avp(validNodes)[*])) {
>>>             cache_store("local:validNodes", "$var(node)", "true");
>>>         }
>>>     }
>>>
>>>
>>>
>>>
>>>
>>>
>>>
>>> On Thu, 3 Dec 2020 at 14:20, Ben Newlin <Ben.Newlin at genesys.com> wrote:
>>>
>>> I wouldn’t recommend trying to bypass the restriction in this way. Both
>>> the lua and python exec modules were designed to operate on a SIP message,
>>> which is why they can only be called from routes that process messages.
>>> Calling it from time_route where there is no message, even if you could get
>>> it to work, could have unexpected and unpleasant results.
>>>
>>>
>>>
>>> From LUA module doc for lua_exec: “Calls a Lua function with passing it
>>> the current SIP message” [1].
>>>
>>>
>>>
>>> [1] https://opensips.org/docs/modules/3.1.x/lua.html#idp5933680
>>>
>>>
>>>
>>> Ben Newlin
>>>
>>>
>>>
>>> *From: *Users <users-bounces at lists.opensips.org> on behalf of Johan De
>>> Clercq <Johan at democon.be>
>>> *Date: *Thursday, December 3, 2020 at 6:55 AM
>>> *To: *OpenSIPS users mailling list <users at lists.opensips.org>
>>> *Subject: *Re: [OpenSIPS-Users] lua_exec in timer route - OpenSIPS 3.1
>>>
>>> what you can try, is to call another route in the time route.
>>>
>>> And then in that route, you execute the lua script.
>>>
>>> maybe (just a myabe) that will work.
>>>
>>>
>>>
>>> wkr,
>>>
>>>
>>>
>>> Op do 3 dec. 2020 om 12:23 schreef Mark Allen <mark at allenclan.co.uk>:
>>>
>>> Hi Johan
>>>
>>>
>>>
>>> In the documentation for 3.1 lua module - TIMER_ROUTE is not one of the
>>> routes available to lua_exec. If I include it in a TIMER route, OpenSIPS
>>> fails to start with syntax error and the log error is:
>>>
>>>
>>>
>>>     CRITICAL:core:yyerror: parse error in
>>> /etc/opensips/opensips.cfg:265:19-20: Command <lua_exec> cannot be used in
>>> the block#012
>>>
>>>
>>>
>>> If I move the lua_exec command into main route{ it works fine
>>>
>>>
>>>
>>> I also encounter the problem running a cache_remove_chunk in a TIMER
>>> route although the documentation doesn't say that it's not valid for TIMER
>>> route. It fails on startup with the error:
>>>
>>>
>>>
>>>     CRITICAL:core:yyerror: parse error in
>>> /etc/opensips/opensips.cfg:266:33-34: Command <cache_remove_chunk> cannot
>>> be used in the block#012
>>>
>>>
>>>
>>> Again - if I run the command in main route{ the command works fine
>>>
>>>
>>>
>>>
>>>
>>> cheers,
>>>
>>>
>>>
>>> Mark
>>>
>>>
>>>
>>> On Thu, 3 Dec 2020 at 11:01, Johan De Clercq <Johan at democon.be> wrote:
>>>
>>> It for sure does not run in async mode.
>>>
>>> Did you try executing a script in timer route ?
>>>
>>> What's the output in the log ?
>>>
>>>
>>>
>>> Op do 3 dec. 2020 om 11:56 schreef Mark Allen <mark at allenclan.co.uk>:
>>>
>>> Is there a way to run a lua_exec from a timer route?
>>>
>>> _______________________________________________
>>> Users mailing list
>>> Users at lists.opensips.org
>>> http://lists.opensips.org/cgi-bin/mailman/listinfo/users
>>>
>>> _______________________________________________
>>> Users mailing list
>>> Users at lists.opensips.org
>>> http://lists.opensips.org/cgi-bin/mailman/listinfo/users
>>>
>>> _______________________________________________
>>> Users mailing list
>>> Users at lists.opensips.org
>>> http://lists.opensips.org/cgi-bin/mailman/listinfo/users
>>>
>>> _______________________________________________
>>> Users mailing list
>>> Users at lists.opensips.org
>>> http://lists.opensips.org/cgi-bin/mailman/listinfo/users
>>>
>>> _______________________________________________
>>> Users mailing list
>>> Users at lists.opensips.org
>>> http://lists.opensips.org/cgi-bin/mailman/listinfo/users
>>>
>>> _______________________________________________
>>> Users mailing list
>>> Users at lists.opensips.org
>>> http://lists.opensips.org/cgi-bin/mailman/listinfo/users
>>>
>>
> _______________________________________________
> Users mailing listUsers at lists.opensips.orghttp://lists.opensips.org/cgi-bin/mailman/listinfo/users
>
> _______________________________________________
> Users mailing list
> Users at lists.opensips.org
> http://lists.opensips.org/cgi-bin/mailman/listinfo/users
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.opensips.org/pipermail/users/attachments/20201223/21390525/attachment-0001.html>


More information about the Users mailing list