diff options
| author | Daniil Fedotov <hairyhum@gmail.com> | 2017-05-10 15:24:05 +0100 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2017-05-10 15:24:05 +0100 |
| commit | de2843dc2aa0d6a047e5aa2ca2dd6b9bc3a01900 (patch) | |
| tree | c30c748f6dacc56d219dda9697408fe456af18dd /src | |
| parent | 9e1235c9ed1855d705150c7b38c62242282b6127 (diff) | |
| parent | 61a1c883cfecb0bcdde6fed529b88eb969b2f8ff (diff) | |
| download | rabbitmq-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.erl | 35 |
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() -> |
