Add more option APIs
This commit is contained in:
parent
d256387cee
commit
6f30dca4ba
|
@ -25,27 +25,58 @@
|
||||||
|
|
||||||
-logger_header("[Zone]").
|
-logger_header("[Zone]").
|
||||||
|
|
||||||
|
-compile({inline,
|
||||||
|
[ idle_timeout/1
|
||||||
|
, publish_limit/1
|
||||||
|
, mqtt_frame_options/1
|
||||||
|
, mqtt_strict_mode/1
|
||||||
|
, max_packet_size/1
|
||||||
|
, mountpoint/1
|
||||||
|
, use_username_as_clientid/1
|
||||||
|
, stats_timer/1
|
||||||
|
, enable_stats/1
|
||||||
|
, enable_acl/1
|
||||||
|
, enable_ban/1
|
||||||
|
, enable_flapping_detect/1
|
||||||
|
, ignore_loop_deliver/1
|
||||||
|
, server_keepalive/1
|
||||||
|
, keepalive_backoff/1
|
||||||
|
, max_inflight/1
|
||||||
|
, session_expiry_interval/1
|
||||||
|
, force_gc_policy/1
|
||||||
|
, force_shutdown_policy/1
|
||||||
|
]}).
|
||||||
|
|
||||||
%% APIs
|
%% APIs
|
||||||
-export([start_link/0, stop/0]).
|
-export([start_link/0, stop/0]).
|
||||||
|
|
||||||
-export([ frame_options/1
|
%% Zone Option API
|
||||||
|
-export([ idle_timeout/1
|
||||||
|
, publish_limit/1
|
||||||
|
, mqtt_frame_options/1
|
||||||
, mqtt_strict_mode/1
|
, mqtt_strict_mode/1
|
||||||
, max_packet_size/1
|
, max_packet_size/1
|
||||||
|
, mountpoint/1
|
||||||
, use_username_as_clientid/1
|
, use_username_as_clientid/1
|
||||||
|
, stats_timer/1
|
||||||
, enable_stats/1
|
, enable_stats/1
|
||||||
, enable_acl/1
|
, enable_acl/1
|
||||||
, enable_ban/1
|
, enable_ban/1
|
||||||
, enable_flapping_detect/1
|
, enable_flapping_detect/1
|
||||||
, ignore_loop_deliver/1
|
, ignore_loop_deliver/1
|
||||||
, server_keepalive/1
|
, server_keepalive/1
|
||||||
|
, keepalive_backoff/1
|
||||||
, max_inflight/1
|
, max_inflight/1
|
||||||
, session_expiry_interval/1
|
, session_expiry_interval/1
|
||||||
, force_gc_policy/1
|
, force_gc_policy/1
|
||||||
, force_shutdown_policy/1
|
, force_shutdown_policy/1
|
||||||
]).
|
]).
|
||||||
|
|
||||||
-export([check_oom/2]).
|
-export([ init_gc_state/1
|
||||||
|
, oom_policy/1
|
||||||
|
]).
|
||||||
|
|
||||||
|
%% Zone API
|
||||||
-export([ get_env/2
|
-export([ get_env/2
|
||||||
, get_env/3
|
, get_env/3
|
||||||
, set_env/3
|
, set_env/3
|
||||||
|
@ -63,27 +94,46 @@
|
||||||
, code_change/3
|
, code_change/3
|
||||||
]).
|
]).
|
||||||
|
|
||||||
-export_type([zone/0]).
|
-import(emqx_misc, [maybe_apply/2]).
|
||||||
|
|
||||||
%% dummy state
|
-export_type([zone/0]).
|
||||||
-record(state, {}).
|
|
||||||
|
|
||||||
-type(zone() :: atom()).
|
-type(zone() :: atom()).
|
||||||
|
|
||||||
-define(TAB, ?MODULE).
|
-define(TAB, ?MODULE).
|
||||||
-define(SERVER, ?MODULE).
|
-define(SERVER, ?MODULE).
|
||||||
|
-define(DEFAULT_IDLE_TIMEOUT, 30000).
|
||||||
-define(KEY(Zone, Key), {?MODULE, Zone, Key}).
|
-define(KEY(Zone, Key), {?MODULE, Zone, Key}).
|
||||||
|
|
||||||
%%--------------------------------------------------------------------
|
|
||||||
%% APIs
|
|
||||||
%%--------------------------------------------------------------------
|
|
||||||
|
|
||||||
-spec(start_link() -> startlink_ret()).
|
-spec(start_link() -> startlink_ret()).
|
||||||
start_link() ->
|
start_link() ->
|
||||||
gen_server:start_link({local, ?SERVER}, ?MODULE, [], []).
|
gen_server:start_link({local, ?SERVER}, ?MODULE, [], []).
|
||||||
|
|
||||||
-spec(frame_options(zone()) -> emqx_frame:options()).
|
-spec(stop() -> ok).
|
||||||
frame_options(Zone) ->
|
stop() ->
|
||||||
|
gen_server:stop(?SERVER).
|
||||||
|
|
||||||
|
-spec(init_gc_state(zone()) -> emqx_gc:gc_state()).
|
||||||
|
init_gc_state(Zone) ->
|
||||||
|
maybe_apply(fun emqx_gc:init/1, force_gc_policy(Zone)).
|
||||||
|
|
||||||
|
-spec(oom_policy(zone()) -> emqx_types:oom_policy()).
|
||||||
|
oom_policy(Zone) -> force_shutdown_policy(Zone).
|
||||||
|
|
||||||
|
%%--------------------------------------------------------------------
|
||||||
|
%% Zone Options API
|
||||||
|
%%--------------------------------------------------------------------
|
||||||
|
|
||||||
|
-spec(idle_timeout(zone()) -> pos_integer()).
|
||||||
|
idle_timeout(Zone) ->
|
||||||
|
get_env(Zone, idle_timeout, ?DEFAULT_IDLE_TIMEOUT).
|
||||||
|
|
||||||
|
-spec(publish_limit(zone()) -> maybe(esockd_rate_limit:config())).
|
||||||
|
publish_limit(Zone) ->
|
||||||
|
get_env(Zone, publish_limit).
|
||||||
|
|
||||||
|
-spec(mqtt_frame_options(zone()) -> emqx_frame:options()).
|
||||||
|
mqtt_frame_options(Zone) ->
|
||||||
#{strict_mode => mqtt_strict_mode(Zone),
|
#{strict_mode => mqtt_strict_mode(Zone),
|
||||||
max_size => max_packet_size(Zone)
|
max_size => max_packet_size(Zone)
|
||||||
}.
|
}.
|
||||||
|
@ -96,10 +146,17 @@ mqtt_strict_mode(Zone) ->
|
||||||
max_packet_size(Zone) ->
|
max_packet_size(Zone) ->
|
||||||
get_env(Zone, max_packet_size, ?MAX_PACKET_SIZE).
|
get_env(Zone, max_packet_size, ?MAX_PACKET_SIZE).
|
||||||
|
|
||||||
|
-spec(mountpoint(zone()) -> maybe(emqx_mountpoint:mountpoint())).
|
||||||
|
mountpoint(Zone) -> get_env(Zone, mountpoint).
|
||||||
|
|
||||||
-spec(use_username_as_clientid(zone()) -> boolean()).
|
-spec(use_username_as_clientid(zone()) -> boolean()).
|
||||||
use_username_as_clientid(Zone) ->
|
use_username_as_clientid(Zone) ->
|
||||||
get_env(Zone, use_username_as_clientid, false).
|
get_env(Zone, use_username_as_clientid, false).
|
||||||
|
|
||||||
|
-spec(stats_timer(zone()) -> undefined | disabled).
|
||||||
|
stats_timer(Zone) ->
|
||||||
|
case enable_stats(Zone) of true -> undefined; false -> disabled end.
|
||||||
|
|
||||||
-spec(enable_stats(zone()) -> boolean()).
|
-spec(enable_stats(zone()) -> boolean()).
|
||||||
enable_stats(Zone) ->
|
enable_stats(Zone) ->
|
||||||
get_env(Zone, enable_stats, true).
|
get_env(Zone, enable_stats, true).
|
||||||
|
@ -124,6 +181,10 @@ ignore_loop_deliver(Zone) ->
|
||||||
server_keepalive(Zone) ->
|
server_keepalive(Zone) ->
|
||||||
get_env(Zone, server_keepalive).
|
get_env(Zone, server_keepalive).
|
||||||
|
|
||||||
|
-spec(keepalive_backoff(zone()) -> float()).
|
||||||
|
keepalive_backoff(Zone) ->
|
||||||
|
get_env(Zone, keepalive_backoff, 0.75).
|
||||||
|
|
||||||
-spec(max_inflight(zone()) -> 0..65535).
|
-spec(max_inflight(zone()) -> 0..65535).
|
||||||
max_inflight(Zone) ->
|
max_inflight(Zone) ->
|
||||||
get_env(Zone, max_inflight, 65535).
|
get_env(Zone, max_inflight, 65535).
|
||||||
|
@ -140,18 +201,9 @@ force_gc_policy(Zone) ->
|
||||||
force_shutdown_policy(Zone) ->
|
force_shutdown_policy(Zone) ->
|
||||||
get_env(Zone, force_shutdown_policy).
|
get_env(Zone, force_shutdown_policy).
|
||||||
|
|
||||||
-spec(check_oom(zone(), fun()) -> ok | term()).
|
%%--------------------------------------------------------------------
|
||||||
check_oom(Zone, Action) ->
|
%% APIs
|
||||||
case emqx_zone:force_shutdown_policy(Zone) of
|
%%--------------------------------------------------------------------
|
||||||
undefined -> ok;
|
|
||||||
Policy -> do_check_oom(emqx_oom:init(Policy), Action)
|
|
||||||
end.
|
|
||||||
|
|
||||||
do_check_oom(OomPolicy, Action) ->
|
|
||||||
case emqx_oom:check(OomPolicy) of
|
|
||||||
ok -> ok;
|
|
||||||
Shutdown -> Action(Shutdown)
|
|
||||||
end.
|
|
||||||
|
|
||||||
-spec(get_env(maybe(zone()), atom()) -> maybe(term())).
|
-spec(get_env(maybe(zone()), atom()) -> maybe(term())).
|
||||||
get_env(undefined, Key) -> emqx:get_env(Key);
|
get_env(undefined, Key) -> emqx:get_env(Key);
|
||||||
|
@ -179,17 +231,13 @@ unset_env(Zone, Key) ->
|
||||||
force_reload() ->
|
force_reload() ->
|
||||||
gen_server:call(?SERVER, force_reload).
|
gen_server:call(?SERVER, force_reload).
|
||||||
|
|
||||||
-spec(stop() -> ok).
|
|
||||||
stop() ->
|
|
||||||
gen_server:stop(?SERVER, normal, infinity).
|
|
||||||
|
|
||||||
%%--------------------------------------------------------------------
|
%%--------------------------------------------------------------------
|
||||||
%% gen_server callbacks
|
%% gen_server callbacks
|
||||||
%%--------------------------------------------------------------------
|
%%--------------------------------------------------------------------
|
||||||
|
|
||||||
init([]) ->
|
init([]) ->
|
||||||
_ = do_reload(),
|
_ = do_reload(),
|
||||||
{ok, #state{}}.
|
{ok, #{}}.
|
||||||
|
|
||||||
handle_call(force_reload, _From, State) ->
|
handle_call(force_reload, _From, State) ->
|
||||||
_ = do_reload(),
|
_ = do_reload(),
|
||||||
|
|
Loading…
Reference in New Issue