From 8e877caf476e05accfc5f696e4b12407e4440a0c Mon Sep 17 00:00:00 2001 From: Serge Tupchii Date: Tue, 27 Jun 2023 16:31:53 +0300 Subject: [PATCH] fix(emqx_psk): wait for Mria table on app start This ensures emqx_psk table is synced to a replicant even if it doesn't have init psk file. --- apps/emqx_machine/src/emqx_machine.app.src | 2 +- apps/emqx_machine/src/emqx_machine_boot.erl | 3 ++- apps/emqx_psk/include/emqx_psk.hrl | 19 +++++++++++++++++++ apps/emqx_psk/src/emqx_psk.app.src | 2 +- apps/emqx_psk/src/emqx_psk.erl | 3 +-- apps/emqx_psk/src/emqx_psk_app.erl | 3 +++ changes/ce/fix-11150.en.md | 2 ++ 7 files changed, 29 insertions(+), 5 deletions(-) create mode 100644 apps/emqx_psk/include/emqx_psk.hrl create mode 100644 changes/ce/fix-11150.en.md diff --git a/apps/emqx_machine/src/emqx_machine.app.src b/apps/emqx_machine/src/emqx_machine.app.src index b9138d07d..b34b577e3 100644 --- a/apps/emqx_machine/src/emqx_machine.app.src +++ b/apps/emqx_machine/src/emqx_machine.app.src @@ -3,7 +3,7 @@ {id, "emqx_machine"}, {description, "The EMQX Machine"}, % strict semver, bump manually! - {vsn, "0.2.6"}, + {vsn, "0.2.7"}, {modules, []}, {registered, []}, {applications, [kernel, stdlib, emqx_ctl]}, diff --git a/apps/emqx_machine/src/emqx_machine_boot.erl b/apps/emqx_machine/src/emqx_machine_boot.erl index b2b0823ce..1adec9c01 100644 --- a/apps/emqx_machine/src/emqx_machine_boot.erl +++ b/apps/emqx_machine/src/emqx_machine_boot.erl @@ -144,7 +144,8 @@ basic_reboot_apps() -> emqx_authz, emqx_slow_subs, emqx_auto_subscribe, - emqx_plugins + emqx_plugins, + emqx_psk ] ++ basic_reboot_apps_edition(emqx_release:edition()). basic_reboot_apps_edition(ce) -> diff --git a/apps/emqx_psk/include/emqx_psk.hrl b/apps/emqx_psk/include/emqx_psk.hrl new file mode 100644 index 000000000..700160a5f --- /dev/null +++ b/apps/emqx_psk/include/emqx_psk.hrl @@ -0,0 +1,19 @@ +%%-------------------------------------------------------------------- +%% Copyright (c) 2023 EMQ Technologies Co., Ltd. All Rights Reserved. +%% +%% Licensed under the Apache License, Version 2.0 (the "License"); +%% you may not use this file except in compliance with the License. +%% You may obtain a copy of the License at +%% +%% http://www.apache.org/licenses/LICENSE-2.0 +%% +%% Unless required by applicable law or agreed to in writing, software +%% distributed under the License is distributed on an "AS IS" BASIS, +%% WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +%% See the License for the specific language governing permissions and +%% limitations under the License. +%%-------------------------------------------------------------------- + +-define(TAB, emqx_psk). + +-define(PSK_SHARD, emqx_psk_shard). diff --git a/apps/emqx_psk/src/emqx_psk.app.src b/apps/emqx_psk/src/emqx_psk.app.src index fc5fb707c..26885673c 100644 --- a/apps/emqx_psk/src/emqx_psk.app.src +++ b/apps/emqx_psk/src/emqx_psk.app.src @@ -2,7 +2,7 @@ {application, emqx_psk, [ {description, "EMQX PSK"}, % strict semver, bump manually! - {vsn, "5.0.2"}, + {vsn, "5.0.3"}, {modules, []}, {registered, [emqx_psk_sup]}, {applications, [kernel, stdlib]}, diff --git a/apps/emqx_psk/src/emqx_psk.erl b/apps/emqx_psk/src/emqx_psk.erl index 6bdf48c9b..6b2199832 100644 --- a/apps/emqx_psk/src/emqx_psk.erl +++ b/apps/emqx_psk/src/emqx_psk.erl @@ -66,8 +66,7 @@ -boot_mnesia({mnesia, [boot]}). --define(TAB, ?MODULE). --define(PSK_SHARD, emqx_psk_shard). +-include("emqx_psk.hrl"). -define(DEFAULT_DELIMITER, <<":">>). diff --git a/apps/emqx_psk/src/emqx_psk_app.erl b/apps/emqx_psk/src/emqx_psk_app.erl index b8572e6a0..f1a7cf18c 100644 --- a/apps/emqx_psk/src/emqx_psk_app.erl +++ b/apps/emqx_psk/src/emqx_psk_app.erl @@ -23,7 +23,10 @@ stop/1 ]). +-include("emqx_psk.hrl"). + start(_Type, _Args) -> + ok = mria:wait_for_tables([?TAB]), {ok, Sup} = emqx_psk_sup:start_link(), {ok, Sup}. diff --git a/changes/ce/fix-11150.en.md b/changes/ce/fix-11150.en.md new file mode 100644 index 000000000..17ae9a234 --- /dev/null +++ b/changes/ce/fix-11150.en.md @@ -0,0 +1,2 @@ +Wait for Mria table when emqx_psk app is being started to ensure that +PSK data is synced to replicant nodes even if they don't have init PSK file.