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

Daniel-Constantin Mierla miconda at gmail.com
Mon Oct 8 16:15:43 CEST 2012


Hello,

can you test with latest version in 3.3.x series (from git branch or at 
least the packages for 3.3.1) -- there were many fixes since 3.3.0 was 
released -- just to be sure we don't hunt fixed issues.

I will analyze properly the details you sent in the near future.

Cheers,
Daniel

On 10/5/12 7:54 PM, elactrum at jamailca.com wrote:
> On 2012-09-27 11:05, elactrum at jamailca.com wrote:
>> On 2012-09-27 10:19, Daniel-Constantin Mierla wrote:
>>> 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?
>>
>> Sorry, I should have included them with the initial posting. I have
>> attached an example of the first seven executions of rtimer after a
>> fresh startup. Each startup of kamailio results in slightly different
>> error values, but the pattern seems similar.
>>
>> Please let me know if it would be good to send more logs or anything 
>> else.
>>
>>
>>> 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.
>>
>> Thanks for the reminder. I think in this case the test is valid,
>> though, since the avp values are written and read within a single
>> rtimer route.
>>
>>>
>>> Cheers,
>>> Daniel
>>
>> Thanks for the help!
>>
>> -Andrew
>
>
> I have now duplicated this on the following systems:
>
> Alpine Linux (2.4.5) - kamailio-3.3.0-r0 at edge
> Ubuntu (12.04.1) - kamailio-3.3.0+precise1
> Ubuntu (12.04.1) - kamailio-3.3.0+wheezy1
>
>
> Only certain pseudovariables are affected:
>
> sr.pv.sets("$sht(name=>key)") fails
> sr.pv.sets("$avp(name)") fails
> sr.pv.sets("$xavp(name)") fails
> sr.pv.sets("$shv(name)") works
> sr.pv.sets("$var(name)") works
>
> Do you need any more information to track this problem?
>
>
> Thanks,
>
> -Andrew
>

-- 
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