From fb61c2b2661f1035507b4e7c78bc37ec9b50214c Mon Sep 17 00:00:00 2001 From: "Zaiming (Stone) Shi" Date: Fri, 10 Feb 2023 17:05:09 +0100 Subject: [PATCH 1/3] perf: avoid getting metrics (gen_server:call) for each resource lookup --- apps/emqx_resource/include/emqx_resource.hrl | 2 +- apps/emqx_resource/src/emqx_resource_manager.erl | 14 +++++++++----- 2 files changed, 10 insertions(+), 6 deletions(-) diff --git a/apps/emqx_resource/include/emqx_resource.hrl b/apps/emqx_resource/include/emqx_resource.hrl index ce4e02c2a..fa7f2eb38 100644 --- a/apps/emqx_resource/include/emqx_resource.hrl +++ b/apps/emqx_resource/include/emqx_resource.hrl @@ -43,7 +43,7 @@ config := resource_config(), state := resource_state(), status := resource_status(), - metrics := emqx_metrics_worker:metrics() + metrics => emqx_metrics_worker:metrics() }. -type resource_group() :: binary(). -type creation_opts() :: #{ diff --git a/apps/emqx_resource/src/emqx_resource_manager.erl b/apps/emqx_resource/src/emqx_resource_manager.erl index 4846c8ae6..ee9e218b2 100644 --- a/apps/emqx_resource/src/emqx_resource_manager.erl +++ b/apps/emqx_resource/src/emqx_resource_manager.erl @@ -238,7 +238,7 @@ lookup(ResId) -> ets_lookup(ResId) -> case read_cache(ResId) of {Group, Data} -> - {ok, Group, data_record_to_external_map_with_metrics(Data)}; + {ok, Group, data_record_to_external_map(Data)}; not_found -> {error, not_found} end. @@ -620,8 +620,8 @@ maybe_reply(Actions, undefined, _Reply) -> maybe_reply(Actions, From, Reply) -> [{reply, From, Reply} | Actions]. --spec data_record_to_external_map_with_metrics(data()) -> resource_data(). -data_record_to_external_map_with_metrics(Data) -> +-spec data_record_to_external_map(data()) -> resource_data(). +data_record_to_external_map(Data) -> #{ id => Data#data.id, mod => Data#data.mod, @@ -629,10 +629,14 @@ data_record_to_external_map_with_metrics(Data) -> query_mode => Data#data.query_mode, config => Data#data.config, status => Data#data.status, - state => Data#data.state, - metrics => get_metrics(Data#data.id) + state => Data#data.state }. +-spec data_record_to_external_map_with_metrics(data()) -> resource_data(). +data_record_to_external_map_with_metrics(Data) -> + DataMap = data_record_to_external_map(Data), + DataMap#{metrics => get_metrics(Data#data.id)}. + -spec wait_for_ready(resource_id(), integer()) -> ok | timeout | {error, term()}. wait_for_ready(ResId, WaitTime) -> do_wait_for_ready(ResId, WaitTime div ?WAIT_FOR_RESOURCE_DELAY). From dfcc59afcf3a4276b7280bbabdfdce0e6548a85c Mon Sep 17 00:00:00 2001 From: "Zaiming (Stone) Shi" Date: Fri, 10 Feb 2023 17:41:45 +0100 Subject: [PATCH 2/3] chore: add changelog --- changes/v5.0.17/perf-9954.en.md | 1 + changes/v5.0.17/perf-9954.zh.md | 1 + scripts/format-changelog.sh | 5 +++-- 3 files changed, 5 insertions(+), 2 deletions(-) create mode 100644 changes/v5.0.17/perf-9954.en.md create mode 100644 changes/v5.0.17/perf-9954.zh.md diff --git a/changes/v5.0.17/perf-9954.en.md b/changes/v5.0.17/perf-9954.en.md new file mode 100644 index 000000000..d816c2096 --- /dev/null +++ b/changes/v5.0.17/perf-9954.en.md @@ -0,0 +1 @@ +Improve bridge performance diff --git a/changes/v5.0.17/perf-9954.zh.md b/changes/v5.0.17/perf-9954.zh.md new file mode 100644 index 000000000..df1dabedd --- /dev/null +++ b/changes/v5.0.17/perf-9954.zh.md @@ -0,0 +1 @@ +优化桥接性能 diff --git a/scripts/format-changelog.sh b/scripts/format-changelog.sh index 862b42c17..23f801f2b 100755 --- a/scripts/format-changelog.sh +++ b/scripts/format-changelog.sh @@ -26,8 +26,8 @@ item() { } section() { - local section_name=$1 - for i in "${changes_dir}"/"${section_name}"-*."${language}".md; do + local prefix=$1 + for i in "${changes_dir}"/"${prefix}"-*."${language}".md; do item "${i}" done } @@ -39,6 +39,7 @@ if [ "${language}" = "en" ]; then ## Enhancements $(section feat) +$(section perf) ## Bug fixes From 72fe10f18b952fe9648b7c8bebd1dc545a0f3632 Mon Sep 17 00:00:00 2001 From: "Zaiming (Stone) Shi" Date: Fri, 10 Feb 2023 19:41:14 +0100 Subject: [PATCH 3/3] chore: fix spell check errors --- apps/emqx_bridge/i18n/emqx_bridge_api.conf | 2 +- apps/emqx_connector/i18n/emqx_connector_mqtt_schema.conf | 2 +- apps/emqx_gateway/i18n/emqx_gateway_api_i18n.conf | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/apps/emqx_bridge/i18n/emqx_bridge_api.conf b/apps/emqx_bridge/i18n/emqx_bridge_api.conf index 73f78609d..f5d372128 100644 --- a/apps/emqx_bridge/i18n/emqx_bridge_api.conf +++ b/apps/emqx_bridge/i18n/emqx_bridge_api.conf @@ -46,7 +46,7 @@ emqx_bridge_api { desc_param_path_enable { desc { - en: """Whether or not the bridge is enabled""" + en: """Whether to enable this bridge""" zh: """是否启用桥接""" } label: { diff --git a/apps/emqx_connector/i18n/emqx_connector_mqtt_schema.conf b/apps/emqx_connector/i18n/emqx_connector_mqtt_schema.conf index b075681f3..f9f79beb8 100644 --- a/apps/emqx_connector/i18n/emqx_connector_mqtt_schema.conf +++ b/apps/emqx_connector/i18n/emqx_connector_mqtt_schema.conf @@ -159,7 +159,7 @@ broker MUST support this feature.""" clean_start { desc { - en: "Whether or not to start a clean session when reconnecting a remote broker for ingress bridge" + en: "Whether to start a clean session when reconnecting a remote broker for ingress bridge" zh: "与 ingress MQTT 桥的远程服务器重连时是否清除老的 MQTT 会话。" } label: { diff --git a/apps/emqx_gateway/i18n/emqx_gateway_api_i18n.conf b/apps/emqx_gateway/i18n/emqx_gateway_api_i18n.conf index ab30a9c22..18ab1f242 100644 --- a/apps/emqx_gateway/i18n/emqx_gateway_api_i18n.conf +++ b/apps/emqx_gateway/i18n/emqx_gateway_api_i18n.conf @@ -57,7 +57,7 @@ It's enum with `stomp`, `mqttsn`, `coap`, `lwm2m`, `exproto`""" gateway_enable_in_path { desc { - en: """Whether or not gateway is enabled""" + en: """Whether to enable this gateway""" zh: """是否开启此网关""" }