summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/rabbit.erl25
-rw-r--r--src/rabbit_vhost_sup_sup.erl4
2 files changed, 24 insertions, 5 deletions
diff --git a/src/rabbit.erl b/src/rabbit.erl
index 37b33bd8a4..a91f2f32b5 100644
--- a/src/rabbit.erl
+++ b/src/rabbit.erl
@@ -27,6 +27,7 @@
-export([start/2, stop/1, prep_stop/1]).
-export([start_apps/1, start_apps/2, stop_apps/1]).
-export([log_locations/0, config_files/0, decrypt_config/2]). %% for testing and mgmt-agent
+-export([is_booted/0, is_booted/1, is_booting/0]).
-ifdef(TEST).
@@ -652,10 +653,16 @@ await_startup(Node) ->
end.
is_booting(Node) ->
- case rpc:call(Node, erlang, whereis, [rabbit_boot]) of
- {badrpc, _} = Err -> Err;
- undefined -> false;
- P when is_pid(P) -> true
+ case rpc:call(Node, rabbit, is_booting, []) of
+ true -> true;
+ false -> false;
+ {badrpc, _} = Err -> Err
+ end.
+
+is_booting() ->
+ case erlang:whereis(rabbit_boot) of
+ undefined -> false;
+ P when is_pid(P) -> true
end.
wait_for_boot_to_start(Node) ->
@@ -745,6 +752,16 @@ is_running() -> is_running(node()).
is_running(Node) -> rabbit_nodes:is_process_running(Node, rabbit).
+is_booted(Node) ->
+ case rpc:call(Node, rabbit, is_booted, []) of
+ true -> true;
+ false -> false;
+ {badrpc, _} -> false
+ end.
+
+is_booted() ->
+ is_running() andalso not is_booting().
+
environment() ->
%% The timeout value is twice that of gen_server:call/2.
[{A, environment(A)} ||
diff --git a/src/rabbit_vhost_sup_sup.erl b/src/rabbit_vhost_sup_sup.erl
index 558648400a..993f1d8430 100644
--- a/src/rabbit_vhost_sup_sup.erl
+++ b/src/rabbit_vhost_sup_sup.erl
@@ -61,7 +61,9 @@ init([]) ->
start_on_all_nodes(VHost) ->
NodesStart = [ {Node, start_vhost(VHost, Node)}
- || Node <- rabbit_nodes:all_running() ],
+ || Node <- rabbit_nodes:all_running(),
+ %% Do not try to start a vhost on booting nodes.
+ rabbit:is_booted(Node) ],
Failures = lists:filter(fun
({_, {ok, _}}) -> false;
({_, {error, {already_started, _}}}) -> false;