diff --git a/apps/emqx/src/emqx_app.erl b/apps/emqx/src/emqx_app.erl index 9091304fc..d1090803d 100644 --- a/apps/emqx/src/emqx_app.erl +++ b/apps/emqx/src/emqx_app.erl @@ -41,6 +41,7 @@ start(_Type, _Args) -> ok = maybe_load_config(), + ok = emqx_persistent_session:init_db_backend(), ok = maybe_start_quicer(), wait_boot_shards(), {ok, Sup} = emqx_sup:start_link(), diff --git a/apps/emqx/src/emqx_persistent_session.erl b/apps/emqx/src/emqx_persistent_session.erl index 5db7aa81a..71dac02c3 100644 --- a/apps/emqx/src/emqx_persistent_session.erl +++ b/apps/emqx/src/emqx_persistent_session.erl @@ -80,15 +80,14 @@ %%-------------------------------------------------------------------- init_db_backend() -> - case persistent_term:get({?MODULE, backend_init_done}, undefined) of - undefined -> - Backend = case is_store_enabled() of - true -> emqx_persistent_session_mnesia_backend; - false -> emqx_persistent_session_dummy_backend - end, - persistent_term:put(?db_backend_key, Backend), - persistent_term:put(backend_init_done, true); - true -> + case is_store_enabled() of + true -> + ok = emqx_trie:create_session_trie(), + emqx_persistent_session_mnesia_backend:create_tables(), + persistent_term:put(?db_backend_key, emqx_persistent_session_mnesia_backend), + ok; + false -> + persistent_term:put(?db_backend_key, emqx_persistent_session_dummy_backend), ok end. diff --git a/apps/emqx/src/emqx_persistent_session_mnesia_backend.erl b/apps/emqx/src/emqx_persistent_session_mnesia_backend.erl index 4d11b5303..512984845 100644 --- a/apps/emqx/src/emqx_persistent_session_mnesia_backend.erl +++ b/apps/emqx/src/emqx_persistent_session_mnesia_backend.erl @@ -16,15 +16,11 @@ -module(emqx_persistent_session_mnesia_backend). --boot_mnesia({mnesia, [boot]}). - -include("emqx.hrl"). -include("emqx_persistent_session.hrl"). --export([ mnesia/1 - ]). - --export([ first_message_id/0 +-export([ create_tables/0 + , first_message_id/0 , next_message_id/1 , delete_message/1 , first_session_message/0 @@ -39,14 +35,7 @@ , ro_transaction/1 ]). - -mnesia(Action) -> - emqx_persistent_session:init_db_backend(), - mnesia_opt(?db_backend =:= ?MODULE, Action). - -mnesia_opt(false, _) -> - ok; -mnesia_opt(true, boot) -> +create_tables() -> ok = mria:create_table(?SESSION_STORE, [ {type, set}, {rlog_shard, ?PERSISTENT_SESSION_SHARD}, diff --git a/apps/emqx/src/emqx_trie.erl b/apps/emqx/src/emqx_trie.erl index 22133d1a5..1881ecb6b 100644 --- a/apps/emqx/src/emqx_trie.erl +++ b/apps/emqx/src/emqx_trie.erl @@ -19,7 +19,9 @@ -include("emqx.hrl"). %% Mnesia bootstrap --export([mnesia/1]). +-export([ mnesia/1 + , create_session_trie/0 + ]). -boot_mnesia({mnesia, [boot]}). @@ -71,20 +73,19 @@ mnesia(boot) -> {record_name, ?TRIE}, {attributes, record_info(fields, ?TRIE)}, {type, ordered_set}, - {storage_properties, StoreProps}]), + {storage_properties, StoreProps}]). - case emqx_persistent_session:is_store_enabled() of - true -> - ok = mria:create_table(?SESSION_TRIE, [ - {rlog_shard, ?ROUTE_SHARD}, - {storage, disc_copies}, - {record_name, ?TRIE}, - {attributes, record_info(fields, ?TRIE)}, - {type, ordered_set}, - {storage_properties, StoreProps}]); - false -> - ok - end. +create_session_trie() -> + StoreProps = [{ets, [{read_concurrency, true}, + {write_concurrency, true} + ]}], + ok = mria:create_table(?SESSION_TRIE, + [{rlog_shard, ?ROUTE_SHARD}, + {storage, disc_copies}, + {record_name, ?TRIE}, + {attributes, record_info(fields, ?TRIE)}, + {type, ordered_set}, + {storage_properties, StoreProps}]). %%-------------------------------------------------------------------- %% Topics APIs