[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