diff --git a/apps/emqx_rule_engine/src/emqx_rule_engine.erl b/apps/emqx_rule_engine/src/emqx_rule_engine.erl index 45918bcde..07827ed1f 100644 --- a/apps/emqx_rule_engine/src/emqx_rule_engine.erl +++ b/apps/emqx_rule_engine/src/emqx_rule_engine.erl @@ -470,10 +470,10 @@ may_update_rule_params(Rule = #rule{enabled = OldEnb, actions = Actions, state = State = case {OldEnb, NewEnb} of {false, true} -> refresh_rule(Rule), - force_enabled; + force_changed; {true, false} -> clear_actions(Actions), - force_disabled; + force_changed; _NoChange -> OldState end, may_update_rule_params(Rule#rule{enabled = NewEnb, state = State}, maps:remove(enabled, Params)); diff --git a/apps/emqx_rule_engine/src/emqx_rule_monitor.erl b/apps/emqx_rule_engine/src/emqx_rule_monitor.erl index b30b66ccb..ed3b23395 100644 --- a/apps/emqx_rule_engine/src/emqx_rule_monitor.erl +++ b/apps/emqx_rule_engine/src/emqx_rule_monitor.erl @@ -105,7 +105,7 @@ retry_loop(resource, ResId, Interval) -> {ok, #resource_type{on_create = {M, F}}} = emqx_rule_registry:find_resource_type(Type), ok = emqx_rule_engine:init_resource(M, F, ResId, Config), - enable_rules_of_resource(ResId) + refresh_and_enable_rules_of_resource(ResId) catch Err:Reason:ST -> ?LOG(warning, "init_resource failed: ~p, ~0p", @@ -117,9 +117,11 @@ retry_loop(resource, ResId, Interval) -> ok end. -enable_rules_of_resource(ResId) -> +refresh_and_enable_rules_of_resource(ResId) -> lists:foreach( - fun (#rule{enabled = false, state = refresh_failed_at_bootup} = Rule) -> - emqx_rule_registry:add_rule(Rule#rule{enabled = true, state = normal}); + fun (#rule{id = Id, enabled = false, state = refresh_failed_at_bootup} = Rule) -> + emqx_rule_engine:refresh_rule(Rule), + emqx_rule_registry:add_rule(Rule#rule{enabled = true, state = normal}), + ?LOG(info, "rule ~s is refreshed and re-enabled", [Id]); (_) -> ok end, emqx_rule_registry:find_rules_depends_on_resource(ResId)).