diff options
author | Evgeniy Khramtsov <ekhramtsov@process-one.net> | 2017-02-23 10:12:19 +0300 |
---|---|---|
committer | Evgeniy Khramtsov <ekhramtsov@process-one.net> | 2017-02-23 10:12:19 +0300 |
commit | 7d6811226536fe260d83617a16fd741edb2d97f3 (patch) | |
tree | 4a0745ff2168078cf83233bcb68bafcf6cbd4e01 /src/ejabberd_riak_sup.erl | |
parent | Remove unused macro (diff) |
Start/stop virtual hosts when reloading configuration file
Diffstat (limited to 'src/ejabberd_riak_sup.erl')
-rw-r--r-- | src/ejabberd_riak_sup.erl | 27 |
1 files changed, 22 insertions, 5 deletions
diff --git a/src/ejabberd_riak_sup.erl b/src/ejabberd_riak_sup.erl index 840de29b..d1ab126f 100644 --- a/src/ejabberd_riak_sup.erl +++ b/src/ejabberd_riak_sup.erl @@ -28,9 +28,9 @@ -behaviour(ejabberd_config). -author('alexey@process-one.net'). --export([start/0, start_link/0, init/1, get_pids/0, +-export([start/0, stop/0, start_link/0, init/1, get_pids/0, transform_options/1, get_random_pid/0, get_random_pid/1, - opt_type/1]). + host_up/1, opt_type/1]). -include("ejabberd.hrl"). -include("logger.hrl"). @@ -45,6 +45,8 @@ -define(CONNECT_TIMEOUT, 500). % milliseconds start() -> + ejabberd_hooks:add(config_reloaded, ?MODULE, start, 20), + ejabberd_hooks:add(host_up, ?MODULE, host_up, 20), case lists:any( fun(Host) -> is_riak_configured(Host) @@ -53,6 +55,20 @@ start() -> ejabberd:start_app(riakc), do_start(); false -> + stop() + end. + +stop() -> + supervisor:terminate_child(ejabberd_sup, ?MODULE), + supervisor:delete_child(ejabberd_sup, ?MODULE), + ok. + +host_up(Host) -> + case is_riak_configured(Host) of + true -> + ejabberd:start_app(riakc), + do_start(); + false -> ok end. @@ -77,9 +93,8 @@ is_riak_configured(Host) -> or AuthConfigured or ModuleWithRiakDBConfigured. do_start() -> - SupervisorName = ?MODULE, ChildSpec = - {SupervisorName, + {?MODULE, {?MODULE, start_link, []}, transient, infinity, @@ -88,9 +103,11 @@ do_start() -> case supervisor:start_child(ejabberd_sup, ChildSpec) of {ok, _PID} -> ok; + {error, {already_started, _}} -> + ok; _Error -> ?ERROR_MSG("Start of supervisor ~p failed:~n~p~nRetrying...~n", - [SupervisorName, _Error]), + [?MODULE, _Error]), timer:sleep(5000), start() end. |