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 <m...@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.new...@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-boun...@lists.opensips.org> on behalf of Mark Allen >> <m...@allenclan.co.uk> >> *Date: *Thursday, December 3, 2020 at 10:40 AM >> *To: *OpenSIPS users mailling list <users@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.new...@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-boun...@lists.opensips.org> on behalf of Mark Allen >> <m...@allenclan.co.uk> >> *Date: *Thursday, December 3, 2020 at 10:04 AM >> *To: *OpenSIPS users mailling list <users@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.new...@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-boun...@lists.opensips.org> on behalf of Johan De >> Clercq <jo...@democon.be> >> *Date: *Thursday, December 3, 2020 at 6:55 AM >> *To: *OpenSIPS users mailling list <users@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 <m...@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 <jo...@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 <m...@allenclan.co.uk>: >> >> Is there a way to run a lua_exec from a timer route? >> >> _______________________________________________ >> 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 >> >> _______________________________________________ >> 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 >> >> _______________________________________________ >> 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 >> >
_______________________________________________ Users mailing list Users@lists.opensips.org http://lists.opensips.org/cgi-bin/mailman/listinfo/users