diff options
author | Robert Newson <robert.newson@cloudant.com> | 2013-11-11 18:03:24 +0000 |
---|---|---|
committer | Robert Newson <robert.newson@cloudant.com> | 2013-11-20 12:51:52 +0000 |
commit | 924f26d661481f20b238be2ae2a00c47e79f7252 (patch) | |
tree | 9eea116b7d273d6fd62b1e800898e9ef4a9249d2 | |
parent | 1c1b48e19d0eb36691d98f2194c19fe898cb55db (diff) | |
download | couchdb-924f26d661481f20b238be2ae2a00c47e79f7252.tar.gz |
Listen for config changes to maintenance_mode
-rw-r--r-- | src/custodian/src/custodian_server.erl | 19 |
1 files changed, 19 insertions, 0 deletions
diff --git a/src/custodian/src/custodian_server.erl b/src/custodian/src/custodian_server.erl index 188d3713f..be69718a3 100644 --- a/src/custodian/src/custodian_server.erl +++ b/src/custodian/src/custodian_server.erl @@ -2,6 +2,7 @@ -module(custodian_server). -behaviour(gen_server). +-behaviour(config_listener). % public api. -export([start_link/0]). @@ -16,6 +17,9 @@ handle_db_event/3 ]). +% config_listener callback +-export([handle_config_change/5]). + % private records. -record(state, { event_listener, @@ -28,10 +32,17 @@ start_link() -> gen_server:start_link({local, ?MODULE}, ?MODULE, [], []). +handle_config_change("cloudant", "maintenance_mode", _, _, S) -> + ok = gen_server:cast(S, refresh), + {ok, S}; +handle_config_change(_, _, _, _, S) -> + {ok, S}. + % gen_server functions. init(_) -> process_flag(trap_exit, true), net_kernel:monitor_nodes(true), + ok = config:listen_for_changes(?MODULE, self()), {ok, LisPid} = start_event_listener(), {ok, start_shard_checker(#state{ event_listener=LisPid @@ -43,6 +54,14 @@ handle_call(_Msg, _From, State) -> handle_cast(refresh, State) -> {noreply, start_shard_checker(State)}. +handle_info({gen_event_EXIT, {config_listener, ?MODULE}, _Reason}, State) -> + erlang:send_after(5000, self(), restart_config_listener), + {noreply, State}; + +handle_info(restart_config_listener, State) -> + ok = config:listen_for_changes(?MODULE, self()), + {noreply, State}; + handle_info({nodeup, _}, State) -> {noreply, start_shard_checker(State)}; |