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

Merge pull request #6357 from zhongwencool/4.3-sn-registry

fix: e4.4.0 failed to join e4.3.0 cluster
zhongwencool 4 лет назад
Родитель
Сommit
9f7db2eacb

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

@@ -1,6 +1,6 @@
 {application, emqx_sn,
  [{description, "EMQ X MQTT-SN Plugin"},
-  {vsn, "4.3.3"}, % strict semver, bump manually!
+  {vsn, "4.3.4"}, % strict semver, bump manually!
   {modules, []},
   {registered, []},
   {applications, [kernel,stdlib,esockd]},

+ 13 - 7
apps/emqx_sn/src/emqx_sn.appup.src

@@ -1,18 +1,24 @@
 %% -*-: erlang -*-
 {VSN,
  [
-   {"4.3.2", [
-     {load_module, emqx_sn_gateway, brutal_purge, soft_purge, []}
-   ]},
-   {<<"4.3.[0-1]">>, [
+    {"4.3.3", [
+      {load_module, emqx_sn_registry, brutal_purge, soft_purge, []}
+    ]},
+    {"4.3.2", [
+      {load_module, emqx_sn_gateway, brutal_purge, soft_purge, []}
+    ]},
+   {<<"4\\.3\\.[0-1]">>, [
      {restart_application, emqx_sn}
    ]}
  ],
  [
-   {"4.3.2", [
-     {load_module, emqx_sn_gateway, brutal_purge, soft_purge, []}
+   {"4.3.3", [
+      {load_module, emqx_sn_registry, brutal_purge, soft_purge, []}
    ]},
-   {<<"4.3.[0-1]">>, [
+   {"4.3.2", [
+      {load_module, emqx_sn_gateway, brutal_purge, soft_purge, []}
+    ]},
+   {<<"4\\.3\\.[0-1]">>, [
      {restart_application, emqx_sn}
    ]}
  ]

+ 14 - 20
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

+ 1 - 2
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).
-