diff --git a/apps/emqx_rule_engine/src/emqx_rule_engine.erl b/apps/emqx_rule_engine/src/emqx_rule_engine.erl index 3621a2442..02781ca9b 100644 --- a/apps/emqx_rule_engine/src/emqx_rule_engine.erl +++ b/apps/emqx_rule_engine/src/emqx_rule_engine.erl @@ -468,9 +468,14 @@ may_update_rule_params(Rule, Params = #{rawsql := SQL}) -> maps:remove(rawsql, Params)); Reason -> throw(Reason) end; -may_update_rule_params(Rule, Params = #{enabled := Enabled}) -> - Enabled andalso refresh_rule(Rule), - may_update_rule_params(Rule#rule{enabled = Enabled}, maps:remove(enabled, Params)); +may_update_rule_params(Rule = #rule{enabled = OldE, actions = Actions}, + Params = #{enabled := ToE}) -> + case {OldE, ToE} of + {false, true} -> refresh_rule(Rule); + {true, false} -> clear_actions(Actions); + _ -> ok + end, + may_update_rule_params(Rule#rule{enabled = ToE}, maps:remove(enabled, Params)); 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, Params = #{on_action_failed := OnFailed}) -> diff --git a/apps/emqx_rule_engine/test/emqx_rule_engine_SUITE.erl b/apps/emqx_rule_engine/test/emqx_rule_engine_SUITE.erl index cc45f3a3b..456438b6d 100644 --- a/apps/emqx_rule_engine/test/emqx_rule_engine_SUITE.erl +++ b/apps/emqx_rule_engine/test/emqx_rule_engine_SUITE.erl @@ -77,6 +77,7 @@ groups() -> t_add_get_remove_rules, t_create_existing_rule, t_update_rule, + t_disable_rule, t_get_rules_for, t_get_rules_for_2, t_get_rules_with_same_event,