From 18688da0c13df674dbab58673e4c3e5589581455 Mon Sep 17 00:00:00 2001 From: Shawn <506895667@qq.com> Date: Mon, 26 Apr 2021 22:50:06 +0800 Subject: [PATCH] fix(rule_engine): only auto re-enable the rule when it was force disabled --- apps/emqx_rule_engine/include/rule_engine.hrl | 1 + apps/emqx_rule_engine/src/emqx_rule_engine.erl | 13 +++++++------ apps/emqx_rule_engine/src/emqx_rule_monitor.erl | 2 +- 3 files changed, 9 insertions(+), 7 deletions(-) diff --git a/apps/emqx_rule_engine/include/rule_engine.hrl b/apps/emqx_rule_engine/include/rule_engine.hrl index 226c718e0..568724263 100644 --- a/apps/emqx_rule_engine/include/rule_engine.hrl +++ b/apps/emqx_rule_engine/include/rule_engine.hrl @@ -81,6 +81,7 @@ , enabled :: boolean() , created_at :: integer() %% epoch in millisecond precision , description :: binary() + , state = normal :: atom() }). -record(resource, diff --git a/apps/emqx_rule_engine/src/emqx_rule_engine.erl b/apps/emqx_rule_engine/src/emqx_rule_engine.erl index f4eb04d1f..c57b9ca0b 100644 --- a/apps/emqx_rule_engine/src/emqx_rule_engine.erl +++ b/apps/emqx_rule_engine/src/emqx_rule_engine.erl @@ -180,7 +180,8 @@ create_rule(Params = #{rawsql := Sql, actions := ActArgs}) -> actions = Actions, enabled = Enabled, created_at = erlang:system_time(millisecond), - description = maps:get(description, Params, "") + description = maps:get(description, Params, ""), + state = normal }, ok = emqx_rule_registry:add_rule(Rule), ok = emqx_rule_metrics:create_rule_metrics(RuleId), @@ -390,11 +391,11 @@ refresh_rules() -> lists:foreach(fun(#rule{id = RuleId} = Rule) -> try refresh_rule(Rule) catch Error:Reason:ST -> - emqx_rule_registry:add_rule(Rule#rule{enabled = false}), - logger:critical( - "Can not re-build rule ~p: ~0p. The rule is disabled." - "Fix the issue and enable it manually.\n" - "Stacktrace: ~0p", + emqx_rule_registry:add_rule(Rule#rule{enabled = false, state = force_down}), + 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, emqx_rule_registry:get_rules()). diff --git a/apps/emqx_rule_engine/src/emqx_rule_monitor.erl b/apps/emqx_rule_engine/src/emqx_rule_monitor.erl index b24d98bce..33fcb7713 100644 --- a/apps/emqx_rule_engine/src/emqx_rule_monitor.erl +++ b/apps/emqx_rule_engine/src/emqx_rule_monitor.erl @@ -119,7 +119,7 @@ retry_loop(resource, ResId, Interval) -> enable_rules_of_resource(ResId) -> lists:foreach( - fun (#rule{enabled = false} = Rule) -> + fun (#rule{enabled = false, state = force_down} = Rule) -> emqx_rule_registry:add_rule(Rule#rule{enabled = true}); (_) -> ok end, emqx_rule_registry:find_rules_depends_on_resource(ResId)).