Hi members,
I run into a problemm with htable. For user push notifications I need a loop.
So I did the following for a first test:
modparam("htable", "htable", "user=>size=3;autoexpire=5")
...
event_route[htable:mod-init] { xinfo("htable init"); $sht(user=>testkey) = "testvalue"; }
event_route[htable:expired:user] { xinfo("Record expired $shtrecord(key) => $shtrecord(value)"); $sht(user=>$shtrecord(key)) = $shtrecord(value); }
I see the htable init, and I reach Record expired, but only once. The 'new' entry $sht(user=>$shtrecord(key)) = $shtrecord(value); seams not to be re-added, because I never reach the expired event again.
I expected to see cyclic expired events. Also strange: expire is set to 5 seconds I get:
Nov 21 08:34:50 xxx /usr/sbin/kamailio[254662]: INFO: <script>: htable init ... Nov 21 08:35:10 xxx /usr/sbin/kamailio[254671]: INFO: <script>: Record expired testkey => testvalue
If I'm right, this are 20 seconds and not 5.
Any ideas what's wrong?
Best regards
Hello,
check the docs of the module, there is a modparam to set the timer interval, which by default is 20 secods.
Then, to troubleshoot, run with debug=3 and watch the log messages for hints of what happens. Also, dump the htable via rpc to see its content.
Cheers, Daniel
On 21.11.22 08:50, Bernd Krueger-Knauber wrote:
Hi members,
I run into a problemm with htable. For user push notifications I need a loop.
So I did the following for a first test:
modparam("htable", "htable", "user=>size=3;autoexpire=5")
...
event_route[htable:mod-init] { xinfo("htable init"); $sht(user=>testkey) = "testvalue"; }
event_route[htable:expired:user] { xinfo("Record expired $shtrecord(key) => $shtrecord(value)"); $sht(user=>$shtrecord(key)) = $shtrecord(value); }
I see the htable init, and I reach Record expired, but only once. The 'new' entry $sht(user=>$shtrecord(key)) = $shtrecord(value); seams not to be re-added, because I never reach the expired event again.
I expected to see cyclic expired events. Also strange: expire is set to 5 seconds I get:
Nov 21 08:34:50 xxx /usr/sbin/kamailio[254662]: INFO: <script>: htable init ... Nov 21 08:35:10 xxx /usr/sbin/kamailio[254671]: INFO: <script>: Record expired testkey => testvalue
If I'm right, this are 20 seconds and not 5.
Any ideas what's wrong?
Best regards
Kamailio - Users Mailing List - Non Commercial Discussions sr-users@lists.kamailio.org Important: keep the mailing list in the recipients, do not reply only to the sender! Edit mailing list options or unsubscribe: https://lists.kamailio.org/cgi-bin/mailman/listinfo/sr-users
Hi Daniel-Constantin,
I just found this parameter too. I set it now to 10 seconds, but for example a 30 second expire is only executed every 40 seconds.
It looks, that I'm not able to set the same entry again inside of the event_route. Maybe it is deleted after the event_route is executed. There should be a check afterards if the entry is still expired before deleting it. I found an ugly solution: I use 2 identical htables and toggle between them:
event_route[htable:expired:userpush1] { xinfo("[event_route] userpush1 Record expired $shtrecord(key) => $shtrecord(value)"); $sht(userpush2=>$shtrecord(key)) = $shtrecord(value); }
event_route[htable:expired:userpush2] { xinfo("[event_route] userpush2 Record expired $shtrecord(key) => $shtrecord(value)"); $sht(userpush1=>$shtrecord(key)) = $shtrecord(value); }
It works, but it is ugly.
Thank you for your response.
Bernd
Am 21.11.2022 um 11:34 schrieb Daniel-Constantin Mierla:
Hello,
check the docs of the module, there is a modparam to set the timer interval, which by default is 20 secods.
Then, to troubleshoot, run with debug=3 and watch the log messages for hints of what happens. Also, dump the htable via rpc to see its content.
Cheers, Daniel
On 21.11.22 08:50, Bernd Krueger-Knauber wrote:
Hi members,
I run into a problemm with htable. For user push notifications I need a loop.
So I did the following for a first test:
modparam("htable", "htable", "user=>size=3;autoexpire=5")
...
event_route[htable:mod-init] { xinfo("htable init"); $sht(user=>testkey) = "testvalue"; }
event_route[htable:expired:user] { xinfo("Record expired $shtrecord(key) => $shtrecord(value)"); $sht(user=>$shtrecord(key)) = $shtrecord(value); }
I see the htable init, and I reach Record expired, but only once. The 'new' entry $sht(user=>$shtrecord(key)) = $shtrecord(value); seams not to be re-added, because I never reach the expired event again.
I expected to see cyclic expired events. Also strange: expire is set to 5 seconds I get:
Nov 21 08:34:50 xxx /usr/sbin/kamailio[254662]: INFO: <script>: htable init ... Nov 21 08:35:10 xxx /usr/sbin/kamailio[254671]: INFO: <script>: Record expired testkey => testvalue
If I'm right, this are 20 seconds and not 5.
Any ideas what's wrong?
Best regards
Kamailio - Users Mailing List - Non Commercial Discussions sr-users@lists.kamailio.org Important: keep the mailing list in the recipients, do not reply only to the sender! Edit mailing list options or unsubscribe: https://lists.kamailio.org/cgi-bin/mailman/listinfo/sr-users
Hello,
the event route is executed on timer, and that can happen later that the item is actually expired. The reason is not to stress the access to the htable, looping every second. But you can set the timer interval to 1, if you really need it.
As it is designed now, practically the item must no longer be in the htable once the event route is executed. You can make a PR if you need a different behaviour, ideally controlled by a modparam/option, if it changes the current behaviour.
Also, if you just need to run some tasks periodically, maybe rtimer module is more suitable.
Cheers, Daniel
On 21.11.22 11:41, Bernd Krueger-Knauber wrote:
Hi Daniel-Constantin,
I just found this parameter too. I set it now to 10 seconds, but for example a 30 second expire is only executed every 40 seconds.
It looks, that I'm not able to set the same entry again inside of the event_route. Maybe it is deleted after the event_route is executed. There should be a check afterards if the entry is still expired before deleting it. I found an ugly solution: I use 2 identical htables and toggle between them:
event_route[htable:expired:userpush1] { xinfo("[event_route] userpush1 Record expired $shtrecord(key) => $shtrecord(value)"); $sht(userpush2=>$shtrecord(key)) = $shtrecord(value); }
event_route[htable:expired:userpush2] { xinfo("[event_route] userpush2 Record expired $shtrecord(key) => $shtrecord(value)"); $sht(userpush1=>$shtrecord(key)) = $shtrecord(value); }
It works, but it is ugly.
Thank you for your response.
Bernd
Am 21.11.2022 um 11:34 schrieb Daniel-Constantin Mierla:
Hello,
check the docs of the module, there is a modparam to set the timer interval, which by default is 20 secods.
Then, to troubleshoot, run with debug=3 and watch the log messages for hints of what happens. Also, dump the htable via rpc to see its content.
Cheers, Daniel
On 21.11.22 08:50, Bernd Krueger-Knauber wrote:
Hi members,
I run into a problemm with htable. For user push notifications I need a loop.
So I did the following for a first test:
modparam("htable", "htable", "user=>size=3;autoexpire=5")
...
event_route[htable:mod-init] { xinfo("htable init"); $sht(user=>testkey) = "testvalue"; }
event_route[htable:expired:user] { xinfo("Record expired $shtrecord(key) => $shtrecord(value)"); $sht(user=>$shtrecord(key)) = $shtrecord(value); }
I see the htable init, and I reach Record expired, but only once. The 'new' entry $sht(user=>$shtrecord(key)) = $shtrecord(value); seams not to be re-added, because I never reach the expired event again.
I expected to see cyclic expired events. Also strange: expire is set to 5 seconds I get:
Nov 21 08:34:50 xxx /usr/sbin/kamailio[254662]: INFO: <script>: htable init ... Nov 21 08:35:10 xxx /usr/sbin/kamailio[254671]: INFO: <script>: Record expired testkey => testvalue
If I'm right, this are 20 seconds and not 5.
Any ideas what's wrong?
Best regards
Kamailio - Users Mailing List - Non Commercial Discussions sr-users@lists.kamailio.org Important: keep the mailing list in the recipients, do not reply only to the sender! Edit mailing list options or unsubscribe: https://lists.kamailio.org/cgi-bin/mailman/listinfo/sr-users
-- EDNT GmbH Werner-von-Siemens-Strasse 7 64625 Bensheim www.ednt.de
Registergericht: Darmstadt Registernummer: 24972
Geschäftsführerin: Kerstin Knapp