From d9ad29476a60873c7cb74e153b12f55fd5c99aaa Mon Sep 17 00:00:00 2001 From: Feng Lee Date: Fri, 7 Sep 2018 10:23:43 +0800 Subject: [PATCH] Code Review: Update the zone module 1. Add force_reload/1 API 2. Change the default reload interval to 5 minutes --- src/emqx_zone.erl | 15 ++++++--------- 1 file changed, 6 insertions(+), 9 deletions(-) diff --git a/src/emqx_zone.erl b/src/emqx_zone.erl index 209f0323c..8344ba150 100644 --- a/src/emqx_zone.erl +++ b/src/emqx_zone.erl @@ -26,10 +26,9 @@ -export([init/1, handle_call/3, handle_cast/2, handle_info/2, terminate/2, code_change/3]). --record(state, {timer}). - -define(TAB, ?MODULE). +-spec(start_link() -> emqx_types:startlink_ret()). start_link() -> gen_server:start_link({local, ?MODULE}, ?MODULE, [], []). @@ -58,7 +57,7 @@ set_env(Zone, Key, Val) -> init([]) -> _ = emqx_tables:new(?TAB, [set, {read_concurrency, true}]), - {ok, element(2, handle_info(reload, #state{}))}. + {ok, element(2, handle_info(reload, #{timer => undefined}))}. handle_call(Req, _From, State) -> emqx_logger:error("[Zone] unexpected call: ~p", [Req]), @@ -72,11 +71,9 @@ handle_cast(Msg, State) -> emqx_logger:error("[Zone] unexpected cast: ~p", [Msg]), {noreply, State}. -handle_info(reload, State) -> - lists:foreach( - fun({Zone, Opts}) -> - [ets:insert(?TAB, {{Zone, Key}, Val}) || {Key, Val} <- Opts] - end, emqx_config:get_env(zones, [])), +handle_info({timeout, TRef, reload}, State = #{timer := TRef}) -> + [ets:insert(?TAB, [{{Zone, Key}, Val} || {Key, Val} <- Opts]) + || {Zone, Opts} <- emqx_config:get_env(zones, [])], {noreply, ensure_reload_timer(State), hibernate}; handle_info(Info, State) -> @@ -94,5 +91,5 @@ code_change(_OldVsn, State, _Extra) -> %%------------------------------------------------------------------------------ ensure_reload_timer(State) -> - State#state{timer = erlang:send_after(10000, self(), reload)}. + State#{timer := emqx_misc:start_timer(timer:minutes(5), reload)}.