From 83e7b30a80f3c36af0653768c3575c1d9b09887d Mon Sep 17 00:00:00 2001 From: Zhongwen Deng Date: Wed, 10 May 2023 09:50:53 +0800 Subject: [PATCH 01/11] feat: deprecate listeners's authn http api --- apps/emqx_authn/src/emqx_authn.app.src | 2 +- apps/emqx_authn/src/emqx_authn_api.erl | 12 ++++++++++++ apps/emqx_authn/src/emqx_authn_user_import_api.erl | 1 + 3 files changed, 14 insertions(+), 1 deletion(-) diff --git a/apps/emqx_authn/src/emqx_authn.app.src b/apps/emqx_authn/src/emqx_authn.app.src index c1d48909c..3e0cf786e 100644 --- a/apps/emqx_authn/src/emqx_authn.app.src +++ b/apps/emqx_authn/src/emqx_authn.app.src @@ -1,7 +1,7 @@ %% -*- mode: erlang -*- {application, emqx_authn, [ {description, "EMQX Authentication"}, - {vsn, "0.1.18"}, + {vsn, "0.1.19"}, {modules, []}, {registered, [emqx_authn_sup, emqx_authn_registry]}, {applications, [kernel, stdlib, emqx_resource, emqx_connector, ehttpc, epgsql, mysql, jose]}, diff --git a/apps/emqx_authn/src/emqx_authn_api.erl b/apps/emqx_authn/src/emqx_authn_api.erl index de856f163..f46718842 100644 --- a/apps/emqx_authn/src/emqx_authn_api.erl +++ b/apps/emqx_authn/src/emqx_authn_api.erl @@ -228,6 +228,7 @@ schema("/listeners/:listener_id/authentication") -> 'operationId' => listener_authenticators, get => #{ tags => ?API_TAGS_SINGLE, + deprecated => true, description => ?DESC(listeners_listener_id_authentication_get), parameters => [param_listener_id()], responses => #{ @@ -239,6 +240,7 @@ schema("/listeners/:listener_id/authentication") -> }, post => #{ tags => ?API_TAGS_SINGLE, + deprecated => true, description => ?DESC(listeners_listener_id_authentication_post), parameters => [param_listener_id()], 'requestBody' => emqx_dashboard_swagger:schema_with_examples( @@ -260,6 +262,7 @@ schema("/listeners/:listener_id/authentication/:id") -> 'operationId' => listener_authenticator, get => #{ tags => ?API_TAGS_SINGLE, + deprecated => true, description => ?DESC(listeners_listener_id_authentication_id_get), parameters => [param_listener_id(), param_auth_id()], responses => #{ @@ -272,6 +275,7 @@ schema("/listeners/:listener_id/authentication/:id") -> }, put => #{ tags => ?API_TAGS_SINGLE, + deprecated => true, description => ?DESC(listeners_listener_id_authentication_id_put), parameters => [param_listener_id(), param_auth_id()], 'requestBody' => emqx_dashboard_swagger:schema_with_examples( @@ -287,6 +291,7 @@ schema("/listeners/:listener_id/authentication/:id") -> }, delete => #{ tags => ?API_TAGS_SINGLE, + deprecated => true, description => ?DESC(listeners_listener_id_authentication_id_delete), parameters => [param_listener_id(), param_auth_id()], responses => #{ @@ -300,6 +305,7 @@ schema("/listeners/:listener_id/authentication/:id/status") -> 'operationId' => listener_authenticator_status, get => #{ tags => ?API_TAGS_SINGLE, + deprecated => true, description => ?DESC(listeners_listener_id_authentication_id_status_get), parameters => [param_listener_id(), param_auth_id()], responses => #{ @@ -330,6 +336,7 @@ schema("/listeners/:listener_id/authentication/:id/position/:position") -> 'operationId' => listener_authenticator_position, put => #{ tags => ?API_TAGS_SINGLE, + deprecated => true, description => ?DESC(listeners_listener_id_authentication_id_position_put), parameters => [param_listener_id(), param_auth_id(), param_position()], responses => #{ @@ -393,6 +400,7 @@ schema("/listeners/:listener_id/authentication/:id/users") -> 'operationId' => listener_authenticator_users, post => #{ tags => ?API_TAGS_SINGLE, + deprecated => true, description => ?DESC(listeners_listener_id_authentication_id_users_post), parameters => [param_auth_id(), param_listener_id()], 'requestBody' => emqx_dashboard_swagger:schema_with_examples( @@ -410,6 +418,7 @@ schema("/listeners/:listener_id/authentication/:id/users") -> }, get => #{ tags => ?API_TAGS_SINGLE, + deprecated => true, description => ?DESC(listeners_listener_id_authentication_id_users_get), parameters => [ param_listener_id(), @@ -479,6 +488,7 @@ schema("/listeners/:listener_id/authentication/:id/users/:user_id") -> 'operationId' => listener_authenticator_user, get => #{ tags => ?API_TAGS_SINGLE, + deprecated => true, description => ?DESC(listeners_listener_id_authentication_id_users_user_id_get), parameters => [param_listener_id(), param_auth_id(), param_user_id()], responses => #{ @@ -491,6 +501,7 @@ schema("/listeners/:listener_id/authentication/:id/users/:user_id") -> }, put => #{ tags => ?API_TAGS_SINGLE, + deprecated => true, description => ?DESC(listeners_listener_id_authentication_id_users_user_id_put), parameters => [param_listener_id(), param_auth_id(), param_user_id()], 'requestBody' => emqx_dashboard_swagger:schema_with_example( @@ -508,6 +519,7 @@ schema("/listeners/:listener_id/authentication/:id/users/:user_id") -> }, delete => #{ tags => ?API_TAGS_SINGLE, + deprecated => true, description => ?DESC(listeners_listener_id_authentication_id_users_user_id_delete), parameters => [param_listener_id(), param_auth_id(), param_user_id()], responses => #{ diff --git a/apps/emqx_authn/src/emqx_authn_user_import_api.erl b/apps/emqx_authn/src/emqx_authn_user_import_api.erl index bab25bb78..86cfc6247 100644 --- a/apps/emqx_authn/src/emqx_authn_user_import_api.erl +++ b/apps/emqx_authn/src/emqx_authn_user_import_api.erl @@ -72,6 +72,7 @@ schema("/listeners/:listener_id/authentication/:id/import_users") -> 'operationId' => listener_authenticator_import_users, post => #{ tags => ?API_TAGS_SINGLE, + deprecated => true, description => ?DESC(listeners_listener_id_authentication_id_import_users_post), parameters => [emqx_authn_api:param_listener_id(), emqx_authn_api:param_auth_id()], 'requestBody' => emqx_dashboard_swagger:file_schema(filename), From 0f979b3d24b7b8b7a6fda3140f234a909486409a Mon Sep 17 00:00:00 2001 From: firest Date: Wed, 10 May 2023 14:05:35 +0800 Subject: [PATCH 02/11] refactor(tdengine): move tdengine bridge into its own app --- apps/emqx_bridge_tdengine/docker-ct | 2 ++ apps/emqx_bridge_tdengine/rebar.config | 8 ++++++++ .../emqx_bridge_tdengine/src/emqx_bridge_tdengine.app.src | 4 ++-- .../emqx_bridge_tdengine/src/emqx_bridge_tdengine.erl | 5 +++-- .../src/emqx_bridge_tdengine_connector.erl | 2 +- .../test/emqx_bridge_tdengine_SUITE.erl | 2 +- lib-ee/emqx_ee_bridge/docker-ct | 1 - lib-ee/emqx_ee_bridge/src/emqx_ee_bridge.app.src | 3 ++- lib-ee/emqx_ee_bridge/src/emqx_ee_bridge.erl | 8 ++++---- lib-ee/emqx_ee_connector/rebar.config | 1 - lib-ee/emqx_ee_connector/src/emqx_ee_connector.app.src | 1 - ...e_bridge_tdengine.hocon => emqx_bridge_tdengine.hocon} | 2 +- ...dengine.hocon => emqx_bridge_tdengine_connector.hocon} | 2 +- ...e_bridge_tdengine.hocon => emqx_bridge_tdengine.hocon} | 2 +- ...dengine.hocon => emqx_bridge_tdengine_connector.hocon} | 2 +- 15 files changed, 27 insertions(+), 18 deletions(-) create mode 100644 apps/emqx_bridge_tdengine/docker-ct create mode 100644 apps/emqx_bridge_tdengine/rebar.config rename lib-ee/emqx_ee_bridge/src/emqx_ee_bridge_tdengine.erl => apps/emqx_bridge_tdengine/src/emqx_bridge_tdengine.erl (95%) rename lib-ee/emqx_ee_connector/src/emqx_ee_connector_tdengine.erl => apps/emqx_bridge_tdengine/src/emqx_bridge_tdengine_connector.erl (99%) rename lib-ee/emqx_ee_bridge/test/emqx_ee_bridge_tdengine_SUITE.erl => apps/emqx_bridge_tdengine/test/emqx_bridge_tdengine_SUITE.erl (99%) rename rel/i18n/{emqx_ee_bridge_tdengine.hocon => emqx_bridge_tdengine.hocon} (97%) rename rel/i18n/{emqx_ee_connector_tdengine.hocon => emqx_bridge_tdengine_connector.hocon} (88%) rename rel/i18n/zh/{emqx_ee_bridge_tdengine.hocon => emqx_bridge_tdengine.hocon} (96%) rename rel/i18n/zh/{emqx_ee_connector_tdengine.hocon => emqx_bridge_tdengine_connector.hocon} (88%) diff --git a/apps/emqx_bridge_tdengine/docker-ct b/apps/emqx_bridge_tdengine/docker-ct new file mode 100644 index 000000000..c6f0bc826 --- /dev/null +++ b/apps/emqx_bridge_tdengine/docker-ct @@ -0,0 +1,2 @@ +toxiproxy +tdengine diff --git a/apps/emqx_bridge_tdengine/rebar.config b/apps/emqx_bridge_tdengine/rebar.config new file mode 100644 index 000000000..72ebca1db --- /dev/null +++ b/apps/emqx_bridge_tdengine/rebar.config @@ -0,0 +1,8 @@ +{erl_opts, [debug_info]}. + +{deps, [ + {tdengine, {git, "https://github.com/emqx/tdengine-client-erl", {tag, "0.1.6"}}}, + {emqx_connector, {path, "../../apps/emqx_connector"}}, + {emqx_resource, {path, "../../apps/emqx_resource"}}, + {emqx_bridge, {path, "../../apps/emqx_bridge"}} +]}. diff --git a/apps/emqx_bridge_tdengine/src/emqx_bridge_tdengine.app.src b/apps/emqx_bridge_tdengine/src/emqx_bridge_tdengine.app.src index 05e8a6f9f..141973e1e 100644 --- a/apps/emqx_bridge_tdengine/src/emqx_bridge_tdengine.app.src +++ b/apps/emqx_bridge_tdengine/src/emqx_bridge_tdengine.app.src @@ -1,8 +1,8 @@ {application, emqx_bridge_tdengine, [ {description, "EMQX Enterprise TDEngine Bridge"}, - {vsn, "0.1.0"}, + {vsn, "0.1.1"}, {registered, []}, - {applications, [kernel, stdlib]}, + {applications, [kernel, stdlib, tdengine]}, {env, []}, {modules, []}, {links, []} diff --git a/lib-ee/emqx_ee_bridge/src/emqx_ee_bridge_tdengine.erl b/apps/emqx_bridge_tdengine/src/emqx_bridge_tdengine.erl similarity index 95% rename from lib-ee/emqx_ee_bridge/src/emqx_ee_bridge_tdengine.erl rename to apps/emqx_bridge_tdengine/src/emqx_bridge_tdengine.erl index 777bc4f2b..abdc26592 100644 --- a/lib-ee/emqx_ee_bridge/src/emqx_ee_bridge_tdengine.erl +++ b/apps/emqx_bridge_tdengine/src/emqx_bridge_tdengine.erl @@ -1,7 +1,7 @@ %%-------------------------------------------------------------------- %% Copyright (c) 2023 EMQ Technologies Co., Ltd. All Rights Reserved. %%-------------------------------------------------------------------- --module(emqx_ee_bridge_tdengine). +-module(emqx_bridge_tdengine). -include_lib("typerefl/include/types.hrl"). -include_lib("hocon/include/hoconsc.hrl"). @@ -81,7 +81,8 @@ fields("config") -> binary(), #{desc => ?DESC("local_topic"), default => undefined} )} - ] ++ emqx_resource_schema:fields("resource_opts") ++ emqx_ee_connector_tdengine:fields(config); + ] ++ emqx_resource_schema:fields("resource_opts") ++ + emqx_bridge_tdengine_connector:fields(config); fields("post") -> [type_field(), name_field() | fields("config")]; fields("put") -> diff --git a/lib-ee/emqx_ee_connector/src/emqx_ee_connector_tdengine.erl b/apps/emqx_bridge_tdengine/src/emqx_bridge_tdengine_connector.erl similarity index 99% rename from lib-ee/emqx_ee_connector/src/emqx_ee_connector_tdengine.erl rename to apps/emqx_bridge_tdengine/src/emqx_bridge_tdengine_connector.erl index 09cbd8db8..46a70e8b6 100644 --- a/lib-ee/emqx_ee_connector/src/emqx_ee_connector_tdengine.erl +++ b/apps/emqx_bridge_tdengine/src/emqx_bridge_tdengine_connector.erl @@ -2,7 +2,7 @@ %% Copyright (c) 2023 EMQ Technologies Co., Ltd. All Rights Reserved. %%-------------------------------------------------------------------- --module(emqx_ee_connector_tdengine). +-module(emqx_bridge_tdengine_connector). -behaviour(emqx_resource). diff --git a/lib-ee/emqx_ee_bridge/test/emqx_ee_bridge_tdengine_SUITE.erl b/apps/emqx_bridge_tdengine/test/emqx_bridge_tdengine_SUITE.erl similarity index 99% rename from lib-ee/emqx_ee_bridge/test/emqx_ee_bridge_tdengine_SUITE.erl rename to apps/emqx_bridge_tdengine/test/emqx_bridge_tdengine_SUITE.erl index 36ed10f38..1b8db1aaa 100644 --- a/lib-ee/emqx_ee_bridge/test/emqx_ee_bridge_tdengine_SUITE.erl +++ b/apps/emqx_bridge_tdengine/test/emqx_bridge_tdengine_SUITE.erl @@ -2,7 +2,7 @@ %% Copyright (c) 2022-2023 EMQ Technologies Co., Ltd. All Rights Reserved. %%-------------------------------------------------------------------- --module(emqx_ee_bridge_tdengine_SUITE). +-module(emqx_bridge_tdengine_SUITE). -compile(nowarn_export_all). -compile(export_all). diff --git a/lib-ee/emqx_ee_bridge/docker-ct b/lib-ee/emqx_ee_bridge/docker-ct index 37a5c9765..faff109eb 100644 --- a/lib-ee/emqx_ee_bridge/docker-ct +++ b/lib-ee/emqx_ee_bridge/docker-ct @@ -6,6 +6,5 @@ mysql redis redis_cluster pgsql -tdengine clickhouse dynamo diff --git a/lib-ee/emqx_ee_bridge/src/emqx_ee_bridge.app.src b/lib-ee/emqx_ee_bridge/src/emqx_ee_bridge.app.src index decf7d033..df1d778fc 100644 --- a/lib-ee/emqx_ee_bridge/src/emqx_ee_bridge.app.src +++ b/lib-ee/emqx_ee_bridge/src/emqx_ee_bridge.app.src @@ -14,7 +14,8 @@ emqx_bridge_pulsar, emqx_bridge_sqlserver, emqx_bridge_rocketmq, - emqx_bridge_rabbitmq + emqx_bridge_rabbitmq, + emqx_bridge_tdengine ]}, {env, []}, {modules, []}, diff --git a/lib-ee/emqx_ee_bridge/src/emqx_ee_bridge.erl b/lib-ee/emqx_ee_bridge/src/emqx_ee_bridge.erl index 80c627cc8..9761123da 100644 --- a/lib-ee/emqx_ee_bridge/src/emqx_ee_bridge.erl +++ b/lib-ee/emqx_ee_bridge/src/emqx_ee_bridge.erl @@ -31,7 +31,7 @@ api_schemas(Method) -> ref(emqx_ee_bridge_redis, Method ++ "_cluster"), ref(emqx_ee_bridge_timescale, Method), ref(emqx_ee_bridge_matrix, Method), - ref(emqx_ee_bridge_tdengine, Method), + ref(emqx_bridge_tdengine, Method), ref(emqx_ee_bridge_clickhouse, Method), ref(emqx_ee_bridge_dynamo, Method), ref(emqx_bridge_rocketmq, Method), @@ -56,7 +56,7 @@ schema_modules() -> emqx_ee_bridge_pgsql, emqx_ee_bridge_timescale, emqx_ee_bridge_matrix, - emqx_ee_bridge_tdengine, + emqx_bridge_tdengine, emqx_ee_bridge_clickhouse, emqx_ee_bridge_dynamo, emqx_bridge_rocketmq, @@ -100,7 +100,7 @@ resource_type(redis_cluster) -> emqx_ee_connector_redis; resource_type(pgsql) -> emqx_connector_pgsql; resource_type(timescale) -> emqx_connector_pgsql; resource_type(matrix) -> emqx_connector_pgsql; -resource_type(tdengine) -> emqx_ee_connector_tdengine; +resource_type(tdengine) -> emqx_bridge_tdengine_connector; resource_type(clickhouse) -> emqx_ee_connector_clickhouse; resource_type(dynamo) -> emqx_ee_connector_dynamo; resource_type(rocketmq) -> emqx_bridge_rocketmq_connector; @@ -139,7 +139,7 @@ fields(bridges) -> )}, {tdengine, mk( - hoconsc:map(name, ref(emqx_ee_bridge_tdengine, "config")), + hoconsc:map(name, ref(emqx_bridge_tdengine, "config")), #{ desc => <<"TDengine Bridge Config">>, required => false diff --git a/lib-ee/emqx_ee_connector/rebar.config b/lib-ee/emqx_ee_connector/rebar.config index a61ed9630..a9c2b4181 100644 --- a/lib-ee/emqx_ee_connector/rebar.config +++ b/lib-ee/emqx_ee_connector/rebar.config @@ -2,7 +2,6 @@ {deps, [ {hstreamdb_erl, {git, "https://github.com/hstreamdb/hstreamdb_erl.git", {tag, "0.2.5"}}}, {influxdb, {git, "https://github.com/emqx/influxdb-client-erl", {tag, "1.1.9"}}}, - {tdengine, {git, "https://github.com/emqx/tdengine-client-erl", {tag, "0.1.6"}}}, {clickhouse, {git, "https://github.com/emqx/clickhouse-client-erl", {tag, "0.3"}}}, {erlcloud, {git, "https://github.com/emqx/erlcloud.git", {tag,"3.5.16-emqx-1"}}}, {emqx, {path, "../../apps/emqx"}}, diff --git a/lib-ee/emqx_ee_connector/src/emqx_ee_connector.app.src b/lib-ee/emqx_ee_connector/src/emqx_ee_connector.app.src index d02995975..32dcc084c 100644 --- a/lib-ee/emqx_ee_connector/src/emqx_ee_connector.app.src +++ b/lib-ee/emqx_ee_connector/src/emqx_ee_connector.app.src @@ -8,7 +8,6 @@ ecpool, hstreamdb_erl, influxdb, - tdengine, clickhouse, erlcloud ]}, diff --git a/rel/i18n/emqx_ee_bridge_tdengine.hocon b/rel/i18n/emqx_bridge_tdengine.hocon similarity index 97% rename from rel/i18n/emqx_ee_bridge_tdengine.hocon rename to rel/i18n/emqx_bridge_tdengine.hocon index e6ece89c8..2d1059d28 100644 --- a/rel/i18n/emqx_ee_bridge_tdengine.hocon +++ b/rel/i18n/emqx_bridge_tdengine.hocon @@ -1,4 +1,4 @@ -emqx_ee_bridge_tdengine { +emqx_bridge_tdengine { config_enable.desc: """Enable or disable this bridge""" diff --git a/rel/i18n/emqx_ee_connector_tdengine.hocon b/rel/i18n/emqx_bridge_tdengine_connector.hocon similarity index 88% rename from rel/i18n/emqx_ee_connector_tdengine.hocon rename to rel/i18n/emqx_bridge_tdengine_connector.hocon index 9a34b32ce..9c42dbaa0 100644 --- a/rel/i18n/emqx_ee_connector_tdengine.hocon +++ b/rel/i18n/emqx_bridge_tdengine_connector.hocon @@ -1,4 +1,4 @@ -emqx_ee_connector_tdengine { +emqx_bridge_tdengine_connector { server.desc: """The IPv4 or IPv6 address or the hostname to connect to.
diff --git a/rel/i18n/zh/emqx_ee_bridge_tdengine.hocon b/rel/i18n/zh/emqx_bridge_tdengine.hocon similarity index 96% rename from rel/i18n/zh/emqx_ee_bridge_tdengine.hocon rename to rel/i18n/zh/emqx_bridge_tdengine.hocon index 5e417a1c7..8d0c7a24e 100644 --- a/rel/i18n/zh/emqx_ee_bridge_tdengine.hocon +++ b/rel/i18n/zh/emqx_bridge_tdengine.hocon @@ -1,4 +1,4 @@ -emqx_ee_bridge_tdengine { +emqx_bridge_tdengine { config_enable.desc: """启用/禁用桥接""" diff --git a/rel/i18n/zh/emqx_ee_connector_tdengine.hocon b/rel/i18n/zh/emqx_bridge_tdengine_connector.hocon similarity index 88% rename from rel/i18n/zh/emqx_ee_connector_tdengine.hocon rename to rel/i18n/zh/emqx_bridge_tdengine_connector.hocon index f3064aeb5..6465bff35 100644 --- a/rel/i18n/zh/emqx_ee_connector_tdengine.hocon +++ b/rel/i18n/zh/emqx_bridge_tdengine_connector.hocon @@ -1,4 +1,4 @@ -emqx_ee_connector_tdengine { +emqx_bridge_tdengine_connector { server.desc: """将要连接的 IPv4 或 IPv6 地址,或者主机名。
From cabbf0f768ed87ae92c9af80834aa44f6455da64 Mon Sep 17 00:00:00 2001 From: firest Date: Wed, 10 May 2023 14:14:15 +0800 Subject: [PATCH 03/11] chore: update changes --- changes/ee/feat-10650.en.md | 1 + 1 file changed, 1 insertion(+) create mode 100644 changes/ee/feat-10650.en.md diff --git a/changes/ee/feat-10650.en.md b/changes/ee/feat-10650.en.md new file mode 100644 index 000000000..1744fc010 --- /dev/null +++ b/changes/ee/feat-10650.en.md @@ -0,0 +1 @@ +Refactor the directory structure of the TDEngine data bridge. From 08af90daa9e27301248d860d2f05b1669ffb0020 Mon Sep 17 00:00:00 2001 From: Kjell Winblad Date: Wed, 10 May 2023 10:38:40 +0200 Subject: [PATCH 04/11] fix: the iotdb password field so it has the password format --- apps/emqx_bridge_iotdb/src/emqx_bridge_iotdb.erl | 1 + 1 file changed, 1 insertion(+) diff --git a/apps/emqx_bridge_iotdb/src/emqx_bridge_iotdb.erl b/apps/emqx_bridge_iotdb/src/emqx_bridge_iotdb.erl index e0312bb02..90e8d18a4 100644 --- a/apps/emqx_bridge_iotdb/src/emqx_bridge_iotdb.erl +++ b/apps/emqx_bridge_iotdb/src/emqx_bridge_iotdb.erl @@ -54,6 +54,7 @@ fields(auth_basic) -> mk(binary(), #{ required => true, desc => ?DESC("config_auth_basic_password"), + format => <<"password">>, sensitive => true, converter => fun emqx_schema:password_converter/2 })} From 066ed5c6ec9f88809d27699dafa471a720d3961c Mon Sep 17 00:00:00 2001 From: firest Date: Wed, 10 May 2023 16:51:33 +0800 Subject: [PATCH 05/11] refactor(pgsql): move pgsql && matrix && timescale bridges into their own app --- apps/emqx_bridge_matrix/rebar.config | 7 +++++++ .../emqx_bridge_matrix/src/emqx_bridge_matrix.erl | 8 ++++---- apps/emqx_bridge_pgsql/docker-ct | 2 ++ apps/emqx_bridge_pgsql/rebar.config | 7 +++++++ .../emqx_bridge_pgsql/src/emqx_bridge_pgsql.erl | 4 ++-- .../test/emqx_bridge_pgsql_SUITE.erl | 2 +- apps/emqx_bridge_timescale/rebar.config | 7 +++++++ .../src/emqx_bridge_timescale.erl | 8 ++++---- lib-ee/emqx_ee_bridge/docker-ct | 1 - lib-ee/emqx_ee_bridge/src/emqx_ee_bridge.erl | 14 +++++++------- ..._bridge_pgsql.hocon => emqx_bridge_pgsql.hocon} | 2 +- ..._bridge_pgsql.hocon => emqx_bridge_pgsql.hocon} | 2 +- 12 files changed, 43 insertions(+), 21 deletions(-) create mode 100644 apps/emqx_bridge_matrix/rebar.config rename lib-ee/emqx_ee_bridge/src/emqx_ee_bridge_matrix.erl => apps/emqx_bridge_matrix/src/emqx_bridge_matrix.erl (81%) create mode 100644 apps/emqx_bridge_pgsql/docker-ct create mode 100644 apps/emqx_bridge_pgsql/rebar.config rename lib-ee/emqx_ee_bridge/src/emqx_ee_bridge_pgsql.erl => apps/emqx_bridge_pgsql/src/emqx_bridge_pgsql.erl (96%) rename lib-ee/emqx_ee_bridge/test/emqx_ee_bridge_pgsql_SUITE.erl => apps/emqx_bridge_pgsql/test/emqx_bridge_pgsql_SUITE.erl (99%) create mode 100644 apps/emqx_bridge_timescale/rebar.config rename lib-ee/emqx_ee_bridge/src/emqx_ee_bridge_timescale.erl => apps/emqx_bridge_timescale/src/emqx_bridge_timescale.erl (80%) rename rel/i18n/{emqx_ee_bridge_pgsql.hocon => emqx_bridge_pgsql.hocon} (97%) rename rel/i18n/zh/{emqx_ee_bridge_pgsql.hocon => emqx_bridge_pgsql.hocon} (96%) diff --git a/apps/emqx_bridge_matrix/rebar.config b/apps/emqx_bridge_matrix/rebar.config new file mode 100644 index 000000000..87c145f26 --- /dev/null +++ b/apps/emqx_bridge_matrix/rebar.config @@ -0,0 +1,7 @@ +{erl_opts, [debug_info]}. + +{deps, [ + {emqx_connector, {path, "../../apps/emqx_connector"}}, + {emqx_resource, {path, "../../apps/emqx_resource"}}, + {emqx_bridge, {path, "../../apps/emqx_bridge"}} +]}. diff --git a/lib-ee/emqx_ee_bridge/src/emqx_ee_bridge_matrix.erl b/apps/emqx_bridge_matrix/src/emqx_bridge_matrix.erl similarity index 81% rename from lib-ee/emqx_ee_bridge/src/emqx_ee_bridge_matrix.erl rename to apps/emqx_bridge_matrix/src/emqx_bridge_matrix.erl index 106fac48a..abd98adb6 100644 --- a/lib-ee/emqx_ee_bridge/src/emqx_ee_bridge_matrix.erl +++ b/apps/emqx_bridge_matrix/src/emqx_bridge_matrix.erl @@ -1,7 +1,7 @@ %%-------------------------------------------------------------------- %% Copyright (c) 2023 EMQ Technologies Co., Ltd. All Rights Reserved. %%-------------------------------------------------------------------- --module(emqx_ee_bridge_matrix). +-module(emqx_bridge_matrix). -export([ conn_bridge_examples/1 @@ -22,7 +22,7 @@ conn_bridge_examples(Method) -> #{ <<"matrix">> => #{ summary => <<"Matrix Bridge">>, - value => emqx_ee_bridge_pgsql:values(Method, matrix) + value => emqx_bridge_pgsql:values(Method, matrix) } } ]. @@ -34,9 +34,9 @@ namespace() -> "bridge_matrix". roots() -> []. fields("post") -> - emqx_ee_bridge_pgsql:fields("post", matrix); + emqx_bridge_pgsql:fields("post", matrix); fields(Method) -> - emqx_ee_bridge_pgsql:fields(Method). + emqx_bridge_pgsql:fields(Method). desc(_) -> undefined. diff --git a/apps/emqx_bridge_pgsql/docker-ct b/apps/emqx_bridge_pgsql/docker-ct new file mode 100644 index 000000000..81281026b --- /dev/null +++ b/apps/emqx_bridge_pgsql/docker-ct @@ -0,0 +1,2 @@ +toxiproxy +pgsql diff --git a/apps/emqx_bridge_pgsql/rebar.config b/apps/emqx_bridge_pgsql/rebar.config new file mode 100644 index 000000000..87c145f26 --- /dev/null +++ b/apps/emqx_bridge_pgsql/rebar.config @@ -0,0 +1,7 @@ +{erl_opts, [debug_info]}. + +{deps, [ + {emqx_connector, {path, "../../apps/emqx_connector"}}, + {emqx_resource, {path, "../../apps/emqx_resource"}}, + {emqx_bridge, {path, "../../apps/emqx_bridge"}} +]}. diff --git a/lib-ee/emqx_ee_bridge/src/emqx_ee_bridge_pgsql.erl b/apps/emqx_bridge_pgsql/src/emqx_bridge_pgsql.erl similarity index 96% rename from lib-ee/emqx_ee_bridge/src/emqx_ee_bridge_pgsql.erl rename to apps/emqx_bridge_pgsql/src/emqx_bridge_pgsql.erl index a5dcb19e6..4615b6789 100644 --- a/lib-ee/emqx_ee_bridge/src/emqx_ee_bridge_pgsql.erl +++ b/apps/emqx_bridge_pgsql/src/emqx_bridge_pgsql.erl @@ -1,7 +1,7 @@ %%-------------------------------------------------------------------- -%% Copyright (c) 2022 EMQ Technologies Co., Ltd. All Rights Reserved. +%% Copyright (c) 2022-2023 EMQ Technologies Co., Ltd. All Rights Reserved. %%-------------------------------------------------------------------- --module(emqx_ee_bridge_pgsql). +-module(emqx_bridge_pgsql). -include_lib("typerefl/include/types.hrl"). -include_lib("hocon/include/hoconsc.hrl"). diff --git a/lib-ee/emqx_ee_bridge/test/emqx_ee_bridge_pgsql_SUITE.erl b/apps/emqx_bridge_pgsql/test/emqx_bridge_pgsql_SUITE.erl similarity index 99% rename from lib-ee/emqx_ee_bridge/test/emqx_ee_bridge_pgsql_SUITE.erl rename to apps/emqx_bridge_pgsql/test/emqx_bridge_pgsql_SUITE.erl index d76149b16..9f2011779 100644 --- a/lib-ee/emqx_ee_bridge/test/emqx_ee_bridge_pgsql_SUITE.erl +++ b/apps/emqx_bridge_pgsql/test/emqx_bridge_pgsql_SUITE.erl @@ -2,7 +2,7 @@ %% Copyright (c) 2022-2023 EMQ Technologies Co., Ltd. All Rights Reserved. %%-------------------------------------------------------------------- --module(emqx_ee_bridge_pgsql_SUITE). +-module(emqx_bridge_pgsql_SUITE). -compile(nowarn_export_all). -compile(export_all). diff --git a/apps/emqx_bridge_timescale/rebar.config b/apps/emqx_bridge_timescale/rebar.config new file mode 100644 index 000000000..87c145f26 --- /dev/null +++ b/apps/emqx_bridge_timescale/rebar.config @@ -0,0 +1,7 @@ +{erl_opts, [debug_info]}. + +{deps, [ + {emqx_connector, {path, "../../apps/emqx_connector"}}, + {emqx_resource, {path, "../../apps/emqx_resource"}}, + {emqx_bridge, {path, "../../apps/emqx_bridge"}} +]}. diff --git a/lib-ee/emqx_ee_bridge/src/emqx_ee_bridge_timescale.erl b/apps/emqx_bridge_timescale/src/emqx_bridge_timescale.erl similarity index 80% rename from lib-ee/emqx_ee_bridge/src/emqx_ee_bridge_timescale.erl rename to apps/emqx_bridge_timescale/src/emqx_bridge_timescale.erl index 20d940462..c4dedf07c 100644 --- a/lib-ee/emqx_ee_bridge/src/emqx_ee_bridge_timescale.erl +++ b/apps/emqx_bridge_timescale/src/emqx_bridge_timescale.erl @@ -1,7 +1,7 @@ %%-------------------------------------------------------------------- %% Copyright (c) 2023 EMQ Technologies Co., Ltd. All Rights Reserved. %%-------------------------------------------------------------------- --module(emqx_ee_bridge_timescale). +-module(emqx_bridge_timescale). -export([ conn_bridge_examples/1 @@ -22,7 +22,7 @@ conn_bridge_examples(Method) -> #{ <<"timescale">> => #{ summary => <<"Timescale Bridge">>, - value => emqx_ee_bridge_pgsql:values(Method, timescale) + value => emqx_bridge_pgsql:values(Method, timescale) } } ]. @@ -34,9 +34,9 @@ namespace() -> "bridge_timescale". roots() -> []. fields("post") -> - emqx_ee_bridge_pgsql:fields("post", timescale); + emqx_bridge_pgsql:fields("post", timescale); fields(Method) -> - emqx_ee_bridge_pgsql:fields(Method). + emqx_bridge_pgsql:fields(Method). desc(_) -> undefined. diff --git a/lib-ee/emqx_ee_bridge/docker-ct b/lib-ee/emqx_ee_bridge/docker-ct index faff109eb..8391d08ae 100644 --- a/lib-ee/emqx_ee_bridge/docker-ct +++ b/lib-ee/emqx_ee_bridge/docker-ct @@ -5,6 +5,5 @@ mongo_rs_sharded mysql redis redis_cluster -pgsql clickhouse dynamo diff --git a/lib-ee/emqx_ee_bridge/src/emqx_ee_bridge.erl b/lib-ee/emqx_ee_bridge/src/emqx_ee_bridge.erl index 9761123da..9b3af166c 100644 --- a/lib-ee/emqx_ee_bridge/src/emqx_ee_bridge.erl +++ b/lib-ee/emqx_ee_bridge/src/emqx_ee_bridge.erl @@ -19,7 +19,7 @@ api_schemas(Method) -> ref(emqx_bridge_kafka, Method ++ "_producer"), ref(emqx_bridge_cassandra, Method), ref(emqx_ee_bridge_mysql, Method), - ref(emqx_ee_bridge_pgsql, Method), + ref(emqx_bridge_pgsql, Method), ref(emqx_ee_bridge_mongodb, Method ++ "_rs"), ref(emqx_ee_bridge_mongodb, Method ++ "_sharded"), ref(emqx_ee_bridge_mongodb, Method ++ "_single"), @@ -29,8 +29,8 @@ api_schemas(Method) -> ref(emqx_ee_bridge_redis, Method ++ "_single"), ref(emqx_ee_bridge_redis, Method ++ "_sentinel"), ref(emqx_ee_bridge_redis, Method ++ "_cluster"), - ref(emqx_ee_bridge_timescale, Method), - ref(emqx_ee_bridge_matrix, Method), + ref(emqx_bridge_timescale, Method), + ref(emqx_bridge_matrix, Method), ref(emqx_bridge_tdengine, Method), ref(emqx_ee_bridge_clickhouse, Method), ref(emqx_ee_bridge_dynamo, Method), @@ -53,9 +53,9 @@ schema_modules() -> emqx_ee_bridge_mongodb, emqx_ee_bridge_mysql, emqx_ee_bridge_redis, - emqx_ee_bridge_pgsql, - emqx_ee_bridge_timescale, - emqx_ee_bridge_matrix, + emqx_bridge_pgsql, + emqx_bridge_timescale, + emqx_bridge_matrix, emqx_bridge_tdengine, emqx_ee_bridge_clickhouse, emqx_ee_bridge_dynamo, @@ -280,7 +280,7 @@ pgsql_structs() -> [ {Type, mk( - hoconsc:map(name, ref(emqx_ee_bridge_pgsql, "config")), + hoconsc:map(name, ref(emqx_bridge_pgsql, "config")), #{ desc => <>, required => false diff --git a/rel/i18n/emqx_ee_bridge_pgsql.hocon b/rel/i18n/emqx_bridge_pgsql.hocon similarity index 97% rename from rel/i18n/emqx_ee_bridge_pgsql.hocon rename to rel/i18n/emqx_bridge_pgsql.hocon index 94c263a56..5295abb35 100644 --- a/rel/i18n/emqx_ee_bridge_pgsql.hocon +++ b/rel/i18n/emqx_bridge_pgsql.hocon @@ -1,4 +1,4 @@ -emqx_ee_bridge_pgsql { +emqx_bridge_pgsql { config_enable.desc: """Enable or disable this bridge""" diff --git a/rel/i18n/zh/emqx_ee_bridge_pgsql.hocon b/rel/i18n/zh/emqx_bridge_pgsql.hocon similarity index 96% rename from rel/i18n/zh/emqx_ee_bridge_pgsql.hocon rename to rel/i18n/zh/emqx_bridge_pgsql.hocon index ebf7f331a..2f233d833 100644 --- a/rel/i18n/zh/emqx_ee_bridge_pgsql.hocon +++ b/rel/i18n/zh/emqx_bridge_pgsql.hocon @@ -1,4 +1,4 @@ -emqx_ee_bridge_pgsql { +emqx_bridge_pgsql { config_enable.desc: """启用/禁用桥接""" From 41f5eff014e475b32d96e0206416ce9cec41bcf3 Mon Sep 17 00:00:00 2001 From: Kjell Winblad Date: Wed, 10 May 2023 10:53:40 +0200 Subject: [PATCH 06/11] fix: issues with the RabbitMQ config --- .../src/emqx_bridge_rabbitmq.erl | 2 +- .../src/emqx_bridge_rabbitmq_connector.erl | 17 +---------------- 2 files changed, 2 insertions(+), 17 deletions(-) diff --git a/apps/emqx_bridge_rabbitmq/src/emqx_bridge_rabbitmq.erl b/apps/emqx_bridge_rabbitmq/src/emqx_bridge_rabbitmq.erl index 2039fadf6..c4897fa39 100644 --- a/apps/emqx_bridge_rabbitmq/src/emqx_bridge_rabbitmq.erl +++ b/apps/emqx_bridge_rabbitmq/src/emqx_bridge_rabbitmq.erl @@ -95,7 +95,7 @@ fields("config") -> fields("creation_opts") -> emqx_resource_schema:fields("creation_opts"); fields("post") -> - fields("post", clickhouse); + fields("post", rabbitmq); fields("put") -> fields("config"); fields("get") -> diff --git a/apps/emqx_bridge_rabbitmq/src/emqx_bridge_rabbitmq_connector.erl b/apps/emqx_bridge_rabbitmq/src/emqx_bridge_rabbitmq_connector.erl index 6a7a68591..6f833d659 100644 --- a/apps/emqx_bridge_rabbitmq/src/emqx_bridge_rabbitmq_connector.erl +++ b/apps/emqx_bridge_rabbitmq/src/emqx_bridge_rabbitmq_connector.erl @@ -72,14 +72,7 @@ fields(config) -> desc => ?DESC("username") } )}, - {password, - hoconsc:mk( - typerefl:binary(), - #{ - required => true, - desc => ?DESC("password") - } - )}, + {password, fun emqx_connector_schema_lib:password/1}, {pool_size, hoconsc:mk( typerefl:pos_integer(), @@ -129,14 +122,6 @@ fields(config) -> desc => ?DESC("heartbeat") } )}, - {auto_reconnect, - hoconsc:mk( - emqx_schema:duration_ms(), - #{ - default => <<"2s">>, - desc => ?DESC("auto_reconnect") - } - )}, %% Things related to sending messages to RabbitMQ {exchange, hoconsc:mk( From f6a2f752fff1c111e7934513bb03422e347d6d8c Mon Sep 17 00:00:00 2001 From: firest Date: Wed, 10 May 2023 17:23:26 +0800 Subject: [PATCH 07/11] chore: update changes && bump app versions --- apps/emqx_bridge_matrix/src/emqx_bridge_matrix.app.src | 2 +- apps/emqx_bridge_pgsql/src/emqx_bridge_pgsql.app.src | 2 +- apps/emqx_bridge_timescale/src/emqx_bridge_timescale.app.src | 2 +- changes/ee/feat-10662.en.md | 1 + 4 files changed, 4 insertions(+), 3 deletions(-) create mode 100644 changes/ee/feat-10662.en.md diff --git a/apps/emqx_bridge_matrix/src/emqx_bridge_matrix.app.src b/apps/emqx_bridge_matrix/src/emqx_bridge_matrix.app.src index e2a17e070..7dfe7eae6 100644 --- a/apps/emqx_bridge_matrix/src/emqx_bridge_matrix.app.src +++ b/apps/emqx_bridge_matrix/src/emqx_bridge_matrix.app.src @@ -1,6 +1,6 @@ {application, emqx_bridge_matrix, [ {description, "EMQX Enterprise MatrixDB Bridge"}, - {vsn, "0.1.0"}, + {vsn, "0.1.1"}, {registered, []}, {applications, [kernel, stdlib]}, {env, []}, diff --git a/apps/emqx_bridge_pgsql/src/emqx_bridge_pgsql.app.src b/apps/emqx_bridge_pgsql/src/emqx_bridge_pgsql.app.src index c695283f3..a310b46b4 100644 --- a/apps/emqx_bridge_pgsql/src/emqx_bridge_pgsql.app.src +++ b/apps/emqx_bridge_pgsql/src/emqx_bridge_pgsql.app.src @@ -1,6 +1,6 @@ {application, emqx_bridge_pgsql, [ {description, "EMQX Enterprise PostgreSQL Bridge"}, - {vsn, "0.1.0"}, + {vsn, "0.1.1"}, {registered, []}, {applications, [kernel, stdlib]}, {env, []}, diff --git a/apps/emqx_bridge_timescale/src/emqx_bridge_timescale.app.src b/apps/emqx_bridge_timescale/src/emqx_bridge_timescale.app.src index 5b4431f73..f533f3b04 100644 --- a/apps/emqx_bridge_timescale/src/emqx_bridge_timescale.app.src +++ b/apps/emqx_bridge_timescale/src/emqx_bridge_timescale.app.src @@ -1,6 +1,6 @@ {application, emqx_bridge_timescale, [ {description, "EMQX Enterprise TimescaleDB Bridge"}, - {vsn, "0.1.0"}, + {vsn, "0.1.1"}, {registered, []}, {applications, [kernel, stdlib]}, {env, []}, diff --git a/changes/ee/feat-10662.en.md b/changes/ee/feat-10662.en.md new file mode 100644 index 000000000..997a8295f --- /dev/null +++ b/changes/ee/feat-10662.en.md @@ -0,0 +1 @@ +Refactor the directory structure of the PostgreSQL && Matrix && Timescale data bridges. From 8914e006c2765ed9655689cd0949da0f7648ab5c Mon Sep 17 00:00:00 2001 From: JimMoen Date: Sat, 6 May 2023 14:12:47 +0800 Subject: [PATCH 08/11] refactor(dynamo): move dynamo bridge into its own app --- apps/emqx_bridge_dynamo/docker-ct | 2 ++ apps/emqx_bridge_dynamo/rebar.config | 11 +++++++++++ .../src/emqx_bridge_dynamo.app.src | 4 ++-- .../emqx_bridge_dynamo/src/emqx_bridge_dynamo.erl | 4 ++-- .../src/emqx_bridge_dynamo_connector.erl | 8 ++++---- .../src/emqx_bridge_dynamo_connector_client.erl | 3 ++- .../test/emqx_bridge_dynamo_SUITE.erl | 12 ++++++++++-- lib-ee/emqx_ee_bridge/docker-ct | 1 - lib-ee/emqx_ee_bridge/src/emqx_ee_bridge.app.src | 1 + lib-ee/emqx_ee_bridge/src/emqx_ee_bridge.erl | 8 ++++---- lib-ee/emqx_ee_connector/rebar.config | 2 +- .../emqx_ee_connector/src/emqx_ee_connector.app.src | 3 +-- mix.exs | 1 + ..._bridge_dynamo.hocon => emqx_bridge_dynamo.hocon} | 2 +- ...namo.hocon => emqx_bridge_dynamo_connector.hocon} | 2 +- ..._bridge_dynamo.hocon => emqx_bridge_dynamo.hocon} | 2 +- ...namo.hocon => emqx_bridge_dynamo_connector.hocon} | 2 +- 17 files changed, 45 insertions(+), 23 deletions(-) create mode 100644 apps/emqx_bridge_dynamo/docker-ct create mode 100644 apps/emqx_bridge_dynamo/rebar.config rename lib-ee/emqx_ee_bridge/src/emqx_ee_bridge_dynamo.erl => apps/emqx_bridge_dynamo/src/emqx_bridge_dynamo.erl (97%) rename lib-ee/emqx_ee_connector/src/emqx_ee_connector_dynamo.erl => apps/emqx_bridge_dynamo/src/emqx_bridge_dynamo_connector.erl (95%) rename lib-ee/emqx_ee_connector/src/emqx_ee_connector_dynamo_client.erl => apps/emqx_bridge_dynamo/src/emqx_bridge_dynamo_connector_client.erl (99%) rename lib-ee/emqx_ee_bridge/test/emqx_ee_bridge_dynamo_SUITE.erl => apps/emqx_bridge_dynamo/test/emqx_bridge_dynamo_SUITE.erl (96%) rename rel/i18n/{emqx_ee_bridge_dynamo.hocon => emqx_bridge_dynamo.hocon} (97%) rename rel/i18n/{emqx_ee_connector_dynamo.hocon => emqx_bridge_dynamo_connector.hocon} (93%) rename rel/i18n/zh/{emqx_ee_bridge_dynamo.hocon => emqx_bridge_dynamo.hocon} (96%) rename rel/i18n/zh/{emqx_ee_connector_dynamo.hocon => emqx_bridge_dynamo_connector.hocon} (92%) diff --git a/apps/emqx_bridge_dynamo/docker-ct b/apps/emqx_bridge_dynamo/docker-ct new file mode 100644 index 000000000..b63325b8b --- /dev/null +++ b/apps/emqx_bridge_dynamo/docker-ct @@ -0,0 +1,2 @@ +toxiproxy +dynamo diff --git a/apps/emqx_bridge_dynamo/rebar.config b/apps/emqx_bridge_dynamo/rebar.config new file mode 100644 index 000000000..fbccb5c9a --- /dev/null +++ b/apps/emqx_bridge_dynamo/rebar.config @@ -0,0 +1,11 @@ +%% -*- mode: erlang; -*- +{erl_opts, [debug_info]}. +{deps, [ {erlcloud, {git, "https://github.com/emqx/erlcloud.git", {tag, "3.5.16-emqx-1"}}} + , {emqx_connector, {path, "../../apps/emqx_connector"}} + , {emqx_resource, {path, "../../apps/emqx_resource"}} + , {emqx_bridge, {path, "../../apps/emqx_bridge"}} + ]}. + +{shell, [ + {apps, [emqx_bridge_dynamo]} +]}. diff --git a/apps/emqx_bridge_dynamo/src/emqx_bridge_dynamo.app.src b/apps/emqx_bridge_dynamo/src/emqx_bridge_dynamo.app.src index 51c717220..2d2e299d2 100644 --- a/apps/emqx_bridge_dynamo/src/emqx_bridge_dynamo.app.src +++ b/apps/emqx_bridge_dynamo/src/emqx_bridge_dynamo.app.src @@ -1,8 +1,8 @@ {application, emqx_bridge_dynamo, [ {description, "EMQX Enterprise Dynamo Bridge"}, - {vsn, "0.1.0"}, + {vsn, "0.1.1"}, {registered, []}, - {applications, [kernel, stdlib]}, + {applications, [kernel, stdlib, erlcloud]}, {env, []}, {modules, []}, {links, []} diff --git a/lib-ee/emqx_ee_bridge/src/emqx_ee_bridge_dynamo.erl b/apps/emqx_bridge_dynamo/src/emqx_bridge_dynamo.erl similarity index 97% rename from lib-ee/emqx_ee_bridge/src/emqx_ee_bridge_dynamo.erl rename to apps/emqx_bridge_dynamo/src/emqx_bridge_dynamo.erl index cbfa5b6b1..251e79ca2 100644 --- a/lib-ee/emqx_ee_bridge/src/emqx_ee_bridge_dynamo.erl +++ b/apps/emqx_bridge_dynamo/src/emqx_bridge_dynamo.erl @@ -1,7 +1,7 @@ %%-------------------------------------------------------------------- %% Copyright (c) 2022 EMQ Technologies Co., Ltd. All Rights Reserved. %%-------------------------------------------------------------------- --module(emqx_ee_bridge_dynamo). +-module(emqx_bridge_dynamo). -include_lib("typerefl/include/types.hrl"). -include_lib("hocon/include/hoconsc.hrl"). @@ -89,7 +89,7 @@ fields("config") -> } )} ] ++ - (emqx_ee_connector_dynamo:fields(config) -- + (emqx_bridge_dynamo_connector:fields(config) -- emqx_connector_schema_lib:prepare_statement_fields()); fields("creation_opts") -> emqx_resource_schema:fields("creation_opts"); diff --git a/lib-ee/emqx_ee_connector/src/emqx_ee_connector_dynamo.erl b/apps/emqx_bridge_dynamo/src/emqx_bridge_dynamo_connector.erl similarity index 95% rename from lib-ee/emqx_ee_connector/src/emqx_ee_connector_dynamo.erl rename to apps/emqx_bridge_dynamo/src/emqx_bridge_dynamo_connector.erl index a17277e67..981c31090 100644 --- a/lib-ee/emqx_ee_connector/src/emqx_ee_connector_dynamo.erl +++ b/apps/emqx_bridge_dynamo/src/emqx_bridge_dynamo_connector.erl @@ -2,7 +2,7 @@ %% Copyright (c) 2023 EMQ Technologies Co., Ltd. All Rights Reserved. %%-------------------------------------------------------------------- --module(emqx_ee_connector_dynamo). +-module(emqx_bridge_dynamo_connector). -behaviour(emqx_resource). @@ -131,7 +131,7 @@ on_batch_query(_InstanceId, Query, _State) -> on_get_status(_InstanceId, #{pool_name := Pool}) -> Health = emqx_resource_pool:health_check_workers( - Pool, {emqx_ee_connector_dynamo_client, is_connected, []} + Pool, {emqx_bridge_dynamo_connector_client, is_connected, []} ), status_result(Health). @@ -154,7 +154,7 @@ do_query( ), Result = ecpool:pick_and_do( PoolName, - {emqx_ee_connector_dynamo_client, query, [Table, Query, Templates]}, + {emqx_bridge_dynamo_connector_client, query, [Table, Query, Templates]}, no_handover ), @@ -181,7 +181,7 @@ do_query( connect(Opts) -> Options = proplists:get_value(config, Opts), - {ok, _Pid} = Result = emqx_ee_connector_dynamo_client:start_link(Options), + {ok, _Pid} = Result = emqx_bridge_dynamo_connector_client:start_link(Options), Result. parse_template(Config) -> diff --git a/lib-ee/emqx_ee_connector/src/emqx_ee_connector_dynamo_client.erl b/apps/emqx_bridge_dynamo/src/emqx_bridge_dynamo_connector_client.erl similarity index 99% rename from lib-ee/emqx_ee_connector/src/emqx_ee_connector_dynamo_client.erl rename to apps/emqx_bridge_dynamo/src/emqx_bridge_dynamo_connector_client.erl index 8f27497fa..faaef9df4 100644 --- a/lib-ee/emqx_ee_connector/src/emqx_ee_connector_dynamo_client.erl +++ b/apps/emqx_bridge_dynamo/src/emqx_bridge_dynamo_connector_client.erl @@ -1,7 +1,8 @@ %%-------------------------------------------------------------------- %% Copyright (c) 2023 EMQ Technologies Co., Ltd. All Rights Reserved. %%-------------------------------------------------------------------- --module(emqx_ee_connector_dynamo_client). + +-module(emqx_bridge_dynamo_connector_client). -behaviour(gen_server). diff --git a/lib-ee/emqx_ee_bridge/test/emqx_ee_bridge_dynamo_SUITE.erl b/apps/emqx_bridge_dynamo/test/emqx_bridge_dynamo_SUITE.erl similarity index 96% rename from lib-ee/emqx_ee_bridge/test/emqx_ee_bridge_dynamo_SUITE.erl rename to apps/emqx_bridge_dynamo/test/emqx_bridge_dynamo_SUITE.erl index 88bce879e..45ba6fd64 100644 --- a/lib-ee/emqx_ee_bridge/test/emqx_ee_bridge_dynamo_SUITE.erl +++ b/apps/emqx_bridge_dynamo/test/emqx_bridge_dynamo_SUITE.erl @@ -2,7 +2,7 @@ %% Copyright (c) 2022-2023 EMQ Technologies Co., Ltd. All Rights Reserved. %%-------------------------------------------------------------------- --module(emqx_ee_bridge_dynamo_SUITE). +-module(emqx_bridge_dynamo_SUITE). -compile(nowarn_export_all). -compile(export_all). @@ -24,6 +24,14 @@ -define(GET_CONFIG(KEY__, CFG__), proplists:get_value(KEY__, CFG__)). +%% How to run it locally (all commands are run in $PROJ_ROOT dir): +%% run ct in docker container +%% run script: +%% ```bash +%% ./scripts/ct/run.sh --ci --app apps/emqx_bridge_dynamo -- \ +%% --name 'test@127.0.0.1' -c -v --readable true \ +%% --suite apps/emqx_bridge_dynamo/test/emqx_bridge_dynamo_SUITE.erl + %%------------------------------------------------------------------------------ %% CT boilerplate %%------------------------------------------------------------------------------ @@ -251,7 +259,7 @@ directly_setup_dynamo() -> directly_query(Query) -> directly_setup_dynamo(), - emqx_ee_connector_dynamo_client:execute(Query, ?TABLE_BIN). + emqx_bridge_dynamo_connector_client:execute(Query, ?TABLE_BIN). directly_get_payload(Key) -> case directly_query({get_item, {<<"id">>, Key}}) of diff --git a/lib-ee/emqx_ee_bridge/docker-ct b/lib-ee/emqx_ee_bridge/docker-ct index faff109eb..dce589657 100644 --- a/lib-ee/emqx_ee_bridge/docker-ct +++ b/lib-ee/emqx_ee_bridge/docker-ct @@ -7,4 +7,3 @@ redis redis_cluster pgsql clickhouse -dynamo diff --git a/lib-ee/emqx_ee_bridge/src/emqx_ee_bridge.app.src b/lib-ee/emqx_ee_bridge/src/emqx_ee_bridge.app.src index df1d778fc..560f1fcef 100644 --- a/lib-ee/emqx_ee_bridge/src/emqx_ee_bridge.app.src +++ b/lib-ee/emqx_ee_bridge/src/emqx_ee_bridge.app.src @@ -12,6 +12,7 @@ emqx_bridge_cassandra, emqx_bridge_opents, emqx_bridge_pulsar, + emqx_bridge_dynamo, emqx_bridge_sqlserver, emqx_bridge_rocketmq, emqx_bridge_rabbitmq, diff --git a/lib-ee/emqx_ee_bridge/src/emqx_ee_bridge.erl b/lib-ee/emqx_ee_bridge/src/emqx_ee_bridge.erl index 9761123da..8862e9693 100644 --- a/lib-ee/emqx_ee_bridge/src/emqx_ee_bridge.erl +++ b/lib-ee/emqx_ee_bridge/src/emqx_ee_bridge.erl @@ -33,7 +33,7 @@ api_schemas(Method) -> ref(emqx_ee_bridge_matrix, Method), ref(emqx_bridge_tdengine, Method), ref(emqx_ee_bridge_clickhouse, Method), - ref(emqx_ee_bridge_dynamo, Method), + ref(emqx_bridge_dynamo, Method), ref(emqx_bridge_rocketmq, Method), ref(emqx_bridge_sqlserver, Method), ref(emqx_bridge_opents, Method), @@ -58,7 +58,7 @@ schema_modules() -> emqx_ee_bridge_matrix, emqx_bridge_tdengine, emqx_ee_bridge_clickhouse, - emqx_ee_bridge_dynamo, + emqx_bridge_dynamo, emqx_bridge_rocketmq, emqx_bridge_sqlserver, emqx_bridge_opents, @@ -102,7 +102,7 @@ resource_type(timescale) -> emqx_connector_pgsql; resource_type(matrix) -> emqx_connector_pgsql; resource_type(tdengine) -> emqx_bridge_tdengine_connector; resource_type(clickhouse) -> emqx_ee_connector_clickhouse; -resource_type(dynamo) -> emqx_ee_connector_dynamo; +resource_type(dynamo) -> emqx_bridge_dynamo_connector; resource_type(rocketmq) -> emqx_bridge_rocketmq_connector; resource_type(sqlserver) -> emqx_bridge_sqlserver_connector; resource_type(opents) -> emqx_bridge_opents_connector; @@ -147,7 +147,7 @@ fields(bridges) -> )}, {dynamo, mk( - hoconsc:map(name, ref(emqx_ee_bridge_dynamo, "config")), + hoconsc:map(name, ref(emqx_bridge_dynamo, "config")), #{ desc => <<"Dynamo Bridge Config">>, required => false diff --git a/lib-ee/emqx_ee_connector/rebar.config b/lib-ee/emqx_ee_connector/rebar.config index a9c2b4181..e550c4b0c 100644 --- a/lib-ee/emqx_ee_connector/rebar.config +++ b/lib-ee/emqx_ee_connector/rebar.config @@ -1,9 +1,9 @@ +%% -*- mode: erlang -*- {erl_opts, [debug_info]}. {deps, [ {hstreamdb_erl, {git, "https://github.com/hstreamdb/hstreamdb_erl.git", {tag, "0.2.5"}}}, {influxdb, {git, "https://github.com/emqx/influxdb-client-erl", {tag, "1.1.9"}}}, {clickhouse, {git, "https://github.com/emqx/clickhouse-client-erl", {tag, "0.3"}}}, - {erlcloud, {git, "https://github.com/emqx/erlcloud.git", {tag,"3.5.16-emqx-1"}}}, {emqx, {path, "../../apps/emqx"}}, {emqx_utils, {path, "../../apps/emqx_utils"}} ]}. diff --git a/lib-ee/emqx_ee_connector/src/emqx_ee_connector.app.src b/lib-ee/emqx_ee_connector/src/emqx_ee_connector.app.src index 32dcc084c..601582e82 100644 --- a/lib-ee/emqx_ee_connector/src/emqx_ee_connector.app.src +++ b/lib-ee/emqx_ee_connector/src/emqx_ee_connector.app.src @@ -8,8 +8,7 @@ ecpool, hstreamdb_erl, influxdb, - clickhouse, - erlcloud + clickhouse ]}, {env, []}, {modules, []}, diff --git a/mix.exs b/mix.exs index cafeec7bd..07e8286db 100644 --- a/mix.exs +++ b/mix.exs @@ -190,6 +190,7 @@ defmodule EMQXUmbrella.MixProject do {:snappyer, "1.2.8", override: true}, {:crc32cer, "0.1.8", override: true}, {:supervisor3, "1.1.12", override: true}, + {:erlcloud, github: "emqx/erlcloud", tag: "3.5.16-emqx-1", override: true}, {:opentsdb, github: "emqx/opentsdb-client-erl", tag: "v0.5.1", override: true}, # The following two are dependencies of rabbit_common. They are needed here to # make mix not complain about conflicting versions diff --git a/rel/i18n/emqx_ee_bridge_dynamo.hocon b/rel/i18n/emqx_bridge_dynamo.hocon similarity index 97% rename from rel/i18n/emqx_ee_bridge_dynamo.hocon rename to rel/i18n/emqx_bridge_dynamo.hocon index 7725130eb..46ae9d1bb 100644 --- a/rel/i18n/emqx_ee_bridge_dynamo.hocon +++ b/rel/i18n/emqx_bridge_dynamo.hocon @@ -1,4 +1,4 @@ -emqx_ee_bridge_dynamo { +emqx_bridge_dynamo { config_enable.desc: """Enable or disable this bridge""" diff --git a/rel/i18n/emqx_ee_connector_dynamo.hocon b/rel/i18n/emqx_bridge_dynamo_connector.hocon similarity index 93% rename from rel/i18n/emqx_ee_connector_dynamo.hocon rename to rel/i18n/emqx_bridge_dynamo_connector.hocon index 29b6bf99e..7c37676b5 100644 --- a/rel/i18n/emqx_ee_connector_dynamo.hocon +++ b/rel/i18n/emqx_bridge_dynamo_connector.hocon @@ -1,4 +1,4 @@ -emqx_ee_connector_dynamo { +emqx_bridge_dynamo_connector { aws_access_key_id.desc: """Access Key ID for connecting to DynamoDB.""" diff --git a/rel/i18n/zh/emqx_ee_bridge_dynamo.hocon b/rel/i18n/zh/emqx_bridge_dynamo.hocon similarity index 96% rename from rel/i18n/zh/emqx_ee_bridge_dynamo.hocon rename to rel/i18n/zh/emqx_bridge_dynamo.hocon index adf33b9e8..6bf090c5d 100644 --- a/rel/i18n/zh/emqx_ee_bridge_dynamo.hocon +++ b/rel/i18n/zh/emqx_bridge_dynamo.hocon @@ -1,4 +1,4 @@ -emqx_ee_bridge_dynamo { +emqx_bridge_dynamo { config_enable.desc: """启用/禁用桥接""" diff --git a/rel/i18n/zh/emqx_ee_connector_dynamo.hocon b/rel/i18n/zh/emqx_bridge_dynamo_connector.hocon similarity index 92% rename from rel/i18n/zh/emqx_ee_connector_dynamo.hocon rename to rel/i18n/zh/emqx_bridge_dynamo_connector.hocon index e7b911c1e..ef7ee3462 100644 --- a/rel/i18n/zh/emqx_ee_connector_dynamo.hocon +++ b/rel/i18n/zh/emqx_bridge_dynamo_connector.hocon @@ -1,4 +1,4 @@ -emqx_ee_connector_dynamo { +emqx_bridge_dynamo_connector { aws_access_key_id.desc: """DynamoDB 的访问 ID。""" From e32ab10d012bbb702a0a580b310c015419a70d84 Mon Sep 17 00:00:00 2001 From: JimMoen Date: Wed, 10 May 2023 14:22:56 +0800 Subject: [PATCH 09/11] chore: rename dynamo template files --- .../emqx_bridge_dynamo}/priv/dynamo/mqtt_acked.json | 0 .../emqx_bridge_dynamo}/priv/dynamo/mqtt_client.json | 0 .../emqx_bridge_dynamo}/priv/dynamo/mqtt_clientid_msg_map.json | 0 .../emqx_bridge_dynamo}/priv/dynamo/mqtt_msg.json | 0 .../emqx_bridge_dynamo}/priv/dynamo/mqtt_retain.json | 0 .../emqx_bridge_dynamo}/priv/dynamo/mqtt_sub.json | 0 .../emqx_bridge_dynamo}/priv/dynamo/mqtt_topic_msg_map.json | 0 apps/emqx_bridge_dynamo/test/emqx_bridge_dynamo_SUITE.erl | 2 +- 8 files changed, 1 insertion(+), 1 deletion(-) rename {lib-ee/emqx_ee_bridge => apps/emqx_bridge_dynamo}/priv/dynamo/mqtt_acked.json (100%) rename {lib-ee/emqx_ee_bridge => apps/emqx_bridge_dynamo}/priv/dynamo/mqtt_client.json (100%) rename {lib-ee/emqx_ee_bridge => apps/emqx_bridge_dynamo}/priv/dynamo/mqtt_clientid_msg_map.json (100%) rename {lib-ee/emqx_ee_bridge => apps/emqx_bridge_dynamo}/priv/dynamo/mqtt_msg.json (100%) rename {lib-ee/emqx_ee_bridge => apps/emqx_bridge_dynamo}/priv/dynamo/mqtt_retain.json (100%) rename {lib-ee/emqx_ee_bridge => apps/emqx_bridge_dynamo}/priv/dynamo/mqtt_sub.json (100%) rename {lib-ee/emqx_ee_bridge => apps/emqx_bridge_dynamo}/priv/dynamo/mqtt_topic_msg_map.json (100%) diff --git a/lib-ee/emqx_ee_bridge/priv/dynamo/mqtt_acked.json b/apps/emqx_bridge_dynamo/priv/dynamo/mqtt_acked.json similarity index 100% rename from lib-ee/emqx_ee_bridge/priv/dynamo/mqtt_acked.json rename to apps/emqx_bridge_dynamo/priv/dynamo/mqtt_acked.json diff --git a/lib-ee/emqx_ee_bridge/priv/dynamo/mqtt_client.json b/apps/emqx_bridge_dynamo/priv/dynamo/mqtt_client.json similarity index 100% rename from lib-ee/emqx_ee_bridge/priv/dynamo/mqtt_client.json rename to apps/emqx_bridge_dynamo/priv/dynamo/mqtt_client.json diff --git a/lib-ee/emqx_ee_bridge/priv/dynamo/mqtt_clientid_msg_map.json b/apps/emqx_bridge_dynamo/priv/dynamo/mqtt_clientid_msg_map.json similarity index 100% rename from lib-ee/emqx_ee_bridge/priv/dynamo/mqtt_clientid_msg_map.json rename to apps/emqx_bridge_dynamo/priv/dynamo/mqtt_clientid_msg_map.json diff --git a/lib-ee/emqx_ee_bridge/priv/dynamo/mqtt_msg.json b/apps/emqx_bridge_dynamo/priv/dynamo/mqtt_msg.json similarity index 100% rename from lib-ee/emqx_ee_bridge/priv/dynamo/mqtt_msg.json rename to apps/emqx_bridge_dynamo/priv/dynamo/mqtt_msg.json diff --git a/lib-ee/emqx_ee_bridge/priv/dynamo/mqtt_retain.json b/apps/emqx_bridge_dynamo/priv/dynamo/mqtt_retain.json similarity index 100% rename from lib-ee/emqx_ee_bridge/priv/dynamo/mqtt_retain.json rename to apps/emqx_bridge_dynamo/priv/dynamo/mqtt_retain.json diff --git a/lib-ee/emqx_ee_bridge/priv/dynamo/mqtt_sub.json b/apps/emqx_bridge_dynamo/priv/dynamo/mqtt_sub.json similarity index 100% rename from lib-ee/emqx_ee_bridge/priv/dynamo/mqtt_sub.json rename to apps/emqx_bridge_dynamo/priv/dynamo/mqtt_sub.json diff --git a/lib-ee/emqx_ee_bridge/priv/dynamo/mqtt_topic_msg_map.json b/apps/emqx_bridge_dynamo/priv/dynamo/mqtt_topic_msg_map.json similarity index 100% rename from lib-ee/emqx_ee_bridge/priv/dynamo/mqtt_topic_msg_map.json rename to apps/emqx_bridge_dynamo/priv/dynamo/mqtt_topic_msg_map.json diff --git a/apps/emqx_bridge_dynamo/test/emqx_bridge_dynamo_SUITE.erl b/apps/emqx_bridge_dynamo/test/emqx_bridge_dynamo_SUITE.erl index 45ba6fd64..da87f6047 100644 --- a/apps/emqx_bridge_dynamo/test/emqx_bridge_dynamo_SUITE.erl +++ b/apps/emqx_bridge_dynamo/test/emqx_bridge_dynamo_SUITE.erl @@ -232,7 +232,7 @@ query_resource(Config, Request) -> ResourceID = emqx_bridge_resource:resource_id(BridgeType, Name), emqx_resource:query(ResourceID, Request, #{timeout => 1_000}). -%% create a table, use the lib-ee/emqx_ee_bridge/priv/dynamo/mqtt_msg.json as template +%% create a table, use the apps/emqx_bridge_dynamo/priv/dynamo/mqtt_msg.json as template create_table(Config) -> directly_setup_dynamo(), delete_table(Config), From a32be1ab852952cdd2770a9b60bcf4d57c6b3ba9 Mon Sep 17 00:00:00 2001 From: JimMoen Date: Wed, 10 May 2023 19:38:19 +0800 Subject: [PATCH 10/11] chore: bump erlcloud dependencies vsns --- mix.exs | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/mix.exs b/mix.exs index 07e8286db..caee134c8 100644 --- a/mix.exs +++ b/mix.exs @@ -191,6 +191,12 @@ defmodule EMQXUmbrella.MixProject do {:crc32cer, "0.1.8", override: true}, {:supervisor3, "1.1.12", override: true}, {:erlcloud, github: "emqx/erlcloud", tag: "3.5.16-emqx-1", override: true}, + # erlcloud's rebar.config requires rebar3 and does not support Mix, + # so it tries to fetch deps from git. We need to override this. + {:lhttpc, tag: "1.6.2", override: true}, + {:eini, "1.2.9", override: true}, + {:base16, "1.0.0", override: true}, + # end of erlcloud's deps {:opentsdb, github: "emqx/opentsdb-client-erl", tag: "v0.5.1", override: true}, # The following two are dependencies of rabbit_common. They are needed here to # make mix not complain about conflicting versions From b7126257a5744353ec1bb27a40d7ae0cbe1c7898 Mon Sep 17 00:00:00 2001 From: firest Date: Thu, 11 May 2023 13:52:13 +0800 Subject: [PATCH 11/11] fix(limiter): fix an error when setting `max_conn_rate` in a listener --- .../emqx_limiter/src/emqx_limiter_schema.erl | 3 +- apps/emqx/src/emqx_listeners.erl | 49 +++++++++++-------- 2 files changed, 30 insertions(+), 22 deletions(-) diff --git a/apps/emqx/src/emqx_limiter/src/emqx_limiter_schema.erl b/apps/emqx/src/emqx_limiter/src/emqx_limiter_schema.erl index a4f7d5b89..81358fdfe 100644 --- a/apps/emqx/src/emqx_limiter/src/emqx_limiter_schema.erl +++ b/apps/emqx/src/emqx_limiter/src/emqx_limiter_schema.erl @@ -286,7 +286,8 @@ default_client_config() -> default_bucket_config() -> #{ rate => infinity, - burst => 0 + burst => 0, + initial => 0 }. get_listener_opts(Conf) -> diff --git a/apps/emqx/src/emqx_listeners.erl b/apps/emqx/src/emqx_listeners.erl index d56e03a1b..2b80000dc 100644 --- a/apps/emqx/src/emqx_listeners.erl +++ b/apps/emqx/src/emqx_listeners.erl @@ -347,7 +347,8 @@ do_start_listener(Type, ListenerName, #{bind := ListenOn} = Opts) when Type == tcp; Type == ssl -> Id = listener_id(Type, ListenerName), - add_limiter_bucket(Id, Opts), + Limiter = limiter(Opts), + add_limiter_bucket(Id, Limiter), esockd:open( Id, ListenOn, @@ -356,7 +357,7 @@ do_start_listener(Type, ListenerName, #{bind := ListenOn} = Opts) when #{ listener => {Type, ListenerName}, zone => zone(Opts), - limiter => limiter(Opts), + limiter => Limiter, enable_authn => enable_authn(Opts) } ]} @@ -366,9 +367,10 @@ do_start_listener(Type, ListenerName, #{bind := ListenOn} = Opts) when Type == ws; Type == wss -> Id = listener_id(Type, ListenerName), - add_limiter_bucket(Id, Opts), + Limiter = limiter(Opts), + add_limiter_bucket(Id, Limiter), RanchOpts = ranch_opts(Type, ListenOn, Opts), - WsOpts = ws_opts(Type, ListenerName, Opts), + WsOpts = ws_opts(Type, ListenerName, Opts, Limiter), case Type of ws -> cowboy:start_clear(Id, RanchOpts, WsOpts); wss -> cowboy:start_tls(Id, RanchOpts, WsOpts) @@ -415,20 +417,22 @@ do_start_listener(quic, ListenerName, #{bind := Bind} = Opts) -> Password -> [{password, str(Password)}] end ++ optional_quic_listener_opts(Opts), + Limiter = limiter(Opts), ConnectionOpts = #{ conn_callback => emqx_quic_connection, peer_unidi_stream_count => maps:get(peer_unidi_stream_count, Opts, 1), peer_bidi_stream_count => maps:get(peer_bidi_stream_count, Opts, 10), zone => zone(Opts), listener => {quic, ListenerName}, - limiter => limiter(Opts) + limiter => Limiter }, StreamOpts = #{ stream_callback => emqx_quic_stream, active => 1 }, + Id = listener_id(quic, ListenerName), - add_limiter_bucket(Id, Opts), + add_limiter_bucket(Id, Limiter), quicer:start_listener( Id, ListenOn, @@ -532,12 +536,12 @@ esockd_opts(ListenerId, Type, Opts0) -> end ). -ws_opts(Type, ListenerName, Opts) -> +ws_opts(Type, ListenerName, Opts, Limiter) -> WsPaths = [ {emqx_utils_maps:deep_get([websocket, mqtt_path], Opts, "/mqtt"), emqx_ws_connection, #{ zone => zone(Opts), listener => {Type, ListenerName}, - limiter => limiter(Opts), + limiter => Limiter, enable_authn => enable_authn(Opts) }} ], @@ -653,26 +657,29 @@ zone(Opts) -> limiter(Opts) -> emqx_limiter_schema:get_listener_opts(Opts). -add_limiter_bucket(Id, #{limiter := Limiter}) -> +add_limiter_bucket(_Id, undefined) -> + ok; +add_limiter_bucket(Id, Limiter) -> maps:fold( fun(Type, Cfg, _) -> emqx_limiter_server:add_bucket(Id, Type, Cfg) end, ok, maps:without([client], Limiter) - ); -add_limiter_bucket(_Id, _Cfg) -> - ok. + ). -del_limiter_bucket(Id, #{limiter := Limiters}) -> - lists:foreach( - fun(Type) -> - emqx_limiter_server:del_bucket(Id, Type) - end, - maps:keys(Limiters) - ); -del_limiter_bucket(_Id, _Cfg) -> - ok. +del_limiter_bucket(Id, Conf) -> + case limiter(Conf) of + undefined -> + ok; + Limiter -> + lists:foreach( + fun(Type) -> + emqx_limiter_server:del_bucket(Id, Type) + end, + maps:keys(Limiter) + ) + end. enable_authn(Opts) -> maps:get(enable_authn, Opts, true).