diff options
Diffstat (limited to 'src')
| -rw-r--r-- | src/rabbit_vhost_sup_sup.erl | 39 |
1 files changed, 22 insertions, 17 deletions
diff --git a/src/rabbit_vhost_sup_sup.erl b/src/rabbit_vhost_sup_sup.erl index 93c26d4e0f..19d7cf61b7 100644 --- a/src/rabbit_vhost_sup_sup.erl +++ b/src/rabbit_vhost_sup_sup.erl @@ -23,15 +23,16 @@ -export([init/1]). -export([start_link/0, start/0]). --export([init_vhost/1, get_vhost_sup/1, get_vhost_sup/2, save_vhost_sup/3]). --export([delete_on_all_nodes/1]). --export([start_on_all_nodes/1]). - --export([save_vhost_process/2]). +-export([init_vhost/1, + start_vhost/1, start_vhost/2, + get_vhost_sup/1, get_vhost_sup/2, + save_vhost_sup/3, + save_vhost_process/2]). +-export([delete_on_all_nodes/1, start_on_all_nodes/1]). -export([is_vhost_alive/1]). %% Internal --export([stop_and_delete_vhost/1, start_vhost/1]). +-export([stop_and_delete_vhost/1]). -record(vhost_sup, {vhost, vhost_sup_pid, wrapper_pid, vhost_process_pid}). @@ -61,7 +62,12 @@ init([]) -> start_on_all_nodes(VHost) -> NodesStart = [ {Node, start_vhost(VHost, Node)} || Node <- rabbit_nodes:all_running() ], - Failures = lists:filter(fun({_, {ok, _}}) -> false; (_) -> true end, NodesStart), + Failures = lists:filter(fun + ({_, {ok, _}}) -> false; + ({_, {error, {already_started, _}}}) -> false; + (_) -> true + end, + NodesStart), case Failures of [] -> ok; Errors -> {error, {failed_to_start_vhost_on_nodes, Errors}} @@ -112,6 +118,11 @@ stop_and_delete_vhost(VHost, Node) -> init_vhost(VHost) -> case start_vhost(VHost) of {ok, _} -> ok; + {error, {already_started, _}} -> + rabbit_log:warning( + "Attempting to start an already started vhost '~s'.", + [VHost]), + ok; {error, {no_such_vhost, VHost}} -> {error, {no_such_vhost, VHost}}; {error, Reason} -> @@ -163,22 +174,16 @@ get_vhost_sup(VHost) -> -spec start_vhost(rabbit_types:vhost(), node()) -> {ok, pid()} | {error, term()}. start_vhost(VHost, Node) -> case rabbit_misc:rpc_call(Node, rabbit_vhost_sup_sup, start_vhost, [VHost]) of - {ok, Pid} when is_pid(Pid) -> - {ok, Pid}; - {badrpc, RpcErr} -> - {error, RpcErr} + {ok, Pid} -> {ok, Pid}; + {error, Err} -> {error, Err}; + {badrpc, RpcErr} -> {error, RpcErr} end. -spec start_vhost(rabbit_types:vhost()) -> {ok, pid()} | {error, term()}. start_vhost(VHost) -> case rabbit_vhost:exists(VHost) of false -> {error, {no_such_vhost, VHost}}; - true -> - case supervisor2:start_child(?MODULE, [VHost]) of - {ok, Pid} -> {ok, Pid}; - {error, {already_started, Pid}} -> {ok, Pid}; - {error, Err} -> {error, Err} - end + true -> supervisor2:start_child(?MODULE, [VHost]) end. -spec is_vhost_alive(rabbit_types:vhost()) -> boolean(). |
