[SR-Users] pseudovariable values written from app_lua sometimes appear incorrect
elactrum at jamailca.com
elactrum at jamailca.com
Mon Oct 8 17:29:11 CEST 2012
On 2012-10-08 09:15, Daniel-Constantin Mierla wrote:
> 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.
>
Tested and duplicated the same behavior on the following nightly
builds:
Ubuntu (12.04.1) kamailio, kamailio-lua-modules i386
3.3.1+git20121008+precise1
Ubuntu (12.04.1) kamailio, kamailio-lua-modules i386
3.3.1+git20121008+wheezy1
> I will analyze properly the details you sent in the near future.
>
Thanks. I am looking forward to it.
-Andrew
> 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
>>
More information about the sr-users
mailing list