فهرست منبع

fix: zones api default value

Zhongwen Deng 2 سال پیش
والد
کامیت
df4a0afdf5

+ 16 - 1
apps/emqx/src/emqx_mqueue.erl

@@ -129,7 +129,7 @@ init(Opts = #{max_len := MaxLen0, store_qos0 := Qos0}) ->
     #mqueue{
     #mqueue{
         max_len = MaxLen,
         max_len = MaxLen,
         store_qos0 = Qos0,
         store_qos0 = Qos0,
-        p_table = get_opt(priorities, Opts, ?NO_PRIORITY_TABLE),
+        p_table = p_table(get_opt(priorities, Opts, ?NO_PRIORITY_TABLE)),
         default_p = get_priority_opt(Opts),
         default_p = get_priority_opt(Opts),
         shift_opts = get_shift_opt(Opts)
         shift_opts = get_shift_opt(Opts)
     }.
     }.
@@ -295,3 +295,18 @@ get_shift_opt(Opts) ->
         multiplier = Mult,
         multiplier = Mult,
         base = Base
         base = Base
     }.
     }.
+
+%% topic from mqtt.mqueue_priorities(map()) is atom.
+p_table(PTab = #{}) ->
+    maps:fold(
+        fun
+            (Topic, Priority, Acc) when is_atom(Topic) ->
+                maps:put(atom_to_binary(Topic), Priority, Acc);
+            (Topic, Priority, Acc) when is_binary(Topic) ->
+                maps:put(Topic, Priority, Acc)
+        end,
+        #{},
+        PTab
+    );
+p_table(PTab) ->
+    PTab.

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

@@ -609,7 +609,7 @@ fields("mqtt") ->
             )},
             )},
         {"mqueue_priorities",
         {"mqueue_priorities",
             sc(
             sc(
-                hoconsc:union([map(), disabled]),
+                hoconsc:union([disabled, map()]),
                 #{
                 #{
                     default => disabled,
                     default => disabled,
                     desc => ?DESC(mqtt_mqueue_priorities)
                     desc => ?DESC(mqtt_mqueue_priorities)
@@ -657,7 +657,7 @@ fields("mqtt") ->
             )}
             )}
     ];
     ];
 fields("zone") ->
 fields("zone") ->
-    emqx_zone_schema:zone();
+    emqx_zone_schema:zones_without_default();
 fields("flapping_detect") ->
 fields("flapping_detect") ->
     [
     [
         {"enable",
         {"enable",

+ 7 - 5
apps/emqx/src/emqx_zone_schema.erl

@@ -18,7 +18,8 @@
 -include_lib("typerefl/include/types.hrl").
 -include_lib("typerefl/include/types.hrl").
 -include_lib("hocon/include/hoconsc.hrl").
 -include_lib("hocon/include/hoconsc.hrl").
 
 
--export([namespace/0, roots/0, fields/1, desc/1, zone/0, zone_without_hidden/0]).
+-export([namespace/0, roots/0, fields/1, desc/1]).
+-export([zones_without_default/0, global_zone_with_default/0]).
 
 
 namespace() -> zone.
 namespace() -> zone.
 
 
@@ -35,7 +36,7 @@ roots() ->
         "overload_protection"
         "overload_protection"
     ].
     ].
 
 
-zone() ->
+zones_without_default() ->
     Fields = roots(),
     Fields = roots(),
     Hidden = hidden(),
     Hidden = hidden(),
     lists:map(
     lists:map(
@@ -50,8 +51,8 @@ zone() ->
         Fields
         Fields
     ).
     ).
 
 
-zone_without_hidden() ->
-    lists:map(fun(F) -> {F, ?HOCON(?R_REF(F), #{})} end, roots() -- hidden()).
+global_zone_with_default() ->
+    lists:map(fun(F) -> {F, ?HOCON(?R_REF(emqx_schema, F), #{})} end, roots() -- hidden()).
 
 
 hidden() ->
 hidden() ->
     [
     [
@@ -69,9 +70,10 @@ fields(Name) ->
 desc(Name) ->
 desc(Name) ->
     emqx_schema:desc(Name).
     emqx_schema:desc(Name).
 
 
-%% no default values for zone settings
+%% no default values for zone settings, don't required either.
 no_default(Sc) ->
 no_default(Sc) ->
     fun
     fun
         (default) -> undefined;
         (default) -> undefined;
+        (required) -> false;
         (Other) -> hocon_schema:field_schema(Sc, Other)
         (Other) -> hocon_schema:field_schema(Sc, Other)
     end.
     end.

+ 4 - 4
apps/emqx_management/src/emqx_mgmt_api_configs.erl

@@ -132,7 +132,7 @@ schema("/configs/global_zone") ->
         },
         },
         put => #{
         put => #{
             tags => ?TAGS,
             tags => ?TAGS,
-            description => ?DESC(update_globar_zone_configs),
+            description => ?DESC(update_global_zone_configs),
             'requestBody' => Schema,
             'requestBody' => Schema,
             responses => #{
             responses => #{
                 200 => Schema,
                 200 => Schema,
@@ -146,7 +146,7 @@ schema("/configs/limiter") ->
         'operationId' => limiter,
         'operationId' => limiter,
         get => #{
         get => #{
             tags => ?TAGS,
             tags => ?TAGS,
-            description => ?DESC(get_node_level_limiter_congigs),
+            description => ?DESC(get_node_level_limiter_configs),
             responses => #{
             responses => #{
                 200 => hoconsc:mk(hoconsc:ref(emqx_limiter_schema, limiter)),
                 200 => hoconsc:mk(hoconsc:ref(emqx_limiter_schema, limiter)),
                 404 => emqx_dashboard_swagger:error_codes(['NOT_FOUND'], <<"config not found">>)
                 404 => emqx_dashboard_swagger:error_codes(['NOT_FOUND'], <<"config not found">>)
@@ -154,7 +154,7 @@ schema("/configs/limiter") ->
         },
         },
         put => #{
         put => #{
             tags => ?TAGS,
             tags => ?TAGS,
-            description => ?DESC(update_node_level_limiter_congigs),
+            description => ?DESC(update_node_level_limiter_configs),
             'requestBody' => hoconsc:mk(hoconsc:ref(emqx_limiter_schema, limiter)),
             'requestBody' => hoconsc:mk(hoconsc:ref(emqx_limiter_schema, limiter)),
             responses => #{
             responses => #{
                 200 => hoconsc:mk(hoconsc:ref(emqx_limiter_schema, limiter)),
                 200 => hoconsc:mk(hoconsc:ref(emqx_limiter_schema, limiter)),
@@ -356,4 +356,4 @@ global_zone_roots() ->
     lists:map(fun({K, _}) -> list_to_binary(K) end, global_zone_schema()).
     lists:map(fun({K, _}) -> list_to_binary(K) end, global_zone_schema()).
 
 
 global_zone_schema() ->
 global_zone_schema() ->
-    emqx_zone_schema:zone_without_hidden().
+    emqx_zone_schema:global_zone_with_default().

+ 16 - 5
apps/emqx_management/test/emqx_mgmt_api_configs_SUITE.erl

@@ -133,15 +133,24 @@ t_log(_Config) ->
 t_global_zone(_Config) ->
 t_global_zone(_Config) ->
     {ok, Zones} = get_global_zone(),
     {ok, Zones} = get_global_zone(),
     ZonesKeys = lists:map(
     ZonesKeys = lists:map(
-        fun({K, _}) -> list_to_binary(K) end, emqx_zone_schema:zone_without_hidden()
+        fun({K, _}) -> list_to_binary(K) end, emqx_zone_schema:global_zone_with_default()
     ),
     ),
     ?assertEqual(lists:usort(ZonesKeys), lists:usort(maps:keys(Zones))),
     ?assertEqual(lists:usort(ZonesKeys), lists:usort(maps:keys(Zones))),
     ?assertEqual(
     ?assertEqual(
         emqx_config:get_zone_conf(no_default, [mqtt, max_qos_allowed]),
         emqx_config:get_zone_conf(no_default, [mqtt, max_qos_allowed]),
         emqx_utils_maps:deep_get([<<"mqtt">>, <<"max_qos_allowed">>], Zones)
         emqx_utils_maps:deep_get([<<"mqtt">>, <<"max_qos_allowed">>], Zones)
     ),
     ),
-    NewZones = emqx_utils_maps:deep_put([<<"mqtt">>, <<"max_qos_allowed">>], Zones, 1),
-    {ok, #{}} = update_global_zone(NewZones),
+    NewZones1 = emqx_utils_maps:deep_put([<<"mqtt">>, <<"max_qos_allowed">>], Zones, 1),
+    NewZones2 = emqx_utils_maps:deep_remove([<<"mqtt">>, <<"peer_cert_as_clientid">>], NewZones1),
+    {ok, #{<<"mqtt">> := Res}} = update_global_zone(NewZones2),
+    %% Make sure peer_cert_as_clientid is not removed(fill default)
+    ?assertMatch(
+        #{
+            <<"max_qos_allowed">> := 1,
+            <<"peer_cert_as_clientid">> := <<"disabled">>
+        },
+        Res
+    ),
     ?assertEqual(1, emqx_config:get_zone_conf(no_default, [mqtt, max_qos_allowed])),
     ?assertEqual(1, emqx_config:get_zone_conf(no_default, [mqtt, max_qos_allowed])),
     %% Make sure the override config is updated, and remove the default value.
     %% Make sure the override config is updated, and remove the default value.
     ?assertMatch(#{<<"max_qos_allowed">> := 1}, read_conf(<<"mqtt">>)),
     ?assertMatch(#{<<"max_qos_allowed">> := 1}, read_conf(<<"mqtt">>)),
@@ -184,9 +193,11 @@ update_global_zone(Change) ->
 t_zones(_Config) ->
 t_zones(_Config) ->
     {ok, Zones} = get_config("zones"),
     {ok, Zones} = get_config("zones"),
     {ok, #{<<"mqtt">> := OldMqtt} = Zone1} = get_global_zone(),
     {ok, #{<<"mqtt">> := OldMqtt} = Zone1} = get_global_zone(),
-    {ok, #{}} = update_config("zones", Zones#{<<"new_zone">> => Zone1}),
+    Mqtt1 = maps:remove(<<"max_subscriptions">>, OldMqtt),
+    {ok, #{}} = update_config("zones", Zones#{<<"new_zone">> => Zone1#{<<"mqtt">> => Mqtt1}}),
     NewMqtt = emqx_config:get_raw([zones, new_zone, mqtt]),
     NewMqtt = emqx_config:get_raw([zones, new_zone, mqtt]),
-    ?assertEqual(OldMqtt, NewMqtt),
+    %% we remove max_subscription from global zone, so the new zone should not have it.
+    ?assertEqual(Mqtt1, NewMqtt),
     %% delete the new zones
     %% delete the new zones
     {ok, #{}} = update_config("zones", Zones),
     {ok, #{}} = update_config("zones", Zones),
     ?assertEqual(undefined, emqx_config:get_raw([new_zone, mqtt], undefined)),
     ?assertEqual(undefined, emqx_config:get_raw([new_zone, mqtt], undefined)),

+ 8 - 8
rel/i18n/emqx_mgmt_api_configs.hocon

@@ -22,19 +22,19 @@ get_global_zone_configs.desc:
 get_global_zone_configs.label:
 get_global_zone_configs.label:
 """Get the global zone configs"""
 """Get the global zone configs"""
 
 
-update_globar_zone_configs.desc:
-"""Update globbal zone configs"""
-update_globar_zone_configs.label:
-"""Update globbal zone configs"""
+update_global_zone_configs.desc:
+"""Update global zone configs"""
+update_global_zone_configs.label:
+"""Update global zone configs"""
 
 
-get_node_level_limiter_congigs.desc:
+get_node_level_limiter_configs.desc:
 """Get the node-level limiter configs"""
 """Get the node-level limiter configs"""
-get_node_level_limiter_congigs.label:
+get_node_level_limiter_configs.label:
 """Get the node-level limiter configs"""
 """Get the node-level limiter configs"""
 
 
-update_node_level_limiter_congigs.desc:
+update_node_level_limiter_configs.desc:
 """Update the node-level limiter configs"""
 """Update the node-level limiter configs"""
-update_node_level_limiter_congigs.label:
+update_node_level_limiter_configs.label:
 """Update the node-level limiter configs"""
 """Update the node-level limiter configs"""
 
 
 }
 }