Hello,
I have 2 kam instances using one shared database and both kam servers running the same routing logic code. Kamailio servers are configured to use the same database as dialog backend.
I am limiting the concurrent dialogs in the following way but it seems that kamailio is using its own memory to read profile size rather than the db. Second kam is not aware of the dialog profiles that the first kam wrote to the shared db. Is there a way to get multiple kam instances to read profile size from the same database when calling the get_profile_size function?
modparam("dialog", "profiles_with_value", "concurrent_calls") modparam("dialog", "dlg_flag", 4) modparam("dialog", "db_url", DBURL) modparam("dialog", "db_mode", 1)
route[LIMIT_CALLS] {
if (!dlg_isflagset("1")) { # $td – gateways, $fu - user if (get_profile_size("concurrent_calls", "$fu", "$avp(calls)")) { if ($avp(calls) >= 3) { xlog("L_INFO", "Concurrent calls $fu at limit"); send_reply("503", "Calls limit reached"); exit; } else { dlg_manage(); dlg_setflag("1"); set_dlg_profile("concurrent_calls", "$fu"); } } } }
Cheers, Olli
On Sun, Sep 29, 2019 at 11:03:47AM +0300, Olli Attila wrote:
modparam("dialog", "profiles_with_value", "concurrent_calls") modparam("dialog", "dlg_flag", 4) modparam("dialog", "db_url", DBURL) modparam("dialog", "db_mode", 1)
Have you tested with a lower value of https://kamailio.org/docs/modules/5.1.x/modules/dialog.html#dialog.p.update_... I have it set to 5, but for some reason I'm not using get_profile_size
For inbound: $var(maxchannels) = 0; sql_xquery("ca", "select count(id) as c from dialog where xdata like '%maxchannels%$rU%' and timeout>unix_timestamp()", "ra"); $var(maxchannels)=$xavp(ra=>c); sql_result_free("ra");
For outbound: sql_xquery("ca", "select count(id) as c from dialog where xdata like '%maxchannels%$au%' and timeout>unix_timestamp()", "ra"); $var(maxchannels)=$xavp(ra=>c); sql_result_free("ra");
Pasting the code here I see this isn't that secure since a user foo also gets the number of calls for foobar counted against him! Off to put a " before/after the username.
On 30.09.19 14:55, Daniel Tryba wrote:
On Sun, Sep 29, 2019 at 11:03:47AM +0300, Olli Attila wrote:
modparam("dialog", "profiles_with_value", "concurrent_calls") modparam("dialog", "dlg_flag", 4) modparam("dialog", "db_url", DBURL) modparam("dialog", "db_mode", 1)
Have you tested with a lower value of https://kamailio.org/docs/modules/5.1.x/modules/dialog.html#dialog.p.update_...
The update_period should have no impact when db_mode=1 -- in this case the records are written to database immediately. I think update_period is intended only for db_mode=2.
Cheers, Daniel
I have it set to 5, but for some reason I'm not using get_profile_size
For inbound: $var(maxchannels) = 0; sql_xquery("ca", "select count(id) as c from dialog where xdata like '%maxchannels%$rU%' and timeout>unix_timestamp()", "ra"); $var(maxchannels)=$xavp(ra=>c); sql_result_free("ra");
For outbound: sql_xquery("ca", "select count(id) as c from dialog where xdata like '%maxchannels%$au%' and timeout>unix_timestamp()", "ra"); $var(maxchannels)=$xavp(ra=>c); sql_result_free("ra");
Pasting the code here I see this isn't that secure since a user foo also gets the number of calls for foobar counted against him! Off to put a " before/after the username.
Kamailio (SER) - Users Mailing List sr-users@lists.kamailio.org https://lists.kamailio.org/cgi-bin/mailman/listinfo/sr-users
Just a note, I would suggest to use htable+dmq to do such limits, dialog+dmq has some issues when handling dialog expiration when a node for whatever reason is restarted.. (search GH issues and you will find one with a long thread where Charles explains the reasons: TL;DR: You could end up having inconsistent dialog information with dialog+dmq)
Hope it helps! Joel.
On Tue, Oct 1, 2019 at 01:02 Daniel-Constantin Mierla miconda@gmail.com wrote:
On 30.09.19 14:55, Daniel Tryba wrote:
On Sun, Sep 29, 2019 at 11:03:47AM +0300, Olli Attila wrote:
modparam("dialog", "profiles_with_value", "concurrent_calls") modparam("dialog", "dlg_flag", 4) modparam("dialog", "db_url", DBURL) modparam("dialog", "db_mode", 1)
Have you tested with a lower value of
https://kamailio.org/docs/modules/5.1.x/modules/dialog.html#dialog.p.update_...
The update_period should have no impact when db_mode=1 -- in this case the records are written to database immediately. I think update_period is intended only for db_mode=2.
Cheers, Daniel
I have it set to 5, but for some reason I'm not using get_profile_size
For inbound: $var(maxchannels) = 0; sql_xquery("ca", "select count(id) as c from dialog where xdata like
'%maxchannels%$rU%' and timeout>unix_timestamp()", "ra");
$var(maxchannels)=$xavp(ra=>c); sql_result_free("ra");
For outbound: sql_xquery("ca", "select count(id) as c from dialog where xdata like
'%maxchannels%$au%' and timeout>unix_timestamp()", "ra");
$var(maxchannels)=$xavp(ra=>c); sql_result_free("ra");
Pasting the code here I see this isn't that secure since a user foo also gets the number of calls for foobar counted against him! Off to put a " before/after the username.
Kamailio (SER) - Users Mailing List sr-users@lists.kamailio.org https://lists.kamailio.org/cgi-bin/mailman/listinfo/sr-users
-- Daniel-Constantin Mierla -- www.asipto.com www.twitter.com/miconda -- www.linkedin.com/in/miconda Kamailio Advanced Training, Oct 21-23, 2019, Berlin, Germany -- https://asipto.com/u/kat
Kamailio (SER) - Users Mailing List sr-users@lists.kamailio.org https://lists.kamailio.org/cgi-bin/mailman/listinfo/sr-users
Found it:
https://github.com/kamailio/kamailio/issues/1591#issuecomment-409205552
On Tue, Oct 1, 2019 at 07:15 Joel Serrano joel@textplus.com wrote:
Just a note, I would suggest to use htable+dmq to do such limits, dialog+dmq has some issues when handling dialog expiration when a node for whatever reason is restarted.. (search GH issues and you will find one with a long thread where Charles explains the reasons: TL;DR: You could end up having inconsistent dialog information with dialog+dmq)
Hope it helps! Joel.
On Tue, Oct 1, 2019 at 01:02 Daniel-Constantin Mierla miconda@gmail.com wrote:
On 30.09.19 14:55, Daniel Tryba wrote:
On Sun, Sep 29, 2019 at 11:03:47AM +0300, Olli Attila wrote:
modparam("dialog", "profiles_with_value", "concurrent_calls") modparam("dialog", "dlg_flag", 4) modparam("dialog", "db_url", DBURL) modparam("dialog", "db_mode", 1)
Have you tested with a lower value of
https://kamailio.org/docs/modules/5.1.x/modules/dialog.html#dialog.p.update_...
The update_period should have no impact when db_mode=1 -- in this case the records are written to database immediately. I think update_period is intended only for db_mode=2.
Cheers, Daniel
I have it set to 5, but for some reason I'm not using get_profile_size
For inbound: $var(maxchannels) = 0; sql_xquery("ca", "select count(id) as c from dialog where xdata like
'%maxchannels%$rU%' and timeout>unix_timestamp()", "ra");
$var(maxchannels)=$xavp(ra=>c); sql_result_free("ra");
For outbound: sql_xquery("ca", "select count(id) as c from dialog where xdata like
'%maxchannels%$au%' and timeout>unix_timestamp()", "ra");
$var(maxchannels)=$xavp(ra=>c); sql_result_free("ra");
Pasting the code here I see this isn't that secure since a user foo also gets the number of calls for foobar counted against him! Off to put a " before/after the username.
Kamailio (SER) - Users Mailing List sr-users@lists.kamailio.org https://lists.kamailio.org/cgi-bin/mailman/listinfo/sr-users
-- Daniel-Constantin Mierla -- www.asipto.com www.twitter.com/miconda -- www.linkedin.com/in/miconda Kamailio Advanced Training, Oct 21-23, 2019, Berlin, Germany -- https://asipto.com/u/kat
Kamailio (SER) - Users Mailing List sr-users@lists.kamailio.org https://lists.kamailio.org/cgi-bin/mailman/listinfo/sr-users
Hi Joel,
Thank you, I was reading it yesterday. See this issue https://github.com/kamailio/kamailio/issues/2080#issue-499544483 – in my tests the proxies will expire the dialogs even after a restart. I just tested it again even restarting both proxies a few times.
Cheers,
Henning
-- Henning Westerholt - https://skalatan.de/blog/ Kamailio services - https://skalatan.de/services
From: sr-users sr-users-bounces@lists.kamailio.org On Behalf Of Joel Serrano Sent: Tuesday, October 1, 2019 4:35 PM To: Kamailio (SER) - Users Mailing List sr-users@lists.kamailio.org; miconda@gmail.com Subject: Re: [SR-Users] Call limit through shared database
Found it:
https://github.com/kamailio/kamailio/issues/1591#issuecomment-409205552
On Tue, Oct 1, 2019 at 07:15 Joel Serrano <joel@textplus.commailto:joel@textplus.com> wrote: Just a note, I would suggest to use htable+dmq to do such limits, dialog+dmq has some issues when handling dialog expiration when a node for whatever reason is restarted.. (search GH issues and you will find one with a long thread where Charles explains the reasons: TL;DR: You could end up having inconsistent dialog information with dialog+dmq)
Hope it helps! Joel.
On Tue, Oct 1, 2019 at 01:02 Daniel-Constantin Mierla <miconda@gmail.commailto:miconda@gmail.com> wrote:
On 30.09.19 14:55, Daniel Tryba wrote:
On Sun, Sep 29, 2019 at 11:03:47AM +0300, Olli Attila wrote:
modparam("dialog", "profiles_with_value", "concurrent_calls") modparam("dialog", "dlg_flag", 4) modparam("dialog", "db_url", DBURL) modparam("dialog", "db_mode", 1)
Have you tested with a lower value of https://kamailio.org/docs/modules/5.1.x/modules/dialog.html#dialog.p.update_...
The update_period should have no impact when db_mode=1 -- in this case the records are written to database immediately. I think update_period is intended only for db_mode=2.
Cheers, Daniel
I have it set to 5, but for some reason I'm not using get_profile_size
For inbound: $var(maxchannels) = 0; sql_xquery("ca", "select count(id) as c from dialog where xdata like '%maxchannels%$rU%' and timeout>unix_timestamp()", "ra"); $var(maxchannels)=$xavp(ra=>c); sql_result_free("ra");
For outbound: sql_xquery("ca", "select count(id) as c from dialog where xdata like '%maxchannels%$au%' and timeout>unix_timestamp()", "ra"); $var(maxchannels)=$xavp(ra=>c); sql_result_free("ra");
Pasting the code here I see this isn't that secure since a user foo also gets the number of calls for foobar counted against him! Off to put a " before/after the username.
Kamailio (SER) - Users Mailing List sr-users@lists.kamailio.orgmailto:sr-users@lists.kamailio.org https://lists.kamailio.org/cgi-bin/mailman/listinfo/sr-users
-- Daniel-Constantin Mierla -- www.asipto.comhttp://www.asipto.com www.twitter.com/micondahttp://www.twitter.com/miconda -- www.linkedin.com/in/micondahttp://www.linkedin.com/in/miconda Kamailio Advanced Training, Oct 21-23, 2019, Berlin, Germany -- https://asipto.com/u/kat
_______________________________________________ Kamailio (SER) - Users Mailing List sr-users@lists.kamailio.orgmailto:sr-users@lists.kamailio.org https://lists.kamailio.org/cgi-bin/mailman/listinfo/sr-users
This is great news!! I will repeat the tests that failed for me just to be sure, but from reading your comments it seems promising!! Thanks for pointing me to it.
Joel.
On Tue, Oct 1, 2019 at 08:15 Henning Westerholt hw@skalatan.de wrote:
Hi Joel,
Thank you, I was reading it yesterday. See this issue https://github.com/kamailio/kamailio/issues/2080#issue-499544483 – in my tests the proxies will expire the dialogs even after a restart. I just tested it again even restarting both proxies a few times.
Cheers,
Henning
--
Henning Westerholt - https://skalatan.de/blog/
Kamailio services - https://skalatan.de/services
*From:* sr-users sr-users-bounces@lists.kamailio.org *On Behalf Of *Joel Serrano *Sent:* Tuesday, October 1, 2019 4:35 PM *To:* Kamailio (SER) - Users Mailing List sr-users@lists.kamailio.org; miconda@gmail.com *Subject:* Re: [SR-Users] Call limit through shared database
Found it:
https://github.com/kamailio/kamailio/issues/1591#issuecomment-409205552
On Tue, Oct 1, 2019 at 07:15 Joel Serrano joel@textplus.com wrote:
Just a note, I would suggest to use htable+dmq to do such limits, dialog+dmq has some issues when handling dialog expiration when a node for whatever reason is restarted.. (search GH issues and you will find one with a long thread where Charles explains the reasons: TL;DR: You could end up having inconsistent dialog information with dialog+dmq)
Hope it helps!
Joel.
On Tue, Oct 1, 2019 at 01:02 Daniel-Constantin Mierla miconda@gmail.com wrote:
On 30.09.19 14:55, Daniel Tryba wrote:
On Sun, Sep 29, 2019 at 11:03:47AM +0300, Olli Attila wrote:
modparam("dialog", "profiles_with_value", "concurrent_calls") modparam("dialog", "dlg_flag", 4) modparam("dialog", "db_url", DBURL) modparam("dialog", "db_mode", 1)
Have you tested with a lower value of
https://kamailio.org/docs/modules/5.1.x/modules/dialog.html#dialog.p.update_...
The update_period should have no impact when db_mode=1 -- in this case the records are written to database immediately. I think update_period is intended only for db_mode=2.
Cheers, Daniel
I have it set to 5, but for some reason I'm not using get_profile_size
For inbound: $var(maxchannels) = 0; sql_xquery("ca", "select count(id) as c from dialog where xdata like
'%maxchannels%$rU%' and timeout>unix_timestamp()", "ra");
$var(maxchannels)=$xavp(ra=>c); sql_result_free("ra");
For outbound: sql_xquery("ca", "select count(id) as c from dialog where xdata like
'%maxchannels%$au%' and timeout>unix_timestamp()", "ra");
$var(maxchannels)=$xavp(ra=>c); sql_result_free("ra");
Pasting the code here I see this isn't that secure since a user foo also gets the number of calls for foobar counted against him! Off to put a " before/after the username.
Kamailio (SER) - Users Mailing List sr-users@lists.kamailio.org https://lists.kamailio.org/cgi-bin/mailman/listinfo/sr-users
-- Daniel-Constantin Mierla -- www.asipto.com www.twitter.com/miconda -- www.linkedin.com/in/miconda Kamailio Advanced Training, Oct 21-23, 2019, Berlin, Germany -- https://asipto.com/u/kat
Kamailio (SER) - Users Mailing List sr-users@lists.kamailio.org https://lists.kamailio.org/cgi-bin/mailman/listinfo/sr-users
Kamailio (SER) - Users Mailing List sr-users@lists.kamailio.org https://lists.kamailio.org/cgi-bin/mailman/listinfo/sr-users
Hello Joel,
I did some research yesterday for a customer, and only found open tickets related to the dialog statistics issue (#1692). The module README also stats that the DMQ will synchronize profiles. If there are some issues related to dialog inconsistencies, then they should (preferable) be fixed or properly documented in the module.
To which ticket are you referring to on github?
Cheers,
Henning
-- Henning Westerholt - https://skalatan.de/blog/ Kamailio services - https://skalatan.de/services
From: sr-users sr-users-bounces@lists.kamailio.org On Behalf Of Joel Serrano Sent: Tuesday, October 1, 2019 4:15 PM To: Kamailio (SER) - Users Mailing List sr-users@lists.kamailio.org; miconda@gmail.com Subject: Re: [SR-Users] Call limit through shared database
Just a note, I would suggest to use htable+dmq to do such limits, dialog+dmq has some issues when handling dialog expiration when a node for whatever reason is restarted.. (search GH issues and you will find one with a long thread where Charles explains the reasons: TL;DR: You could end up having inconsistent dialog information with dialog+dmq)
Hope it helps! Joel.
On Tue, Oct 1, 2019 at 01:02 Daniel-Constantin Mierla <miconda@gmail.commailto:miconda@gmail.com> wrote:
On 30.09.19 14:55, Daniel Tryba wrote:
On Sun, Sep 29, 2019 at 11:03:47AM +0300, Olli Attila wrote:
modparam("dialog", "profiles_with_value", "concurrent_calls") modparam("dialog", "dlg_flag", 4) modparam("dialog", "db_url", DBURL) modparam("dialog", "db_mode", 1)
Have you tested with a lower value of https://kamailio.org/docs/modules/5.1.x/modules/dialog.html#dialog.p.update_...
The update_period should have no impact when db_mode=1 -- in this case the records are written to database immediately. I think update_period is intended only for db_mode=2.
Cheers, Daniel
I have it set to 5, but for some reason I'm not using get_profile_size
For inbound: $var(maxchannels) = 0; sql_xquery("ca", "select count(id) as c from dialog where xdata like '%maxchannels%$rU%' and timeout>unix_timestamp()", "ra"); $var(maxchannels)=$xavp(ra=>c); sql_result_free("ra");
For outbound: sql_xquery("ca", "select count(id) as c from dialog where xdata like '%maxchannels%$au%' and timeout>unix_timestamp()", "ra"); $var(maxchannels)=$xavp(ra=>c); sql_result_free("ra");
Pasting the code here I see this isn't that secure since a user foo also gets the number of calls for foobar counted against him! Off to put a " before/after the username.
Kamailio (SER) - Users Mailing List sr-users@lists.kamailio.orgmailto:sr-users@lists.kamailio.org https://lists.kamailio.org/cgi-bin/mailman/listinfo/sr-users
-- Daniel-Constantin Mierla -- www.asipto.comhttp://www.asipto.com www.twitter.com/micondahttp://www.twitter.com/miconda -- www.linkedin.com/in/micondahttp://www.linkedin.com/in/miconda Kamailio Advanced Training, Oct 21-23, 2019, Berlin, Germany -- https://asipto.com/u/kat
_______________________________________________ Kamailio (SER) - Users Mailing List sr-users@lists.kamailio.orgmailto:sr-users@lists.kamailio.org https://lists.kamailio.org/cgi-bin/mailman/listinfo/sr-users
Hello Olli,
you can synchronize dialog profile information between Kamailio servers with the DMQ replication mechanism. You basically load and configure the DMQ module and activate it also in the dialog module.
Cheers,
Henning
-- Henning Westerholt - https://skalatan.de/blog/ Kamailio services - https://skalatan.de/services
From: sr-users sr-users-bounces@lists.kamailio.org On Behalf Of Olli Attila Sent: Sunday, September 29, 2019 10:04 AM To: Kamailio (SER) - Users Mailing List sr-users@lists.kamailio.org Subject: [SR-Users] Call limit through shared database
Hello,
I have 2 kam instances using one shared database and both kam servers running the same routing logic code. Kamailio servers are configured to use the same database as dialog backend.
I am limiting the concurrent dialogs in the following way but it seems that kamailio is using its own memory to read profile size rather than the db. Second kam is not aware of the dialog profiles that the first kam wrote to the shared db. Is there a way to get multiple kam instances to read profile size from the same database when calling the get_profile_size function?
modparam("dialog", "profiles_with_value", "concurrent_calls") modparam("dialog", "dlg_flag", 4) modparam("dialog", "db_url", DBURL) modparam("dialog", "db_mode", 1)
route[LIMIT_CALLS] {
if (!dlg_isflagset("1")) { # $td – gateways, $fu - user if (get_profile_size("concurrent_calls", "$fu", "$avp(calls)")) { if ($avp(calls) >= 3) { xlog("L_INFO", "Concurrent calls $fu at limit"); send_reply("503", "Calls limit reached"); exit; } else { dlg_manage(); dlg_setflag("1"); set_dlg_profile("concurrent_calls", "$fu"); } } } }
Cheers, Olli