From 5d3f9dfc0d0996a12ec821c7e1fe8279d28c64ff Mon Sep 17 00:00:00 2001 From: lazedo Date: Sat, 17 Nov 2018 13:41:03 +0000 Subject: [PATCH] deferred reload for dispatcher * when adding several media servers, reload all of them instead of reload after each insert --- kamailio/db_queries_kazoo.cfg | 2 +- kamailio/dispatcher-role.cfg | 30 +++++++++++++++++++++++------- 2 files changed, 24 insertions(+), 8 deletions(-) diff --git a/kamailio/db_queries_kazoo.cfg b/kamailio/db_queries_kazoo.cfg index cb23157..cf79f5c 100644 --- a/kamailio/db_queries_kazoo.cfg +++ b/kamailio/db_queries_kazoo.cfg @@ -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" diff --git a/kamailio/dispatcher-role.cfg b/kamailio/dispatcher-role.cfg index 080229c..432bcbe 100644 --- a/kamailio/dispatcher-role.cfg +++ b/kamailio/dispatcher-role.cfg @@ -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}');