From d51deac222c7d080608d7320902a77727e0ad64f Mon Sep 17 00:00:00 2001 From: Thales Macedo Garitezi Date: Wed, 31 Jan 2024 15:24:06 -0300 Subject: [PATCH 1/2] fix(ds): use configured data dir for site storage --- apps/emqx_durable_storage/src/emqx_ds.erl | 7 +++++++ .../src/emqx_ds_replication_layer_meta.erl | 2 +- apps/emqx_durable_storage/src/emqx_ds_storage_layer.erl | 7 +------ 3 files changed, 9 insertions(+), 7 deletions(-) diff --git a/apps/emqx_durable_storage/src/emqx_ds.erl b/apps/emqx_durable_storage/src/emqx_ds.erl index 4e408ed80..75fb444bd 100644 --- a/apps/emqx_durable_storage/src/emqx_ds.erl +++ b/apps/emqx_durable_storage/src/emqx_ds.erl @@ -23,6 +23,7 @@ %% Management API: -export([ + base_dir/0, open_db/2, update_db_config/2, add_generation/1, @@ -71,6 +72,8 @@ %% Type declarations %%================================================================================ +-define(APP, emqx_durable_storage). + -type db() :: atom(). %% Parsed topic. @@ -189,6 +192,10 @@ %% API funcions %%================================================================================ +-spec base_dir() -> file:filename(). +base_dir() -> + application:get_env(?APP, db_data_dir, emqx:data_dir()). + %% @doc Different DBs are completely independent from each other. They %% could represent something like different tenants. -spec open_db(db(), create_db_opts()) -> ok. diff --git a/apps/emqx_durable_storage/src/emqx_ds_replication_layer_meta.erl b/apps/emqx_durable_storage/src/emqx_ds_replication_layer_meta.erl index b49b0e8f7..0b689a116 100644 --- a/apps/emqx_durable_storage/src/emqx_ds_replication_layer_meta.erl +++ b/apps/emqx_durable_storage/src/emqx_ds_replication_layer_meta.erl @@ -417,7 +417,7 @@ ensure_tables() -> ok = mria:wait_for_tables([?META_TAB, ?NODE_TAB, ?SHARD_TAB]). ensure_site() -> - Filename = filename:join(emqx:data_dir(), "emqx_ds_builtin_site.eterm"), + Filename = filename:join(emqx_ds:base_dir(), "emqx_ds_builtin_site.eterm"), case file:consult(Filename) of {ok, [Site]} -> ok; diff --git a/apps/emqx_durable_storage/src/emqx_ds_storage_layer.erl b/apps/emqx_durable_storage/src/emqx_ds_storage_layer.erl index 8f4b2afc6..f22e7423c 100644 --- a/apps/emqx_durable_storage/src/emqx_ds_storage_layer.erl +++ b/apps/emqx_durable_storage/src/emqx_ds_storage_layer.erl @@ -52,7 +52,6 @@ -include_lib("snabbkaffe/include/snabbkaffe.hrl"). --define(APP, emqx_durable_storage). -define(REF(ShardId), {via, gproc, {n, l, {?MODULE, ShardId}}}). %%================================================================================ @@ -608,11 +607,7 @@ rocksdb_open(Shard, Options) -> -spec db_dir(shard_id()) -> file:filename(). db_dir({DB, ShardId}) -> - filename:join([base_dir(), atom_to_list(DB), binary_to_list(ShardId)]). - --spec base_dir() -> file:filename(). -base_dir() -> - application:get_env(?APP, db_data_dir, emqx:data_dir()). + filename:join([emqx_ds:base_dir(), atom_to_list(DB), binary_to_list(ShardId)]). -spec update_last_until(Schema, emqx_ds:time()) -> Schema when Schema :: shard_schema() | shard(). update_last_until(Schema, Until) -> From f7b12470dd5e5aa16366ddb25e9ff18ff6c0dae6 Mon Sep 17 00:00:00 2001 From: Thales Macedo Garitezi Date: Wed, 31 Jan 2024 15:25:03 -0300 Subject: [PATCH 2/2] test(ds): fix inter-suite flakiness Attempt to mitigate this frequent source of flakiness: ``` =CRASH REPORT==== 31-Jan-2024::17:30:15.025404 === crasher: initial call: emqx_ds_replication_layer_egress:init/1 pid: <0.11312.0> registered_name: [] exception error: no match of right hand side value {error, no_leader_for_shard} in function emqx_ds_replication_layer_egress:init/1 (/emqx/apps/emqx_durable_storage/src/emqx_ds_replication_layer_egress.erl, line 93) in call from gen_server:init_it/2 (gen_server.erl, line 980) in call from gen_server:init_it/6 (gen_server.erl, line 935) ancestors: [<0.11310.0>,<0.11304.0>,emqx_ds_builtin_databases_sup, emqx_ds_builtin_sup,emqx_ds_sup,<0.11236.0>] message_queue_len: 0 messages: [] links: [<0.11310.0>] dictionary: [] trap_exit: true status: running heap_size: 376 stack_size: 28 reductions: 231 neighbours: ``` --- .../test/emqx_ds_storage_bitfield_lts_SUITE.erl | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) diff --git a/apps/emqx_durable_storage/test/emqx_ds_storage_bitfield_lts_SUITE.erl b/apps/emqx_durable_storage/test/emqx_ds_storage_bitfield_lts_SUITE.erl index 03d86dd88..349eede86 100644 --- a/apps/emqx_durable_storage/test/emqx_ds_storage_bitfield_lts_SUITE.erl +++ b/apps/emqx_durable_storage/test/emqx_ds_storage_bitfield_lts_SUITE.erl @@ -406,11 +406,16 @@ all() -> emqx_common_test_helpers:all(?MODULE). suite() -> [{timetrap, {seconds, 20}}]. init_per_suite(Config) -> - {ok, _} = application:ensure_all_started(emqx_durable_storage), - Config. + Apps = emqx_cth_suite:start( + [emqx_durable_storage], + #{work_dir => emqx_cth_suite:work_dir(Config)} + ), + [{apps, Apps} | Config]. -end_per_suite(_Config) -> - ok = application:stop(emqx_durable_storage). +end_per_suite(Config) -> + Apps = ?config(apps, Config), + ok = emqx_cth_suite:stop(Apps), + ok. init_per_testcase(TC, Config) -> ok = emqx_ds:open_db(TC, ?DEFAULT_CONFIG),