From b30f2ea58b42a876eb88e9e45eab7701dcde5ca7 Mon Sep 17 00:00:00 2001 From: "Zaiming (Stone) Shi" Date: Thu, 29 Dec 2022 23:00:24 +0100 Subject: [PATCH] fix(statsd schema): a field is not 'required' when it has 'default' --- apps/emqx/src/emqx_schema.erl | 6 +++++- apps/emqx_statsd/src/emqx_statsd_schema.erl | 6 +----- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/apps/emqx/src/emqx_schema.erl b/apps/emqx/src/emqx_schema.erl index a8e25af8b..31a8f3469 100644 --- a/apps/emqx/src/emqx_schema.erl +++ b/apps/emqx/src/emqx_schema.erl @@ -2369,7 +2369,11 @@ non_empty_string(_) -> {error, invalid_string}. %% hosts can be successfully parsed. %% 3. parsing: Done at runtime in each module which uses this config servers_sc(Meta0, ParseOpts) -> - Required = maps:get(required, Meta0, true), + %% if this filed has a default value + %% then it is not NOT required + %% NOTE: maps:is_key is not the solution beause #{default => undefined} is legit + HasDefault = (maps:get(default, Meta0, undefined) =/= undefined), + Required = maps:get(required, Meta0, not HasDefault), Meta = #{ required => Required, converter => fun convert_servers/2, diff --git a/apps/emqx_statsd/src/emqx_statsd_schema.erl b/apps/emqx_statsd/src/emqx_statsd_schema.erl index 87ca22a5a..7abb64a75 100644 --- a/apps/emqx_statsd/src/emqx_statsd_schema.erl +++ b/apps/emqx_statsd/src/emqx_statsd_schema.erl @@ -41,7 +41,6 @@ fields("statsd") -> boolean(), #{ default => false, - required => true, desc => ?DESC(enable) } )}, @@ -56,25 +55,22 @@ desc(_) -> undefined. server() -> Meta = #{ - required => true, + default => <<"127.0.0.1:8125">>, desc => ?DESC(?FUNCTION_NAME) }, emqx_schema:servers_sc(Meta, ?SERVER_PARSE_OPTS). sample_interval(type) -> emqx_schema:duration_ms(); -sample_interval(required) -> true; sample_interval(default) -> "30s"; sample_interval(desc) -> ?DESC(?FUNCTION_NAME); sample_interval(_) -> undefined. flush_interval(type) -> emqx_schema:duration_ms(); -flush_interval(required) -> true; flush_interval(default) -> "30s"; flush_interval(desc) -> ?DESC(?FUNCTION_NAME); flush_interval(_) -> undefined. tags(type) -> map(); -tags(required) -> false; tags(default) -> #{}; tags(desc) -> ?DESC(?FUNCTION_NAME); tags(_) -> undefined.