diff --git a/apps/emqx_sn/src/emqx_sn_registry.erl b/apps/emqx_sn/src/emqx_sn_registry.erl index 4a3b22585..c97a49f5a 100644 --- a/apps/emqx_sn/src/emqx_sn_registry.erl +++ b/apps/emqx_sn/src/emqx_sn_registry.erl @@ -44,32 +44,16 @@ , code_change/3 ]). +-ifdef(TEST). +-export([create_table/0]). +-endif. + -define(TAB, ?MODULE). -record(state, {max_predef_topic_id = 0}). -record(emqx_sn_registry, {key, value}). -%% Mnesia bootstrap --export([mnesia/1]). - --boot_mnesia({mnesia, [boot]}). --copy_mnesia({mnesia, [copy]}). - - -%% @doc Create or replicate tables. --spec(mnesia(boot | copy) -> ok). -mnesia(boot) -> - %% Optimize storage - StoreProps = [{ets, [{read_concurrency, true}]}], - ok = ekka_mnesia:create_table(?MODULE, [ - {attributes, record_info(fields, emqx_sn_registry)}, - {ram_copies, [node()]}, - {storage_properties, StoreProps}]); - -mnesia(copy) -> - ok = ekka_mnesia:copy_table(?MODULE, ram_copies). - %%----------------------------------------------------------------------------- -spec(start_link(list()) -> {ok, pid()} | ignore | {error, Reason :: term()}). @@ -123,6 +107,7 @@ unregister_topic(ClientId) -> %%----------------------------------------------------------------------------- init([PredefTopics]) -> + create_table(), %% {predef, TopicId} -> TopicName %% {predef, TopicName} -> TopicId %% {ClientId, TopicId} -> TopicName @@ -137,6 +122,15 @@ init([PredefTopics]) -> end, 0, PredefTopics), {ok, #state{max_predef_topic_id = MaxPredefId}}. +create_table() -> + %% Optimize storage + StoreProps = [{ets, [{read_concurrency, true}]}], + ok = ekka_mnesia:create_table(?MODULE, [ + {attributes, record_info(fields, emqx_sn_registry)}, + {ram_copies, [node()]}, + {storage_properties, StoreProps}]), + ok = ekka_mnesia:copy_table(?MODULE, ram_copies). + handle_call({register, ClientId, TopicName}, _From, State = #state{max_predef_topic_id = PredefId}) -> case lookup_topic_id(ClientId, TopicName) of diff --git a/apps/emqx_sn/test/emqx_sn_registry_SUITE.erl b/apps/emqx_sn/test/emqx_sn_registry_SUITE.erl index 8d320d8ed..023d83ae5 100644 --- a/apps/emqx_sn/test/emqx_sn_registry_SUITE.erl +++ b/apps/emqx_sn/test/emqx_sn_registry_SUITE.erl @@ -42,7 +42,7 @@ end_per_suite(_Config) -> init_per_testcase(_TestCase, Config) -> ekka_mnesia:start(), - emqx_sn_registry:mnesia(boot), + emqx_sn_registry:create_table(), mnesia:clear_table(emqx_sn_registry), PredefTopics = application:get_env(emqx_sn, predefined, []), {ok, _Pid} = ?REGISTRY:start_link(PredefTopics), @@ -118,4 +118,3 @@ register_a_lot(N, Max) when N < Max -> Topic = iolist_to_binary(["Topic", integer_to_list(N)]), ?assertEqual(N, ?REGISTRY:register_topic(<<"ClientId">>, Topic)), register_a_lot(N+1, Max). -