diff --git a/src/rabbit_msg_store_vhost_sup.erl b/src/rabbit_msg_store_vhost_sup.erl index a4ae8469dc4f..a33ffed56070 100644 --- a/src/rabbit_msg_store_vhost_sup.erl +++ b/src/rabbit_msg_store_vhost_sup.erl @@ -2,27 +2,30 @@ -behaviour(supervisor2). --export([start_link/4, init/1, add_vhost/2, client_init/5, start_vhost/5, successfully_recovered_state/2]). +-export([start_link/3, init/1, add_vhost/2, client_init/5, successfully_recovered_state/2]). -start_link(Name, Dir, ClientRefs, StartupFunState) -> +%% Internal +-export([start_vhost/4]). + +start_link(Name, ClientRefs, StartupFunState) -> supervisor2:start_link({local, Name}, ?MODULE, - [Name, Dir, ClientRefs, StartupFunState]). + [Name, ClientRefs, StartupFunState]). -init([Name, Dir, ClientRefs, StartupFunState]) -> +init([Name, ClientRefs, StartupFunState]) -> {ok, {{simple_one_for_one, 0, 1}, - [{rabbit_msg_store_vhost, {rabbit_msg_store_vhost_sup, start_vhost, - [Name, Dir, ClientRefs, StartupFunState]}, + [{rabbit_msg_store_vhost, {rabbit_msg_store_vhost_sup, start_vhost, + [Name, ClientRefs, StartupFunState]}, transient, infinity, supervisor, [rabbit_msg_store]}]}}. add_vhost(Name, VHost) -> supervisor2:start_child(Name, [VHost]). -start_vhost(Name, Dir, ClientRefs, StartupFunState, VHost) -> - VHostName = get_vhost_name(Name, VHost), - VHostDir = get_vhost_dir(Dir, VHost), +start_vhost(Name, ClientRefs, StartupFunState, VHost) -> + VHostName = vhost_store_name(Name, VHost), + VHostDir = vhost_store_dir(VHost), ok = rabbit_file:ensure_dir(VHostDir), - rabbit_msg_store:start_link(VHostName, VHostDir, + rabbit_msg_store:start_link(VHostName, VHostDir, ClientRefs, StartupFunState). @@ -31,27 +34,29 @@ client_init(Server, Ref, MsgOnDiskFun, CloseFDsFun, VHost) -> rabbit_msg_store:client_init(VHostName, Ref, MsgOnDiskFun, CloseFDsFun). maybe_start_vhost(Server, VHost) -> - VHostName = get_vhost_name(Server, VHost), - Trace = try throw(42) catch 42 -> erlang:get_stacktrace() end, + VHostName = vhost_store_name(Server, VHost), case whereis(VHostName) of undefined -> add_vhost(Server, VHost); _ -> ok end, VHostName. -get_vhost_name(Name, VHost) -> - VhostEncoded = encode_vhost(VHost), - binary_to_atom(<<(atom_to_binary(Name, utf8))/binary, "_", VhostEncoded/binary>>, utf8). +vhost_store_name(Name, VHost) -> + VhostEncoded = encode_vhost_name(VHost), + binary_to_atom(<<(atom_to_binary(Name, utf8))/binary, "_", + VhostEncoded/binary>>, + utf8). -get_vhost_dir(Dir, VHost) -> - VhostEncoded = encode_vhost(VHost), +vhost_store_dir(VHost) -> + Dir = rabbit_mnesia:dir(), + VhostEncoded = encode_vhost_name(VHost), binary_to_list(filename:join([Dir, VhostEncoded])). -encode_vhost(VHost) -> +encode_vhost_name(VHost) -> base64:encode(VHost). successfully_recovered_state(Name, VHost) -> - VHostName = get_vhost_name(Name, VHost), + VHostName = vhost_store_name(Name, VHost), rabbit_msg_store:successfully_recovered_state(VHostName). % force_recovery diff --git a/src/rabbit_variable_queue.erl b/src/rabbit_variable_queue.erl index 211f2158b4d2..ae76dde3e370 100644 --- a/src/rabbit_variable_queue.erl +++ b/src/rabbit_variable_queue.erl @@ -463,13 +463,13 @@ stop() -> ok = rabbit_queue_index:stop(). start_msg_store(Refs, StartFunState) -> - VHosts = rabbit_vhost:list(), ok = rabbit_sup:start_child(?TRANSIENT_MSG_STORE_SUP, rabbit_msg_store_vhost_sup, - [?TRANSIENT_MSG_STORE_SUP, rabbit_mnesia:dir(), + [?TRANSIENT_MSG_STORE_SUP, undefined, {fun (ok) -> finished end, ok}]), ok = rabbit_sup:start_child(?PERSISTENT_MSG_STORE_SUP, rabbit_msg_store_vhost_sup, - [?PERSISTENT_MSG_STORE_SUP, rabbit_mnesia:dir(), - Refs, StartFunState]), + [?PERSISTENT_MSG_STORE_SUP, Refs, StartFunState]), + %% Start message store for all known vhosts + VHosts = rabbit_vhost:list(), lists:foreach( fun(VHost) -> rabbit_msg_store_vhost_sup:add_vhost(?TRANSIENT_MSG_STORE_SUP, VHost), @@ -2765,7 +2765,7 @@ start_new_store_sup() -> % Start persistent store sup without recovery. ok = rabbit_sup:start_child(?PERSISTENT_MSG_STORE_SUP, rabbit_msg_store_vhost_sup, - [?PERSISTENT_MSG_STORE_SUP, rabbit_mnesia:dir(), + [?PERSISTENT_MSG_STORE_SUP, undefined, {fun (ok) -> finished end, ok}]), ?PERSISTENT_MSG_STORE_SUP.