summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorDaniil Fedotov <hairyhum@gmail.com>2017-05-10 15:24:05 +0100
committerGitHub <noreply@github.com>2017-05-10 15:24:05 +0100
commitde2843dc2aa0d6a047e5aa2ca2dd6b9bc3a01900 (patch)
treec30c748f6dacc56d219dda9697408fe456af18dd /src
parent9e1235c9ed1855d705150c7b38c62242282b6127 (diff)
parent61a1c883cfecb0bcdde6fed529b88eb969b2f8ff (diff)
downloadrabbitmq-server-git-de2843dc2aa0d6a047e5aa2ca2dd6b9bc3a01900.tar.gz
Merge pull request #1217 from rabbitmq/improve-wait-when-clustering-1214
Check rabbit is running after the boot process finishes
Diffstat (limited to 'src')
-rw-r--r--src/rabbit.erl35
1 files changed, 24 insertions, 11 deletions
diff --git a/src/rabbit.erl b/src/rabbit.erl
index ba84f97610..343f1d2827 100644
--- a/src/rabbit.erl
+++ b/src/rabbit.erl
@@ -436,7 +436,7 @@ stop() ->
undefined -> ok;
_ ->
rabbit_log:info("RabbitMQ hasn't finished starting yet. Waiting for startup to finish before stopping..."),
- await_startup(true)
+ wait_to_finish_booting()
end,
rabbit_log:info("RabbitMQ is asked to stop...~n", []),
Apps = ?APPS ++ rabbit_plugins:active(),
@@ -604,19 +604,32 @@ handle_app_error(Term) ->
end.
await_startup() ->
- await_startup(false).
+ case is_booting() of
+ true -> wait_to_finish_booting();
+ false ->
+ case is_running() of
+ true -> ok;
+ false -> wait_to_start_booting(),
+ wait_to_finish_booting()
+ end
+ end.
-await_startup(HaveSeenRabbitBoot) ->
- %% We don't take absence of rabbit_boot as evidence we've started,
- %% since there's a small window before it is registered.
+is_booting() ->
+ whereis(rabbit_boot) /= undefined.
+
+wait_to_start_booting() ->
case whereis(rabbit_boot) of
- undefined -> case HaveSeenRabbitBoot orelse is_running() of
- true -> ok;
- false -> timer:sleep(100),
- await_startup(false)
- end;
+ undefined -> timer:sleep(100),
+ wait_to_start_booting();
+ _ -> ok
+ end.
+
+wait_to_finish_booting() ->
+ case whereis(rabbit_boot) of
+ undefined -> true = is_running(),
+ ok;
_ -> timer:sleep(100),
- await_startup(true)
+ wait_to_finish_booting()
end.
status() ->