diff options
| -rw-r--r-- | src/rabbit.erl | 25 | ||||
| -rw-r--r-- | src/rabbit_vhost_sup_sup.erl | 4 |
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; |
