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


Thanks,

-Andrew

_______________________________________________
SIP Express Router (SER) and Kamailio (OpenSER) - sr-users mailing list
sr-users@lists.sip-router.org
http://lists.sip-router.org/cgi-bin/mailman/listinfo/sr-users

Reply via email to