fix(rule_engine): change the rule state when force enabled/disabled

This commit is contained in:
Shawn 2021-04-27 09:55:09 +08:00 committed by turtleDeng
parent 18688da0c1
commit 7198c018e2
2 changed files with 16 additions and 17 deletions

View File

@ -388,15 +388,10 @@ refresh_resource(#resource{id = ResId}) ->
-spec(refresh_rules() -> ok). -spec(refresh_rules() -> ok).
refresh_rules() -> refresh_rules() ->
lists:foreach(fun(#rule{id = RuleId} = Rule) -> lists:foreach(fun(#rule{} = Rule) ->
try refresh_rule(Rule) try refresh_rule(Rule)
catch Error:Reason:ST -> catch _:_ ->
emqx_rule_registry:add_rule(Rule#rule{enabled = false, state = force_down}), emqx_rule_registry:add_rule(Rule#rule{enabled = false, state = refresh_failed_at_bootup})
logger:error(
"Can not re-build rule ~s. The rule is force disabled. "
"Fix the issue and enable it manually. "
"Reason: ~0p, Stacktrace: ~0p",
[RuleId, {Error,Reason}, ST])
end end
end, emqx_rule_registry:get_rules()). end, emqx_rule_registry:get_rules()).
@ -468,14 +463,18 @@ may_update_rule_params(Rule, Params = #{rawsql := SQL}) ->
maps:remove(rawsql, Params)); maps:remove(rawsql, Params));
Reason -> throw(Reason) Reason -> throw(Reason)
end; end;
may_update_rule_params(Rule = #rule{enabled = OldEnb, actions = Actions}, may_update_rule_params(Rule = #rule{enabled = OldEnb, actions = Actions, state = OldState},
Params = #{enabled := NewEnb}) -> Params = #{enabled := NewEnb}) ->
case {OldEnb, NewEnb} of State = case {OldEnb, NewEnb} of
{false, true} -> refresh_rule(Rule); {false, true} ->
{true, false} -> clear_actions(Actions); refresh_rule(Rule),
_ -> ok force_enabled;
end, {true, false} ->
may_update_rule_params(Rule#rule{enabled = NewEnb}, maps:remove(enabled, Params)); clear_actions(Actions),
force_disabled;
_NoChange -> OldState
end,
may_update_rule_params(Rule#rule{enabled = NewEnb, state = State}, maps:remove(enabled, Params));
may_update_rule_params(Rule, Params = #{description := Descr}) -> may_update_rule_params(Rule, Params = #{description := Descr}) ->
may_update_rule_params(Rule#rule{description = Descr}, maps:remove(description, Params)); may_update_rule_params(Rule#rule{description = Descr}, maps:remove(description, Params));
may_update_rule_params(Rule, Params = #{on_action_failed := OnFailed}) -> may_update_rule_params(Rule, Params = #{on_action_failed := OnFailed}) ->

View File

@ -119,7 +119,7 @@ retry_loop(resource, ResId, Interval) ->
enable_rules_of_resource(ResId) -> enable_rules_of_resource(ResId) ->
lists:foreach( lists:foreach(
fun (#rule{enabled = false, state = force_down} = Rule) -> fun (#rule{enabled = false, state = refresh_failed_at_bootup} = Rule) ->
emqx_rule_registry:add_rule(Rule#rule{enabled = true}); emqx_rule_registry:add_rule(Rule#rule{enabled = true, state = normal});
(_) -> ok (_) -> ok
end, emqx_rule_registry:find_rules_depends_on_resource(ResId)). end, emqx_rule_registry:find_rules_depends_on_resource(ResId)).