Browse Source

deferred reload for dispatcher

* when adding several media servers, reload all of them instead of
reload after each insert
4.3
lazedo 7 years ago
committed by Luis Azedo
parent
commit
5d3f9dfc0d
2 changed files with 24 additions and 8 deletions
  1. +1
    -1
      kamailio/db_queries_kazoo.cfg
  2. +23
    -7
      kamailio/dispatcher-role.cfg

+ 1
- 1
kamailio/db_queries_kazoo.cfg View File

@ -1,5 +1,5 @@
####### Database queries ########
#!substdef "!KZQ_CHECK_MEDIA_SERVER_INSERT!insert into dispatcher (setid, destination) select \$var(SetId), \"\$var(MediaUrl)\" where not exists(select * from dispatcher where destination = \"\$var(MediaUrl)\")!g"
#!substdef "!KZQ_CHECK_MEDIA_SERVER_INSERT!insert into dispatcher (setid, destination, flags, attrs, description) select \$var(SetId), \"\$var(MediaUrl)\", \$var(flags), \"\$var(attrs)\", \"added by nodes role\" where not exists(select * from dispatcher where destination = \"\$var(MediaUrl)\")!g"
#!substdef "!KZQ_COUNT_ALL_SUBSCRIBERS!select a.event, count(distinct watcher_username || \"@\" || watcher_domain) count_unique, count(*) count from event_list a, active_watchers b where b.event = a.event group by a.event!g"
#!substdef "!KZQ_COUNT_PRESENTITIES!select event, (select count(*) from presentity b where username = \"\$(var(payload){kz.json,From}{uri.user})\" and domain = \"\$(var(payload){kz.json,From}{uri.domain})\" and b.event = a.event) count from event_list a!g"
#!substdef "!KZQ_COUNT_SUBSCRIBERS!select event, (select count(*) from active_watchers b where presentity_uri = \"\$var(presentity)\" and b.event = a.event) count from event_list a union select \"self\", count(*) from presentities where presentity_uri = \"\$var(presentity)\"!g"


+ 23
- 7
kamailio/dispatcher-role.cfg View File

@ -4,6 +4,7 @@ modparam("htable", "htable", "failover=>size=16;autoexpire=120")
#!trydef KZ_DISPATCHER_PROBE_MODE 1
#!trydef DISPATCHER_ADD_SERVERS 1
#!trydef DISPATCHER_ALG 0
#!trydef KZ_DISPATCHER_ADD_FLAGS 10
kazoo.dispatcher_auto_add = DISPATCHER_ADD_SERVERS descr "adds media servers reported by ecallmgr"
kazoo.dispatcher_algorithm = DISPATCHER_ALG descr "dispatcher algorithm to use"
@ -36,6 +37,15 @@ modparam("dispatcher", "ds_ping_from", "sip:sipcheck@MY_HOSTNAME")
## 10 - Presence servers (if not locally handled)
## 20 - Registrar servers (if not locally handled)
####### RTIMER module for dispatcher reload ##########
#!ifndef RTIMER_LOADED
loadmodule "rtimer.so"
#!trydef RTIMER_LOADED
#!endif
modparam("rtimer", "timer", "name=dispatcher_reload;interval=20;mode=1;")
modparam("rtimer", "exec", "timer=dispatcher_reload;route=DISPATCHER_RELOAD")
####### Dispatcher Logic ########
route[DISPATCHER_CLASSIFY_SOURCE]
{
@ -232,21 +242,27 @@ route[DISPATCHER_CHECK_MEDIA_SERVER]
if($var(Zone) != "MY_AMQP_ZONE") {
$var(SetId) = 2;
}
if($(var(MediaUrl){uri.port}) == 12000) {
$var(SetId) = $var(SetId) + 50;
}
$var(flags) = 10;
$var(flags) = KZ_DISPATCHER_ADD_FLAGS;
$var(attrs) = $_s(zone=$var(Zone);profile=$var(MediaProfile);idx=$(var(MediaUrl){s.corehash, MEDIA_SERVERS_HASH_SIZE});node=$var(MediaName));
sql_query("exec", "insert into dispatcher (setid, destination, flags, attrs, description) select $var(SetId), \"$var(MediaUrl)\", $var(flags), \"$var(attrs)\", \"added by nodes role\" where not exists(select * from dispatcher where destination = \"$var(MediaUrl)\")");
#!import_file "dispatcher-custom-media-check.cfg"
sql_query("exec", "KZQ_CHECK_MEDIA_SERVER_INSERT");
if($sqlrows(exec) > 0) {
xlog("L_WARNING", "reloading dispatcher table\n");
ds_reload();
$shv(dispatcher_reload) = 1;
return 1;
}
}
return 0;
}
route[DISPATCHER_RELOAD]
{
if($shv(dispatcher_reload) == 1) {
xlog("L_WARNING", "reloading dispatcher table\n");
ds_reload();
};
$shv(dispatcher_reload) = 0;
}
route[DISPATCHER_STATUS]
{
jsonrpc_exec('{"jsonrpc": "2.0", "method": "dispatcher.list", "id": 1}');


Loading…
Cancel
Save