From b6391cf18c7caf78ffa9b2212105f0ba1efe491f Mon Sep 17 00:00:00 2001 From: JianBo He Date: Thu, 28 Dec 2023 11:36:48 +0800 Subject: [PATCH] fix(bridge-http): compatible conf with the error format introduced in 5.3.2 --- .../src/emqx_bridge_http.app.src | 2 +- .../src/emqx_bridge_http_schema.erl | 12 +++- .../emqx_connector/src/emqx_connector.app.src | 2 +- .../src/schema/emqx_connector_schema.erl | 17 ++++- scripts/conf-test/old-confs/e5.3.2.conf | 63 +++++++++++++++++++ 5 files changed, 90 insertions(+), 6 deletions(-) create mode 100644 scripts/conf-test/old-confs/e5.3.2.conf diff --git a/apps/emqx_bridge_http/src/emqx_bridge_http.app.src b/apps/emqx_bridge_http/src/emqx_bridge_http.app.src index a7f8688d4..c03a15b01 100644 --- a/apps/emqx_bridge_http/src/emqx_bridge_http.app.src +++ b/apps/emqx_bridge_http/src/emqx_bridge_http.app.src @@ -1,6 +1,6 @@ {application, emqx_bridge_http, [ {description, "EMQX HTTP Bridge and Connector Application"}, - {vsn, "0.2.0"}, + {vsn, "0.2.1"}, {registered, []}, {applications, [kernel, stdlib, emqx_connector, emqx_resource, ehttpc]}, {env, [{emqx_action_info_modules, [emqx_bridge_http_action_info]}]}, diff --git a/apps/emqx_bridge_http/src/emqx_bridge_http_schema.erl b/apps/emqx_bridge_http/src/emqx_bridge_http_schema.erl index 91ad25d31..d3702bcfd 100644 --- a/apps/emqx_bridge_http/src/emqx_bridge_http_schema.erl +++ b/apps/emqx_bridge_http/src/emqx_bridge_http_schema.erl @@ -97,7 +97,10 @@ fields("http_action") -> required => true, desc => ?DESC("config_parameters_opts") })} - ] ++ emqx_connector_schema:resource_opts_ref(?MODULE, action_resource_opts); + ] ++ + emqx_connector_schema:resource_opts_ref( + ?MODULE, action_resource_opts, fun legacy_action_resource_opts_converter/2 + ); fields(action_resource_opts) -> UnsupportedOpts = [batch_size, batch_time], lists:filter( @@ -342,6 +345,13 @@ mark_request_field_deperecated(Fields) -> Fields ). +legacy_action_resource_opts_converter(Conf, _Opts) when is_map(Conf) -> + %% In e5.3.0, we accidentally added `start_after_created` and `start_timeout` to the action resource opts. + %% Since e5.4.0, we have removed them. This function is used to convert the old config to the new one. + maps:without([<<"start_after_created">>, <<"start_timeout">>], Conf); +legacy_action_resource_opts_converter(Conf, _Opts) -> + Conf. + %%-------------------------------------------------------------------- %% Examples diff --git a/apps/emqx_connector/src/emqx_connector.app.src b/apps/emqx_connector/src/emqx_connector.app.src index 3e781dae0..261c70d34 100644 --- a/apps/emqx_connector/src/emqx_connector.app.src +++ b/apps/emqx_connector/src/emqx_connector.app.src @@ -1,7 +1,7 @@ %% -*- mode: erlang -*- {application, emqx_connector, [ {description, "EMQX Data Integration Connectors"}, - {vsn, "0.1.36"}, + {vsn, "0.1.37"}, {registered, []}, {mod, {emqx_connector_app, []}}, {applications, [ diff --git a/apps/emqx_connector/src/schema/emqx_connector_schema.erl b/apps/emqx_connector/src/schema/emqx_connector_schema.erl index f67cd6991..f203d0d1b 100644 --- a/apps/emqx_connector/src/schema/emqx_connector_schema.erl +++ b/apps/emqx_connector/src/schema/emqx_connector_schema.erl @@ -51,7 +51,8 @@ common_resource_opts_subfields_bin/0, resource_opts_fields/0, resource_opts_fields/1, - resource_opts_ref/2 + resource_opts_ref/2, + resource_opts_ref/3 ]). -export([examples/1]). @@ -528,13 +529,23 @@ status_and_actions_fields() -> } )} ]. - resource_opts_ref(Module, RefName) -> + resource_opts_ref(Module, RefName, undefined). + +resource_opts_ref(Module, RefName, ConverterFun) -> + Meta = + case ConverterFun of + undefined -> + emqx_resource_schema:resource_opts_meta(); + _ -> + M = emqx_resource_schema:resource_opts_meta(), + M#{converter => ConverterFun} + end, [ {resource_opts, mk( ref(Module, RefName), - emqx_resource_schema:resource_opts_meta() + Meta )} ]. diff --git a/scripts/conf-test/old-confs/e5.3.2.conf b/scripts/conf-test/old-confs/e5.3.2.conf new file mode 100644 index 000000000..64badf7ce --- /dev/null +++ b/scripts/conf-test/old-confs/e5.3.2.conf @@ -0,0 +1,63 @@ +actions { + http { + x_WH_D { + connector = connector_x_WH_D + enable = true + parameters { + body = "${clientid}" + headers {} + max_retries = 2 + method = post + path = "" + } + resource_opts { + health_check_interval = 15s + inflight_window = 100 + max_buffer_bytes = 1GB + query_mode = async + request_ttl = 45s + start_after_created = true + start_timeout = 5s + worker_pool_size = 4 + } + } + } +} + +connectors { + http { + connector_x_WH_D { + connect_timeout = 15s + enable = true + enable_pipelining = 100 + headers {content-type = "application/json"} + pool_size = 8 + pool_type = hash + ssl { + ciphers = [] + depth = 10 + enable = false + hibernate_after = 5s + log_level = notice + reuse_sessions = true + secure_renegotiate = true + verify = verify_peer + versions = [tlsv1.3, tlsv1.2] + } + url = "http://127.0.0.1:18083" + } + } +} + +rule_engine { + rules { + x_WH_D { + actions = ["webhook:x_WH_D"] + description = x + enable = true + metadata {created_at = 1699341635802} + name = "" + sql = "SELECT\n *\nFROM\n \"#\",\n \"$events/message_delivered\",\n \"$events/message_acked\"" + } + } +}