summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorDaniil Fedotov <dfedotov@pivotal.io>2017-08-03 12:25:25 +0100
committerDaniil Fedotov <dfedotov@pivotal.io>2017-08-03 12:25:25 +0100
commit5fc28e4b0f18fbbaa33b9b20b6f84d57435b73b3 (patch)
tree1974fae51b8160f63ece5bab9a586bce2a10ec4c /src
parentb753442da578029d49478f2511e647fe29af9b63 (diff)
downloadrabbitmq-server-git-5fc28e4b0f18fbbaa33b9b20b6f84d57435b73b3.tar.gz
Make already_started error explicit in start_vhost. Export start_vhost/2
Already started status can be used by CLI tools and should be returned from `start_vhost` function. `start_vhost/2` is used in the management API
Diffstat (limited to 'src')
-rw-r--r--src/rabbit_vhost_sup_sup.erl39
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().