From d72348c8ed9c6a066c3fe77732d4227031fd16c0 Mon Sep 17 00:00:00 2001 From: zhongwencool Date: Fri, 15 Sep 2023 16:38:04 +0800 Subject: [PATCH] fix: keep builtin_console actions not complain args --- .../src/emqx_rule_actions.erl | 14 ++++++++----- .../src/emqx_rule_engine.app.src | 2 +- .../src/emqx_rule_engine_schema.erl | 21 ++++++++++++++++--- 3 files changed, 28 insertions(+), 9 deletions(-) diff --git a/apps/emqx_rule_engine/src/emqx_rule_actions.erl b/apps/emqx_rule_engine/src/emqx_rule_actions.erl index ce74203a4..276f8d0e0 100644 --- a/apps/emqx_rule_engine/src/emqx_rule_actions.erl +++ b/apps/emqx_rule_engine/src/emqx_rule_actions.erl @@ -45,11 +45,15 @@ %%-------------------------------------------------------------------- parse_action(#{function := ActionFunc} = Action) -> {Mod, Func} = parse_action_func(ActionFunc), - #{ - mod => Mod, - func => Func, - args => pre_process_args(Mod, Func, maps:get(args, Action, #{})) - }. + Res = #{mod => Mod, func => Func}, + %% builtin_action_console don't have args field. + %% Attempting to save args to the console action config could cause validation issues + case Action of + #{args := Args} -> + Res#{args => pre_process_args(Mod, Func, Args)}; + _ -> + Res + end. %%-------------------------------------------------------------------- %% callbacks of emqx_rule_action diff --git a/apps/emqx_rule_engine/src/emqx_rule_engine.app.src b/apps/emqx_rule_engine/src/emqx_rule_engine.app.src index 3a88a3e57..04ba60378 100644 --- a/apps/emqx_rule_engine/src/emqx_rule_engine.app.src +++ b/apps/emqx_rule_engine/src/emqx_rule_engine.app.src @@ -2,7 +2,7 @@ {application, emqx_rule_engine, [ {description, "EMQX Rule Engine"}, % strict semver, bump manually! - {vsn, "5.0.25"}, + {vsn, "5.0.26"}, {modules, []}, {registered, [emqx_rule_engine_sup, emqx_rule_engine]}, {applications, [kernel, stdlib, rulesql, getopt, emqx_ctl, uuid]}, diff --git a/apps/emqx_rule_engine/src/emqx_rule_engine_schema.erl b/apps/emqx_rule_engine/src/emqx_rule_engine_schema.erl index ba4056421..4398a6384 100644 --- a/apps/emqx_rule_engine/src/emqx_rule_engine_schema.erl +++ b/apps/emqx_rule_engine/src/emqx_rule_engine_schema.erl @@ -98,10 +98,25 @@ fields("builtin_action_republish") -> ]; fields("builtin_action_console") -> [ - {function, ?HOCON(console, #{desc => ?DESC("console_function")})} + {function, ?HOCON(console, #{desc => ?DESC("console_function")})}, %% we may support some args for the console action in the future - %, {args, sc(map(), #{desc => "The arguments of the built-in 'console' action", - % default => #{}})} + + %% "args" needs to be a reserved/ignored field in the schema + %% to maintain compatibility with rule data that may contain + %% it due to a validation bug in previous versions. + + %% The "args" field was not validated by the HOCON schema before 5.2.0, + %% which allowed rules to be created with invalid "args" data. + %% In 5.2.1 the validation was added, + %% so existing rules saved with invalid "args" would now fail validation + %% To maintain backward compatibility for existing rule data that may contain invalid "args", + %% the field needs to be included in the schema even though it is not a valid field. + {args, + ?HOCON(map(), #{ + deprecated => true, + desc => "The arguments of the built-in 'console' action", + default => #{} + })} ]; fields("user_provided_function") -> [