Merge pull request #11014 from zhongwencool/flapping-detect-update

fix:update emqx_flapping process's state when update flapping_detect
This commit is contained in:
zhongwencool 2023-06-11 22:23:53 +08:00 committed by GitHub
commit c9bb47a98d
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 16 additions and 4 deletions

View File

@ -930,7 +930,9 @@ maybe_update_zone([RootName | T], RootValue, Value) when is_atom(RootName) ->
end,
ExistingZones
),
persistent_term:put(?PERSIS_KEY(?CONF, zones), NewZones)
ZonesKey = ?PERSIS_KEY(?CONF, zones),
persistent_term:put(ZonesKey, NewZones),
put_config_post_change_actions(ZonesKey, NewZones)
end,
NewRootValue.

View File

@ -138,22 +138,32 @@ t_conf_update(_) ->
t_conf_update_timer(_Config) ->
_ = emqx_flapping:start_link(),
validate_timer([default]),
validate_timer([{default, true}]),
%% change zones
{ok, _} =
emqx:update_config([zones], #{
<<"timer_1">> => #{<<"flapping_detect">> => #{<<"enable">> => true}},
<<"timer_2">> => #{<<"flapping_detect">> => #{<<"enable">> => true}},
<<"timer_3">> => #{<<"flapping_detect">> => #{<<"enable">> => false}}
}),
validate_timer([timer_1, timer_2, timer_3, default]),
validate_timer([{timer_1, true}, {timer_2, true}, {timer_3, false}, {default, true}]),
%% change global flapping_detect
Global = emqx:get_raw_config([flapping_detect]),
{ok, _} = emqx:update_config([flapping_detect], Global#{<<"enable">> => false}),
validate_timer([{timer_1, true}, {timer_2, true}, {timer_3, false}, {default, false}]),
%% reset
{ok, _} = emqx:update_config([flapping_detect], Global#{<<"enable">> => true}),
validate_timer([{timer_1, true}, {timer_2, true}, {timer_3, false}, {default, true}]),
ok.
validate_timer(Names) ->
validate_timer(Lists) ->
{Names, _} = lists:unzip(Lists),
Zones = emqx:get_config([zones]),
?assertEqual(lists:sort(Names), lists:sort(maps:keys(Zones))),
Timers = sys:get_state(emqx_flapping),
maps:foreach(
fun(Name, #{flapping_detect := #{enable := Enable}}) ->
?assertEqual(lists:keyfind(Name, 1, Lists), {Name, Enable}),
?assertEqual(Enable, is_reference(maps:get(Name, Timers)), Timers)
end,
Zones