Просмотр исходного кода

Merge pull request #12275 from thalesmg/sync-r54-m-20240108

sync r54 into master
zhongwencool 2 лет назад
Родитель
Сommit
7365160eeb

+ 1 - 1
Makefile

@@ -20,7 +20,7 @@ endif
 
 # Dashboard version
 # from https://github.com/emqx/emqx-dashboard5
-export EMQX_DASHBOARD_VERSION ?= v1.6.0
+export EMQX_DASHBOARD_VERSION ?= v1.6.1
 export EMQX_EE_DASHBOARD_VERSION ?= e1.4.1
 
 PROFILE ?= emqx

+ 2 - 1
apps/emqx_durable_storage/src/emqx_ds_replication_layer.erl

@@ -1,5 +1,5 @@
 %%--------------------------------------------------------------------
-%% Copyright (c) 2023 EMQ Technologies Co., Ltd. All Rights Reserved.
+%% Copyright (c) 2023-2024 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.
@@ -114,6 +114,7 @@ list_shards(DB) ->
 
 -spec open_db(emqx_ds:db(), builtin_db_opts()) -> ok | {error, _}.
 open_db(DB, CreateOpts) ->
+    ok = emqx_ds_sup:ensure_workers(),
     Opts = emqx_ds_replication_layer_meta:open_db(DB, CreateOpts),
     MyShards = emqx_ds_replication_layer_meta:my_shards(DB),
     lists:foreach(

+ 29 - 9
apps/emqx_durable_storage/src/emqx_ds_sup.erl

@@ -1,12 +1,12 @@
 %%--------------------------------------------------------------------
-%% Copyright (c) 2022-2023 EMQ Technologies Co., Ltd. All Rights Reserved.
+%% Copyright (c) 2022-2024 EMQ Technologies Co., Ltd. All Rights Reserved.
 %%--------------------------------------------------------------------
 -module(emqx_ds_sup).
 
 -behaviour(supervisor).
 
 %% API:
--export([start_link/0]).
+-export([start_link/0, ensure_workers/0]).
 
 %% behaviour callbacks:
 -export([init/1]).
@@ -23,21 +23,41 @@
 
 -spec start_link() -> {ok, pid()}.
 start_link() ->
-    supervisor:start_link({local, ?SUP}, ?MODULE, []).
+    supervisor:start_link({local, ?SUP}, ?MODULE, top).
+
+-spec ensure_workers() -> ok.
+ensure_workers() ->
+    ChildSpec = #{
+        id => workers_sup,
+        restart => temporary,
+        type => supervisor,
+        start => {supervisor, start_link, [?MODULE, workers]}
+    },
+    case supervisor:start_child(?SUP, ChildSpec) of
+        {ok, _} ->
+            ok;
+        {error, already_present} ->
+            ok;
+        {error, {already_started, _}} ->
+            ok
+    end.
 
 %%================================================================================
 %% behaviour callbacks
 %%================================================================================
 
 -dialyzer({nowarn_function, init/1}).
-init([]) ->
+init(top) ->
+    SupFlags = #{
+        strategy => one_for_all,
+        intensity => 10,
+        period => 1
+    },
+    {ok, {SupFlags, []}};
+init(workers) ->
     %% TODO: technically, we don't need rocksDB for the alternative
     %% backends. But right now we have any:
-    Children =
-        case mria:rocksdb_backend_available() of
-            true -> [meta(), storage_layer_sup()];
-            false -> []
-        end,
+    Children = [meta(), storage_layer_sup()],
     SupFlags = #{
         strategy => one_for_all,
         intensity => 0,

+ 1 - 1
apps/emqx_durable_storage/src/emqx_durable_storage.app.src

@@ -2,7 +2,7 @@
 {application, emqx_durable_storage, [
     {description, "Message persistence and subscription replays for EMQX"},
     % strict semver, bump manually!
-    {vsn, "0.1.10"},
+    {vsn, "0.1.11"},
     {modules, []},
     {registered, []},
     {applications, [kernel, stdlib, rocksdb, gproc, mria, emqx_utils]},

+ 2 - 1
apps/emqx_durable_storage/test/emqx_ds_storage_bitfield_lts_SUITE.erl

@@ -1,5 +1,5 @@
 %%--------------------------------------------------------------------
-%% Copyright (c) 2022-2023 EMQ Technologies Co., Ltd. All Rights Reserved.
+%% Copyright (c) 2022-2024 EMQ Technologies Co., Ltd. All Rights Reserved.
 %%--------------------------------------------------------------------
 -module(emqx_ds_storage_bitfield_lts_SUITE).
 
@@ -379,6 +379,7 @@ suite() -> [{timetrap, {seconds, 20}}].
 
 init_per_suite(Config) ->
     {ok, _} = application:ensure_all_started(emqx_durable_storage),
+    emqx_ds_sup:ensure_workers(),
     Config.
 
 end_per_suite(_Config) ->

+ 2 - 0
changes/e5.4.1.en.md

@@ -19,3 +19,5 @@
 - [#12250](https://github.com/emqx/emqx/pull/12250) Resolved an issue where the `file_transfer` configuration's `secret_access_key` value was erroneously being updated to masked stars (`*****`), ensuring that the original key value remains unaltered and secure.
 
 - [#12256](https://github.com/emqx/emqx/pull/12256) Fixed an issue that prevented establishing connections to MySQL resources without a password.
+
+- [#12264](https://github.com/emqx/emqx/pull/12264) Fix rolling upgrade when replica nodes join cluster with core nodes prior to version 5.4.

+ 2 - 0
changes/v5.4.1.en.md

@@ -11,3 +11,5 @@
 - [#12246](https://github.com/emqx/emqx/pull/12246) Stopped exposing port 11883 by default in Docker and removed it from Helm charts, as this port is no longer in use. 
 
 - [#12249](https://github.com/emqx/emqx/pull/12249) Fixed an issue in the `/configs` API where attempting to modify a read-only configuration value resulted in a garbled response message.
+
+- [#12264](https://github.com/emqx/emqx/pull/12264) Fix rolling upgrade when replica nodes join cluster with core nodes prior to version 5.4.