diff options
author | Tim Watson <tim.watson@gmail.com> | 2012-05-09 12:15:41 +0100 |
---|---|---|
committer | Tim Watson <tim.watson@gmail.com> | 2012-05-09 12:15:41 +0100 |
commit | 4a0d06700d0565e614fde99d0442bd146a9a51fd (patch) | |
tree | f4190d667a9a907142671dccaddfe6452ce823b3 | |
parent | 77e9767b031e2afd7f20dbdc937401051bb9487d (diff) | |
download | rabbitmq-server-4a0d06700d0565e614fde99d0442bd146a9a51fd.tar.gz |
rabbitmqctl uses rabbit:await_startup/0
-rw-r--r-- | src/app_utils.erl | 16 | ||||
-rw-r--r-- | src/rabbit.erl | 8 | ||||
-rw-r--r-- | src/rabbit_control.erl | 7 |
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. |