fix(rule_engine): change the rule state when force enabled/disabled
This commit is contained in:
parent
18688da0c1
commit
7198c018e2
|
@ -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}) ->
|
||||||
|
|
|
@ -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)).
|
||||||
|
|
Loading…
Reference in New Issue