diff --git a/apps/emqx/etc/emqx.conf b/apps/emqx/etc/emqx.conf index d8db63b3a..ec2636c40 100644 --- a/apps/emqx/etc/emqx.conf +++ b/apps/emqx/etc/emqx.conf @@ -29,13 +29,6 @@ node { ## Default: "{{ platform_data_dir }}/" data_dir: "{{ platform_data_dir }}/" - ## The config file dir where the emqx.conf can be found - ## - ## @doc node.etc_dir - ## ValueType: Folder - ## Default: "{{ platform_etc_dir }}/" - etc_dir: "{{ platform_etc_dir }}/" - ## Dir of crash dump file. ## ## @doc node.crash_dump_dir diff --git a/apps/emqx/src/emqx_config_handler.erl b/apps/emqx/src/emqx_config_handler.erl index eba844829..6a4ac8703 100644 --- a/apps/emqx/src/emqx_config_handler.erl +++ b/apps/emqx/src/emqx_config_handler.erl @@ -72,7 +72,7 @@ add_handler(ConfKeyPath, HandlerName) -> -spec init(term()) -> {ok, state()}. init(_) -> - {ok, RawConf} = hocon:load(emqx_conf_name(), #{format => richmap}), + RawConf = load_config_file(), {_MappedEnvs, Conf} = hocon_schema:map_translate(emqx_schema, RawConf, #{}), ok = save_config_to_emqx(to_plainmap(Conf), to_plainmap(RawConf)), {ok, #{handlers => #{?MOD => ?MODULE}}}. @@ -192,14 +192,15 @@ read_old_config(FileName) -> _ -> #{} end. -emqx_conf_name() -> - filename:join([etc_dir(), "emqx.conf"]). +load_config_file() -> + lists:foldl(fun(ConfFile, Acc) -> + {ok, RawConf} = hocon:load(ConfFile, #{format => richmap}), + emqx_map_lib:deep_merge(Acc, RawConf) + end, #{}, emqx:get_env(config_files, [])). emqx_override_conf_name() -> filename:join([emqx:get_env(data_dir), "emqx_override.conf"]). -etc_dir() -> - emqx:get_env(etc_dir). to_richmap(Map) -> {ok, RichMap} = hocon:binary(jsx:encode(Map), #{format => richmap}), diff --git a/apps/emqx/src/emqx_listeners.erl b/apps/emqx/src/emqx_listeners.erl index b6ed8d615..bc0fc24b2 100644 --- a/apps/emqx/src/emqx_listeners.erl +++ b/apps/emqx/src/emqx_listeners.erl @@ -99,7 +99,8 @@ do_start_listener(ZoneName, ListenerName, #{type := quic, bind := ListenOn} = Op , peer_bidi_stream_count => 10 }, StreamOpts = [], - quicer:start_listener('mqtt:quic', port(ListenOn), {ListenOpts, ConnectionOpts, StreamOpts}). + quicer:start_listener(listener_id(ZoneName, ListenerName), + port(ListenOn), {ListenOpts, ConnectionOpts, StreamOpts}). esockd_opts(Opts0) -> Opts1 = maps:with([acceptors, max_connections, proxy_protocol, proxy_protocol_timeout], Opts0), @@ -178,7 +179,9 @@ stop_listener(ListenerId) -> stop_listener(ZoneName, ListenerName, #{type := tcp, bind := ListenOn}) -> esockd:close(listener_id(ZoneName, ListenerName), ListenOn); stop_listener(ZoneName, ListenerName, #{type := ws}) -> - cowboy:stop_listener(listener_id(ZoneName, ListenerName)). + cowboy:stop_listener(listener_id(ZoneName, ListenerName)); +stop_listener(ZoneName, ListenerName, #{type := quic}) -> + quicer:stop_listener(listener_id(ZoneName, ListenerName)). merge_default(Options) -> case lists:keytake(tcp_options, 1, Options) of diff --git a/apps/emqx/src/emqx_schema.erl b/apps/emqx/src/emqx_schema.erl index 01082824f..72fe3832b 100644 --- a/apps/emqx/src/emqx_schema.erl +++ b/apps/emqx/src/emqx_schema.erl @@ -146,7 +146,9 @@ fields("node") -> override_env => "EMQX_NODE_COOKIE" })} , {"data_dir", t(string(), "emqx.data_dir", undefined)} - , {"etc_dir", t(string(), "emqx.etc_dir", undefined)} + , {"config_files", t(list(string()), "emqx.config_files", + [ filename:join([os:getenv("RUNNER_ETC_DIR"), "emqx.conf"]) + ])} , {"global_gc_interval", t(duration_s(), "emqx.global_gc_interval", undefined)} , {"crash_dump_dir", t(file(), "vm_args.-env ERL_CRASH_DUMP", undefined)} , {"dist_net_ticktime", t(integer(), "vm_args.-kernel net_ticktime", undefined)} diff --git a/bin/emqx b/bin/emqx index 22593ea82..9f4aa9bd4 100755 --- a/bin/emqx +++ b/bin/emqx @@ -194,6 +194,7 @@ relx_nodetool() { call_hocon() { export RUNNER_ROOT_DIR + export RUNNER_ETC_DIR export REL_VSN "$ERTS_DIR/bin/escript" "$ROOTDIR/bin/nodetool" hocon "$@" }