[SR-Users] pseudovariable values written from app_lua sometimes appear incorrect

Daniel-Constantin Mierla miconda at gmail.com
Thu Sep 27 17:19:34 CEST 2012


Hello,

On 9/26/12 9:47 PM, elactrum at jamailca.com wrote:
> Hi,
>
> I am using app_lua to frequently store some data in htable and avp 
> entries, using sr.pv.sets. When I read the values using sr.pv.get 
> immediately after writing them, they seem correct. However, when I 
> read them later from Lua, I have noticed that sometimes the value is 
> incorrect or nil. Am I doing something wrong?
>
> The following code uses rtimer to duplicate the problem on startup, 
> printing the errors to syslog.
>
> Tested on version: kamailio 3.3.1 (i386/linux) 2d0f6f
>
> ###############
> # kamailio.cfg
> ###############
> loadmodule    "pv.so"
> loadmodule    "xlog.so"
> loadmodule    "htable.so"
> loadmodule    "rtimer.so"
> loadmodule    "app_lua"
>
> modparam("htable", "htable", "status=>size=14;autoexpire=0;")
>
> modparam("rtimer", "timer", "name=ta;interval=10;mode=1")
> modparam("rtimer", "exec", "timer=ta;route=LUA_TEST")
>
> # the following path may need to change depending on filesystem setup
> modparam("app_lua", "load", "/etc/kamailio/kamailio.lua")
>
> route
> {
>     route(LUA_TEST);
> }
>
> route[LUA_TEST] {
>
>         $var(lua_test_key) = $(pp{s.toupper}) + "::";
> lua_runstring("htable_test([[status=>$var(lua_test_key)]])");
> lua_runstring("avp_test([[status=>$var(lua_test_key)]])");
>
> }
>
> ----------------
> -- kamailio.lua
> ----------------
> -- Test of sr.pv operations in Lua
>
> function htable_test (namekey)
>     local pvar_prefix = "$sht("..namekey
>     pvar_test(pvar_prefix)
> end
>
> function avp_test ( name )
>     local pvar_prefix = "$avp("..name
>     pvar_test(pvar_prefix)
> end
>
>
> function pvar_test ( pvar_prefix )
>
>     for value = 10000, 10050 do
>         local pvar = pvar_prefix..value..")"
>         --sr.log("info", "Lua attempting to set '"..pvar.."' to value 
> '"..value.."'")
>         sr.pv.sets(pvar, value)
>     end
>
>     for value = 10000, 10050 do
>         -- now we check what was stored
>         local pvar = pvar_prefix..value..")"
>         local checkvar = sr.pv.get(pvar)
>         if ( tostring(checkvar) ~= tostring(value) ) then
>             sr.err(string.format("CHECK: Lua checking pvar '%s' and 
> got value '%s' which is NOT '%s'",
>                 tostring(pvar),
>                 tostring(checkvar),
>                 tostring(value)
>             ))
>         end
>
>     end
> end
> -- end of kamailio.lua

can you provide the log messages? Note that avps are destroyed after 
execution of the rtimer route - avps are attached to 
message/transaction. Hash table values should stay no matter where are set.

Cheers,
Daniel


-- 
Daniel-Constantin Mierla - http://www.asipto.com
http://twitter.com/#!/miconda - http://www.linkedin.com/in/miconda
Kamailio Advanced Training, Berlin, Nov 5-8, 2012 - http://asipto.com/u/kat
Kamailio Advanced Training, Miami, USA, Nov 12-14, 2012 - http://asipto.com/u/katu




More information about the sr-users mailing list