Forráskód Böngészése

fix(configs): correct the default value of some configs

Shawn 4 éve
szülő
commit
29bb4c2a01

+ 24 - 30
apps/emqx/etc/emqx.conf

@@ -51,8 +51,8 @@ node {
   ##
   ##
   ## @doc node.dist_net_ticktime
   ## @doc node.dist_net_ticktime
   ## ValueType: Number
   ## ValueType: Number
-  ## Default: 15m
-  dist_net_ticktime: 120
+  ## Default: 2m
+  dist_net_ticktime: 2m
 
 
   ## Sets the port range for the listener socket of a distributed
   ## Sets the port range for the listener socket of a distributed
   ## Erlang node.
   ## Erlang node.
@@ -88,8 +88,8 @@ node {
   ## @doc node.backtrace_depth
   ## @doc node.backtrace_depth
   ## ValueType: Integer
   ## ValueType: Integer
   ## Range: [0,1024]
   ## Range: [0,1024]
-  ## Default: 16
-  backtrace_depth: 16
+  ## Default: 23
+  backtrace_depth: 23
 
 
 }
 }
 
 
@@ -141,7 +141,7 @@ cluster {
     ##
     ##
     ## @doc cluster.static.seeds
     ## @doc cluster.static.seeds
     ## ValueType: Array<NodeName>
     ## ValueType: Array<NodeName>
-    ## Default: ["emqx1@127.0.0.1", "emqx2@127.0.0.1"]
+    ## Default: []
     seeds: ["emqx1@127.0.0.1", "emqx2@127.0.0.1"]
     seeds: ["emqx1@127.0.0.1", "emqx2@127.0.0.1"]
   }
   }
 
 
@@ -429,8 +429,9 @@ log {
   ##
   ##
   ## @doc log.chars_limit
   ## @doc log.chars_limit
   ## ValueType: Integer | infinity
   ## ValueType: Integer | infinity
+  ## Range: [0, infinity)
   ## Default: infinity
   ## Default: infinity
-  chars_limit: 8192
+  chars_limit: infinity
 
 
   ## Maximum depth for Erlang term log formatting
   ## Maximum depth for Erlang term log formatting
   ## and Erlang process message queue inspection.
   ## and Erlang process message queue inspection.
@@ -484,7 +485,7 @@ log {
   ##
   ##
   ## @doc log.flush_qlen
   ## @doc log.flush_qlen
   ## ValueType: Integer
   ## ValueType: Integer
-  ## Range: [${log.drop_mode_qlen}, )
+  ## Range: [${log.drop_mode_qlen}, infinity)
   ## Default: 8000
   ## Default: 8000
   flush_qlen: 8000
   flush_qlen: 8000
 
 
@@ -951,7 +952,7 @@ zones.default {
 
 
     ## Specify the response information returned to the client
     ## Specify the response information returned to the client
     ##
     ##
-    ## This feature is disabled if not set
+    ## This feature is disabled if is set to ""
     ##
     ##
     ## @doc zones.<name>.mqtt.response_information
     ## @doc zones.<name>.mqtt.response_information
     ## ValueType: String
     ## ValueType: String
@@ -978,7 +979,7 @@ zones.default {
     ##
     ##
     ## @doc zones.<name>.mqtt.max_subscriptions
     ## @doc zones.<name>.mqtt.max_subscriptions
     ## ValueType: Integer | infinity
     ## ValueType: Integer | infinity
-    ## Range: [1, )
+    ## Range: [1, infinity)
     ## Default: infinity
     ## Default: infinity
     max_subscriptions: infinity
     max_subscriptions: infinity
 
 
@@ -1008,7 +1009,7 @@ zones.default {
     ##
     ##
     ## @doc zones.<name>.mqtt.max_awaiting_rel
     ## @doc zones.<name>.mqtt.max_awaiting_rel
     ## ValueType: Integer | infinity
     ## ValueType: Integer | infinity
-    ## Range: [1, )
+    ## Range: [1, infinity)
     ## Default: 100
     ## Default: 100
     max_awaiting_rel: 100
     max_awaiting_rel: 100
 
 
@@ -1031,7 +1032,7 @@ zones.default {
     ##
     ##
     ## @doc zones.<name>.mqtt.max_mqueue_len
     ## @doc zones.<name>.mqtt.max_mqueue_len
     ## ValueType: Integer | infinity
     ## ValueType: Integer | infinity
-    ## Range: [0, )
+    ## Range: [0, infinity)
     ## Default: 1000
     ## Default: 1000
     max_mqueue_len: 1000
     max_mqueue_len: 1000
 
 
@@ -1182,7 +1183,7 @@ zones.default {
     ## Max message queue length
     ## Max message queue length
     ## @doc zones.<name>.force_shutdown.max_message_queue_len
     ## @doc zones.<name>.force_shutdown.max_message_queue_len
     ## ValueType: Integer
     ## ValueType: Integer
-    ## Range: (0, )
+    ## Range: (0, infinity)
     ## Default: 1000
     ## Default: 1000
     max_message_queue_len: 1000
     max_message_queue_len: 1000
 
 
@@ -1206,7 +1207,7 @@ zones.default {
     ## GC the process after how many messages received
     ## GC the process after how many messages received
     ## @doc zones.<name>.force_gc.max_message_queue_len
     ## @doc zones.<name>.force_gc.max_message_queue_len
     ## ValueType: Integer
     ## ValueType: Integer
-    ## Range: (0, )
+    ## Range: (0, infinity)
     ## Default: 16000
     ## Default: 16000
     count: 16000
     count: 16000
 
 
@@ -2028,8 +2029,8 @@ example_common_tcp_options {
   ## @doc listeners.<name>.tcp.backlog
   ## @doc listeners.<name>.tcp.backlog
   ## ValueType: Number
   ## ValueType: Number
   ## Range: [0, 1048576]
   ## Range: [0, 1048576]
-  ## Default: 128
-  tcp.backlog: 128
+  ## Default: 1024
+  tcp.backlog: 1024
 
 
   ## The TCP send timeout for the connections.
   ## The TCP send timeout for the connections.
   ##
   ##
@@ -2049,29 +2050,22 @@ example_common_tcp_options {
   ##
   ##
   ## @doc listeners.<name>.tcp.recbuf
   ## @doc listeners.<name>.tcp.recbuf
   ## ValueType: Size
   ## ValueType: Size
-  ## Default: 2KB
-  tcp.recbuf: 2KB
+  ## Default: notset
+  #tcp.recbuf: 2KB
 
 
   ## The TCP send buffer(os kernel) for the connections.
   ## The TCP send buffer(os kernel) for the connections.
   ##
   ##
   ## @doc listeners.<name>.tcp.sndbuf
   ## @doc listeners.<name>.tcp.sndbuf
   ## ValueType: Size
   ## ValueType: Size
-  ## Default: 2KB
-  tcp.sndbuf: 2KB
+  ## Default: notset
+  #tcp.sndbuf: 4KB
 
 
   ## The size of the user-level software buffer used by the driver.
   ## The size of the user-level software buffer used by the driver.
   ##
   ##
   ## @doc listeners.<name>.tcp.buffer
   ## @doc listeners.<name>.tcp.buffer
   ## ValueType: Size
   ## ValueType: Size
-  ## Default: 2KB
-  tcp.buffer: 2KB
-
-  ## Sets the 'buffer: max(sndbuf, recbuf)' if this option is enabled.
-  ##
-  ## @doc listeners.<name>.tcp.tune_buffer
-  ## ValueType: Boolean
-  ## Default: false
-  tcp.tune_buffer: false
+  ## Default: notset
+  #tcp.buffer: 4KB
 
 
   ## The socket is set to a busy state when the amount of data queued internally
   ## The socket is set to a busy state when the amount of data queued internally
   ## by the ERTS socket implementation reaches this limit.
   ## by the ERTS socket implementation reaches this limit.
@@ -2085,8 +2079,8 @@ example_common_tcp_options {
   ##
   ##
   ## @doc listeners.<name>.tcp.nodelay
   ## @doc listeners.<name>.tcp.nodelay
   ## ValueType: Boolean
   ## ValueType: Boolean
-  ## Default: true
-  tcp.nodelay: true
+  ## Default: false
+  tcp.nodelay: false
 
 
   ## The SO_REUSEADDR flag for the connections.
   ## The SO_REUSEADDR flag for the connections.
   ##
   ##

+ 1 - 1
apps/emqx/src/emqx_app.erl

@@ -69,7 +69,7 @@ stop(_State) ->
       andalso emqx_listeners:stop().
       andalso emqx_listeners:stop().
 
 
 set_backtrace_depth() ->
 set_backtrace_depth() ->
-    Depth = application:get_env(?APP, backtrace_depth, 16),
+    Depth = emqx:get_env(backtrace_depth, 16),
     _ = erlang:system_flag(backtrace_depth, Depth),
     _ = erlang:system_flag(backtrace_depth, Depth),
     ok.
     ok.
 
 

+ 1 - 1
apps/emqx/src/emqx_boot.erl

@@ -25,5 +25,5 @@ is_enabled(Mod) ->
     (BootMods = boot_modules()) =:= all orelse lists:member(Mod, BootMods).
     (BootMods = boot_modules()) =:= all orelse lists:member(Mod, BootMods).
 
 
 boot_modules() ->
 boot_modules() ->
-    application:get_env(emqx, boot_modules, ?BOOT_MODULES).
+    emqx:get_env(boot_modules, ?BOOT_MODULES).
 
 

+ 3 - 1
apps/emqx/src/emqx_listeners.erl

@@ -134,7 +134,9 @@ ranch_opts(ListenOn, Opts) ->
     #{num_acceptors => NumAcceptors,
     #{num_acceptors => NumAcceptors,
       max_connections => MaxConnections,
       max_connections => MaxConnections,
       handshake_timeout => maps:get(handshake_timeout, Opts, 15000),
       handshake_timeout => maps:get(handshake_timeout, Opts, 15000),
-      socket_opts => ip_port(ListenOn) ++ SocketOpts}.
+      socket_opts => ip_port(ListenOn) ++
+            %% cowboy don't allow us to set 'reuseaddr'
+            proplists:delete(reuseaddr, SocketOpts)}.
 
 
 ip_port(Port) when is_integer(Port) ->
 ip_port(Port) when is_integer(Port) ->
     [{port, Port}];
     [{port, Port}];

+ 1 - 1
apps/emqx/src/emqx_router.erl

@@ -251,7 +251,7 @@ delete_trie_route(Route = #route{topic = Topic}) ->
 %% @private
 %% @private
 -spec(maybe_trans(function(), list(any())) -> ok | {error, term()}).
 -spec(maybe_trans(function(), list(any())) -> ok | {error, term()}).
 maybe_trans(Fun, Args) ->
 maybe_trans(Fun, Args) ->
-    case persistent_term:get(emqx_route_lock_type) of
+    case emqx_config:get([broker, perf, route_lock_type]) of
         key ->
         key ->
             trans(Fun, Args);
             trans(Fun, Args);
         global ->
         global ->

+ 0 - 5
apps/emqx/src/emqx_router_sup.erl

@@ -33,11 +33,6 @@ init([]) ->
                shutdown => 5000,
                shutdown => 5000,
                type     => worker,
                type     => worker,
                modules  => [emqx_router_helper]},
                modules  => [emqx_router_helper]},
-
-    ok = persistent_term:put(emqx_route_lock_type,
-                             application:get_env(emqx, route_lock_type, key)
-                            ),
-
     %% Router pool
     %% Router pool
     RouterPool = emqx_pool_sup:spec([router_pool, hash,
     RouterPool = emqx_pool_sup:spec([router_pool, hash,
                                      {emqx_router, start_link, []}]),
                                      {emqx_router, start_link, []}]),

+ 5 - 4
apps/emqx/src/emqx_rpc.erl

@@ -53,11 +53,9 @@ cast(Key, Node, Mod, Fun, Args) ->
     filter_result(?RPC:cast(rpc_node({Key, Node}), Mod, Fun, Args)).
     filter_result(?RPC:cast(rpc_node({Key, Node}), Mod, Fun, Args)).
 
 
 rpc_node(Node) when is_atom(Node) ->
 rpc_node(Node) when is_atom(Node) ->
-    ClientNum = application:get_env(gen_rpc, tcp_client_num, ?DefaultClientNum),
-    {Node, rand:uniform(ClientNum)};
+    {Node, rand:uniform(max_client_num())};
 rpc_node({Key, Node}) when is_atom(Node) ->
 rpc_node({Key, Node}) when is_atom(Node) ->
-    ClientNum = application:get_env(gen_rpc, tcp_client_num, ?DefaultClientNum),
-    {Node, erlang:phash2(Key, ClientNum) + 1}.
+    {Node, erlang:phash2(Key, max_client_num()) + 1}.
 
 
 rpc_nodes(Nodes) ->
 rpc_nodes(Nodes) ->
     rpc_nodes(Nodes, []).
     rpc_nodes(Nodes, []).
@@ -72,3 +70,6 @@ filter_result({Error, Reason})
     {badrpc, Reason};
     {badrpc, Reason};
 filter_result(Delivery) ->
 filter_result(Delivery) ->
     Delivery.
     Delivery.
+
+max_client_num() ->
+    emqx_config:get([gen_rpc, tcp_client_num]).

+ 36 - 36
apps/emqx/src/emqx_schema.erl

@@ -84,8 +84,8 @@ fields("cluster") ->
     [ {"name", t(atom(), "ekka.cluster_name", emqxcl)}
     [ {"name", t(atom(), "ekka.cluster_name", emqxcl)}
     , {"discovery_strategy", t(union([manual, static, mcast, dns, etcd, k8s]),
     , {"discovery_strategy", t(union([manual, static, mcast, dns, etcd, k8s]),
         undefined, manual)}
         undefined, manual)}
-    , {"autoclean", t(duration(), "ekka.cluster_autoclean", undefined)}
-    , {"autoheal", t(boolean(), "ekka.cluster_autoheal", false)}
+    , {"autoclean", t(duration(), "ekka.cluster_autoclean", "5m")}
+    , {"autoheal", t(boolean(), "ekka.cluster_autoheal", true)}
     , {"static", ref("static")}
     , {"static", ref("static")}
     , {"mcast", ref("mcast")}
     , {"mcast", ref("mcast")}
     , {"proto_dist", t(union([inet_tcp, inet6_tcp, inet_tls]), "ekka.proto_dist", inet_tcp)}
     , {"proto_dist", t(union([inet_tcp, inet6_tcp, inet_tls]), "ekka.proto_dist", inet_tcp)}
@@ -97,13 +97,13 @@ fields("cluster") ->
     ];
     ];
 
 
 fields("static") ->
 fields("static") ->
-    [ {"seeds", t(hoconsc:array(string()))}];
+    [ {"seeds", t(hoconsc:array(string()), undefined, [])}];
 
 
 fields("mcast") ->
 fields("mcast") ->
     [ {"addr", t(string(), undefined, "239.192.0.1")}
     [ {"addr", t(string(), undefined, "239.192.0.1")}
     , {"ports", t(hoconsc:array(integer()), undefined, [4369, 4370])}
     , {"ports", t(hoconsc:array(integer()), undefined, [4369, 4370])}
     , {"iface", t(string(), undefined, "0.0.0.0")}
     , {"iface", t(string(), undefined, "0.0.0.0")}
-    , {"ttl", t(integer(), undefined, 255)}
+    , {"ttl", t(range(0, 255), undefined, 255)}
     , {"loop", t(boolean(), undefined, true)}
     , {"loop", t(boolean(), undefined, true)}
     , {"sndbuf", t(bytesize(), undefined, "16KB")}
     , {"sndbuf", t(bytesize(), undefined, "16KB")}
     , {"recbuf", t(bytesize(), undefined, "16KB")}
     , {"recbuf", t(bytesize(), undefined, "16KB")}
@@ -111,12 +111,12 @@ fields("mcast") ->
     ];
     ];
 
 
 fields("dns") ->
 fields("dns") ->
-    [ {"name", t(string())}
-    , {"app", t(string())}];
+    [ {"name", t(string(), undefined, "localhost")}
+    , {"app", t(string(), undefined, "emqx")}];
 
 
 fields("etcd") ->
 fields("etcd") ->
     [ {"server", t(comma_separated_list())}
     [ {"server", t(comma_separated_list())}
-    , {"prefix", t(string())}
+    , {"prefix", t(string(), undefined, "emqxcl")}
     , {"node_ttl", t(duration(), undefined, "1m")}
     , {"node_ttl", t(duration(), undefined, "1m")}
     , {"ssl", ref("etcd_ssl")}
     , {"ssl", ref("etcd_ssl")}
     ];
     ];
@@ -126,11 +126,11 @@ fields("etcd_ssl") ->
 
 
 fields("k8s") ->
 fields("k8s") ->
     [ {"apiserver", t(string())}
     [ {"apiserver", t(string())}
-    , {"service_name", t(string())}
+    , {"service_name", t(string(), undefined, "emqx")}
     , {"address_type", t(union([ip, dns, hostname]))}
     , {"address_type", t(union([ip, dns, hostname]))}
-    , {"app_name", t(string())}
-    , {"namespace", t(string())}
-    , {"suffix", t(string(), undefined, "")}
+    , {"app_name", t(string(), undefined, "emqx")}
+    , {"namespace", t(string(), undefined, "default")}
+    , {"suffix", t(string(), undefined, "pod.local")}
     ];
     ];
 
 
 fields("rlog") ->
 fields("rlog") ->
@@ -149,12 +149,12 @@ fields("node") ->
     , {"config_files", t(list(string()), "emqx.config_files",
     , {"config_files", t(list(string()), "emqx.config_files",
         [ filename:join([os:getenv("RUNNER_ETC_DIR"), "emqx.conf"])
         [ filename:join([os:getenv("RUNNER_ETC_DIR"), "emqx.conf"])
         ])}
         ])}
-    , {"global_gc_interval", t(duration_s(), "emqx.global_gc_interval", undefined)}
+    , {"global_gc_interval", t(duration_s(), "emqx.global_gc_interval", "15m")}
     , {"crash_dump_dir", t(file(), "vm_args.-env ERL_CRASH_DUMP", undefined)}
     , {"crash_dump_dir", t(file(), "vm_args.-env ERL_CRASH_DUMP", undefined)}
-    , {"dist_net_ticktime", t(integer(), "vm_args.-kernel net_ticktime", undefined)}
-    , {"dist_listen_min", t(integer(), "kernel.inet_dist_listen_min", undefined)}
-    , {"dist_listen_max", t(integer(), "kernel.inet_dist_listen_max", undefined)}
-    , {"backtrace_depth", t(integer(), "emqx.backtrace_depth", 16)}
+    , {"dist_net_ticktime", t(duration(), "vm_args.-kernel net_ticktime", "2m")}
+    , {"dist_listen_min", t(range(1024, 65535), "kernel.inet_dist_listen_min", 6369)}
+    , {"dist_listen_max", t(range(1024, 65535), "kernel.inet_dist_listen_max", 6369)}
+    , {"backtrace_depth", t(integer(), "emqx.backtrace_depth", 23)}
     ];
     ];
 
 
 fields("rpc") ->
 fields("rpc") ->
@@ -162,7 +162,7 @@ fields("rpc") ->
     , {"async_batch_size", t(integer(), "gen_rpc.max_batch_size", 256)}
     , {"async_batch_size", t(integer(), "gen_rpc.max_batch_size", 256)}
     , {"port_discovery",t(union(manual, stateless), "gen_rpc.port_discovery", stateless)}
     , {"port_discovery",t(union(manual, stateless), "gen_rpc.port_discovery", stateless)}
     , {"tcp_server_port", t(integer(), "gen_rpc.tcp_server_port", 5369)}
     , {"tcp_server_port", t(integer(), "gen_rpc.tcp_server_port", 5369)}
-    , {"tcp_client_num", t(range(0, 255), undefined, 0)}
+    , {"tcp_client_num", t(range(1, 256), undefined, 1)}
     , {"connect_timeout", t(duration(), "gen_rpc.connect_timeout", "5s")}
     , {"connect_timeout", t(duration(), "gen_rpc.connect_timeout", "5s")}
     , {"send_timeout", t(duration(), "gen_rpc.send_timeout", "5s")}
     , {"send_timeout", t(duration(), "gen_rpc.send_timeout", "5s")}
     , {"authentication_timeout", t(duration(), "gen_rpc.authentication_timeout", "5s")}
     , {"authentication_timeout", t(duration(), "gen_rpc.authentication_timeout", "5s")}
@@ -180,7 +180,7 @@ fields("log") ->
     , {"console_handler", ref("console_handler")}
     , {"console_handler", ref("console_handler")}
     , {"file_handlers", ref("file_handlers")}
     , {"file_handlers", ref("file_handlers")}
     , {"time_offset", t(string(), undefined, "system")}
     , {"time_offset", t(string(), undefined, "system")}
-    , {"chars_limit", maybe_infinity(integer())}
+    , {"chars_limit", maybe_infinity(range(1, inf))}
     , {"supervisor_reports", t(union([error, progress]), undefined, error)}
     , {"supervisor_reports", t(union([error, progress]), undefined, error)}
     , {"max_depth", t(union([infinity, integer()]),
     , {"max_depth", t(union([infinity, integer()]),
                       "kernel.error_logger_format_depth", 80)}
                       "kernel.error_logger_format_depth", 80)}
@@ -228,6 +228,7 @@ fields("log_burst_limit") ->
     , {"window_time", t(duration(), undefined, "1s")}
     , {"window_time", t(duration(), undefined, "1s")}
     ];
     ];
 
 
+%% disable lager in case some app deps on it
 fields("lager") ->
 fields("lager") ->
     [ {"handlers", t(string(), "lager.handlers", "")}
     [ {"handlers", t(string(), "lager.handlers", "")}
     , {"crash_log", t(boolean(), "lager.crash_log", false)}
     , {"crash_log", t(boolean(), "lager.crash_log", false)}
@@ -249,7 +250,7 @@ fields("acl") ->
 
 
 fields("acl_cache") ->
 fields("acl_cache") ->
     [ {"enable", t(boolean(), undefined, true)}
     [ {"enable", t(boolean(), undefined, true)}
-    , {"max_size", maybe_infinity(range(1, 1048576), 32)}
+    , {"max_size", t(range(1, 1048576), undefined, 32)}
     , {"ttl", t(duration(), undefined, "1m")}
     , {"ttl", t(duration(), undefined, "1m")}
     ];
     ];
 
 
@@ -257,26 +258,26 @@ fields("mqtt") ->
     [ {"mountpoint", t(binary(), undefined, <<>>)}
     [ {"mountpoint", t(binary(), undefined, <<>>)}
     , {"idle_timeout", maybe_infinity(duration(), "15s")}
     , {"idle_timeout", maybe_infinity(duration(), "15s")}
     , {"max_packet_size", t(bytesize(), undefined, "1MB")}
     , {"max_packet_size", t(bytesize(), undefined, "1MB")}
-    , {"max_clientid_len", t(integer(), undefined, 65535)}
-    , {"max_topic_levels", t(integer(), undefined, 65535)}
+    , {"max_clientid_len", t(range(23, 65535), undefined, 65535)}
+    , {"max_topic_levels", t(range(1, 65535), undefined, 65535)}
     , {"max_qos_allowed", t(range(0, 2), undefined, 2)}
     , {"max_qos_allowed", t(range(0, 2), undefined, 2)}
-    , {"max_topic_alias", t(integer(), undefined, 65535)}
+    , {"max_topic_alias", t(range(0, 65535), undefined, 65535)}
     , {"retain_available", t(boolean(), undefined, true)}
     , {"retain_available", t(boolean(), undefined, true)}
     , {"wildcard_subscription", t(boolean(), undefined, true)}
     , {"wildcard_subscription", t(boolean(), undefined, true)}
     , {"shared_subscription", t(boolean(), undefined, true)}
     , {"shared_subscription", t(boolean(), undefined, true)}
-    , {"ignore_loop_deliver", t(boolean())}
+    , {"ignore_loop_deliver", t(boolean(), undefined, false)}
     , {"strict_mode", t(boolean(), undefined, false)}
     , {"strict_mode", t(boolean(), undefined, false)}
     , {"response_information", t(string(), undefined, "")}
     , {"response_information", t(string(), undefined, "")}
     , {"server_keepalive", maybe_disabled(integer())}
     , {"server_keepalive", maybe_disabled(integer())}
     , {"keepalive_backoff", t(float(), undefined, 0.75)}
     , {"keepalive_backoff", t(float(), undefined, 0.75)}
-    , {"max_subscriptions", maybe_infinity(integer())}
+    , {"max_subscriptions", maybe_infinity(range(1, inf))}
     , {"upgrade_qos", t(boolean(), undefined, false)}
     , {"upgrade_qos", t(boolean(), undefined, false)}
-    , {"max_inflight", t(range(1, 65535))}
+    , {"max_inflight", t(range(1, 65535), undefined, 32)}
     , {"retry_interval", t(duration_s(), undefined, "30s")}
     , {"retry_interval", t(duration_s(), undefined, "30s")}
-    , {"max_awaiting_rel", maybe_infinity(duration())}
+    , {"max_awaiting_rel", maybe_infinity(integer(), 100)}
     , {"await_rel_timeout", t(duration_s(), undefined, "300s")}
     , {"await_rel_timeout", t(duration_s(), undefined, "300s")}
     , {"session_expiry_interval", t(duration_s(), undefined, "2h")}
     , {"session_expiry_interval", t(duration_s(), undefined, "2h")}
-    , {"max_mqueue_len", maybe_infinity(integer(), 1000)}
+    , {"max_mqueue_len", maybe_infinity(range(0, inf), 1000)}
     , {"mqueue_priorities", maybe_disabled(map())}
     , {"mqueue_priorities", maybe_disabled(map())}
     , {"mqueue_default_priority", t(union(highest, lowest), undefined, lowest)}
     , {"mqueue_default_priority", t(union(highest, lowest), undefined, lowest)}
     , {"mqueue_store_qos0", t(boolean(), undefined, true)}
     , {"mqueue_store_qos0", t(boolean(), undefined, true)}
@@ -378,7 +379,7 @@ fields("mqtt_quic_listener") ->
     , {"keyfile", t(string(), undefined, undefined)}
     , {"keyfile", t(string(), undefined, undefined)}
     , {"ciphers", t(comma_separated_list(), undefined, "TLS_AES_256_GCM_SHA384,"
     , {"ciphers", t(comma_separated_list(), undefined, "TLS_AES_256_GCM_SHA384,"
                     "TLS_AES_128_GCM_SHA256,TLS_CHACHA20_POLY1305_SHA256")}
                     "TLS_AES_128_GCM_SHA256,TLS_CHACHA20_POLY1305_SHA256")}
-    , {"idle_timeout", t(duration(), undefined, 60000)}
+    , {"idle_timeout", t(duration(), undefined, "15s")}
     ] ++ base_listener();
     ] ++ base_listener();
 
 
 fields("ws_opts") ->
 fields("ws_opts") ->
@@ -406,10 +407,9 @@ fields("tcp_opts") ->
     , {"recbuf", t(bytesize())}
     , {"recbuf", t(bytesize())}
     , {"sndbuf", t(bytesize())}
     , {"sndbuf", t(bytesize())}
     , {"buffer", t(bytesize())}
     , {"buffer", t(bytesize())}
-    , {"tune_buffer", t(boolean())}
     , {"high_watermark", t(bytesize(), undefined, "1MB")}
     , {"high_watermark", t(bytesize(), undefined, "1MB")}
-    , {"nodelay", t(boolean())}
-    , {"reuseaddr", t(boolean())}
+    , {"nodelay", t(boolean(), undefined, false)}
+    , {"reuseaddr", t(boolean(), undefined, true)}
     ];
     ];
 
 
 fields("ssl_opts") ->
 fields("ssl_opts") ->
@@ -470,7 +470,7 @@ fields("broker") ->
     ];
     ];
 
 
 fields("perf") ->
 fields("perf") ->
-    [ {"route_lock_type", t(union([key, tab, global]), "emqx.route_lock_type", key)}
+    [ {"route_lock_type", t(union([key, tab, global]), undefined, key)}
     , {"trie_compaction", t(boolean(), "emqx.trie_compaction", true)}
     , {"trie_compaction", t(boolean(), "emqx.trie_compaction", true)}
     ];
     ];
 
 
@@ -484,10 +484,10 @@ fields("sysmon_vm") ->
     , {"process_high_watermark", t(percent(), undefined, "80%")}
     , {"process_high_watermark", t(percent(), undefined, "80%")}
     , {"process_low_watermark", t(percent(), undefined, "60%")}
     , {"process_low_watermark", t(percent(), undefined, "60%")}
     , {"long_gc", maybe_disabled(duration())}
     , {"long_gc", maybe_disabled(duration())}
-    , {"long_schedule", maybe_disabled(duration(), 240)}
-    , {"large_heap", maybe_disabled(bytesize(), "8MB")}
+    , {"long_schedule", maybe_disabled(duration(), "240ms")}
+    , {"large_heap", maybe_disabled(bytesize(), "32MB")}
     , {"busy_dist_port", t(boolean(), undefined, true)}
     , {"busy_dist_port", t(boolean(), undefined, true)}
-    , {"busy_port", t(boolean(), undefined, false)}
+    , {"busy_port", t(boolean(), undefined, true)}
     ];
     ];
 
 
 fields("sysmon_os") ->
 fields("sysmon_os") ->
@@ -540,7 +540,7 @@ tr_logger_level(Conf) -> conf_get("log.primary_level", Conf).
 
 
 tr_logger(Conf) ->
 tr_logger(Conf) ->
     CharsLimit = case conf_get("log.chars_limit", Conf) of
     CharsLimit = case conf_get("log.chars_limit", Conf) of
-                     -1 -> unlimited;
+                     infinity -> unlimited;
                      V -> V
                      V -> V
                  end,
                  end,
     SingleLine = conf_get("log.single_line", Conf),
     SingleLine = conf_get("log.single_line", Conf),