Skip to content

Commit

Permalink
Merge pull request #12264 from ieQu1/avoid-starting-ds-when-feature-i…
Browse files Browse the repository at this point in the history
…s-off

fix(ds): Don't start the supervision tree when feature is off
  • Loading branch information
ieQu1 committed Jan 8, 2024
2 parents a7ad226 + caf461f commit 88f6495
Show file tree
Hide file tree
Showing 4 changed files with 34 additions and 12 deletions.
3 changes: 2 additions & 1 deletion 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.
Expand Down Expand Up @@ -109,6 +109,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(
Expand Down
38 changes: 29 additions & 9 deletions 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]).
Expand All @@ -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,
Expand Down
2 changes: 1 addition & 1 deletion apps/emqx_durable_storage/src/emqx_durable_storage.app.src
Expand Up @@ -2,7 +2,7 @@
{application, emqx_durable_storage, [
{description, "Message persistence and subscription replays for EMQX"},
% strict semver, bump manually!
{vsn, "0.1.9"},
{vsn, "0.1.10"},
{modules, []},
{registered, []},
{applications, [kernel, stdlib, rocksdb, gproc, mria, emqx_utils]},
Expand Down
@@ -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).

Expand Down Expand Up @@ -378,6 +378,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) ->
Expand Down

0 comments on commit 88f6495

Please sign in to comment.