Explorar el Código

feat(ds): add `ensure_shard/2` shortcut

And use it in `emqx_persistent_session_ds:init()` backend initialization
function.
Andrew Mayorov hace 2 años
padre
commit
daf4e86da1

+ 3 - 4
apps/emqx/src/emqx_persistent_session_ds.erl

@@ -39,10 +39,9 @@
 
 init() ->
     ?WHEN_ENABLED(
-        begin
-            _ = emqx_ds_storage_layer_sup:start_shard(?DS_SHARD),
-            ok
-        end
+        ok = emqx_ds:ensure_shard(?DS_SHARD, #{
+            dir => filename:join([emqx:data_dir(), ds, messages, ?DS_SHARD])
+        })
     ).
 
 %%

+ 13 - 0
apps/emqx_durable_storage/src/emqx_ds.erl

@@ -16,6 +16,7 @@
 -module(emqx_ds).
 
 %% API:
+-export([ensure_shard/2]).
 %%   Messages:
 -export([message_store/2, message_store/1, message_stats/0]).
 %%   Iterator:
@@ -79,6 +80,18 @@
 %% API funcions
 %%================================================================================
 
+-spec ensure_shard(shard(), emqx_ds_storage_layer:options()) ->
+    ok | {error, _Reason}.
+ensure_shard(Shard, Options) ->
+    case emqx_ds_storage_layer_sup:start_shard(Shard, Options) of
+        {ok, _Pid} ->
+            ok;
+        {error, {already_started, _Pid}} ->
+            ok;
+        {error, Reason} ->
+            {error, Reason}
+    end.
+
 %%--------------------------------------------------------------------------------
 %% Message
 %%--------------------------------------------------------------------------------