Browse Source

fix(rule): destroy the actions when disabling the rule (#4232)

Merge the following PR from enterprise version:
https://github.com/emqx/emqx-rule-engine/pull/231
Shawn 5 years ago
parent
commit
6d83bc3e9b

+ 8 - 3
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}) ->

+ 1 - 0
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,