summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTim Watson <tim.watson@gmail.com>2012-05-09 12:15:41 +0100
committerTim Watson <tim.watson@gmail.com>2012-05-09 12:15:41 +0100
commit4a0d06700d0565e614fde99d0442bd146a9a51fd (patch)
treef4190d667a9a907142671dccaddfe6452ce823b3
parent77e9767b031e2afd7f20dbdc937401051bb9487d (diff)
downloadrabbitmq-server-4a0d06700d0565e614fde99d0442bd146a9a51fd.tar.gz
rabbitmqctl uses rabbit:await_startup/0
-rw-r--r--src/app_utils.erl16
-rw-r--r--src/rabbit.erl8
-rw-r--r--src/rabbit_control.erl7
3 files changed, 23 insertions, 8 deletions
diff --git a/src/app_utils.erl b/src/app_utils.erl
index dfbf7106..4bef83a5 100644
--- a/src/app_utils.erl
+++ b/src/app_utils.erl
@@ -16,13 +16,15 @@
-module(app_utils).
-export([load_applications/1, start_applications/1,
- stop_applications/1, app_dependency_order/2]).
+ stop_applications/1, app_dependency_order/2,
+ wait_for_applications/1]).
-ifdef(use_specs).
--spec start_applications([atom()]) -> 'ok'.
-spec load_applications([atom()]) -> 'ok'.
+-spec start_applications([atom()]) -> 'ok'.
-spec stop_applications([atom()]) -> 'ok'.
+-spec wait_for_applications([atom()]) -> 'ok'.
-spec app_dependency_order([atom()], boolean()) -> [digraph:vertex()].
-endif.
@@ -50,6 +52,9 @@ stop_applications(Apps) ->
cannot_stop_application,
Apps).
+wait_for_applications(Apps) ->
+ [wait_for_application(App) || App <- Apps], ok.
+
app_dependency_order(RootApps, StripUnreachable) ->
{ok, G} = rabbit_misc:build_acyclic_graph(
fun (App, _Deps) -> [{App, App}] end,
@@ -70,6 +75,13 @@ app_dependency_order(RootApps, StripUnreachable) ->
%%---------------------------------------------------------------------------
%% Private API
+wait_for_application(Application) ->
+ case lists:keymember(Application, 1, application:which_applications()) of
+ true -> ok;
+ false -> timer:sleep(1000),
+ wait_for_application(Application)
+ end.
+
load_applications(Worklist, Loaded) ->
case queue:out(Worklist) of
{empty, _WorkList} ->
diff --git a/src/rabbit.erl b/src/rabbit.erl
index ee0f82a1..1d54d0b6 100644
--- a/src/rabbit.erl
+++ b/src/rabbit.erl
@@ -19,8 +19,8 @@
-behaviour(application).
-export([maybe_hipe_compile/0, prepare/0, start/0, boot/0, stop/0,
- stop_and_halt/0, status/0, is_running/0, is_running/1, environment/0,
- rotate_logs/1, force_event_refresh/0]).
+ stop_and_halt/0, await_startup/0, status/0, is_running/0,
+ is_running/1, environment/0, rotate_logs/1, force_event_refresh/0]).
-export([start/2, stop/1]).
@@ -220,6 +220,7 @@
-spec(boot/0 :: () -> 'ok').
-spec(stop/0 :: () -> 'ok').
-spec(stop_and_halt/0 :: () -> no_return()).
+-spec(await_startup/0 :: () -> 'ok').
-spec(status/0 ::
() -> [{pid, integer()} |
{running_applications, [{atom(), string(), string()}]} |
@@ -339,6 +340,9 @@ stop_and_halt() ->
end,
ok.
+await_startup() ->
+ app_utils:wait_for_applications(app_startup_order()).
+
status() ->
S1 = [{pid, list_to_integer(os:getpid())},
{running_applications, application:which_applications(infinity)},
diff --git a/src/rabbit_control.erl b/src/rabbit_control.erl
index 9b317cee..d9b2ae97 100644
--- a/src/rabbit_control.erl
+++ b/src/rabbit_control.erl
@@ -407,10 +407,9 @@ wait_for_application(Node, PidFile, Application, Inform) ->
wait_for_application(Node, Pid, Application) ->
case process_up(Pid) of
- true -> case rabbit_nodes:is_running(Node, Application) of
- true -> ok;
- false -> timer:sleep(?EXTERNAL_CHECK_INTERVAL),
- wait_for_application(Node, Pid, Application)
+ true -> case rpc:call(Node, rabbit, await_startup, []) of
+ {badrpc, _} -> {error, node_not_responding};
+ ok -> ok
end;
false -> {error, process_not_running}
end.