summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTim Watson <tim@rabbitmq.com>2012-10-17 13:57:55 +0100
committerTim Watson <tim@rabbitmq.com>2012-10-17 13:57:55 +0100
commit11472c95a2e54d116206079444458af90f6845fc (patch)
treeba01a14fc447ab00019f60bb368aaae6ed980bc8
parent5da4862faf958f1bfacc4b0a5f9326dac998afe0 (diff)
parenta6210401aa5711d8c3d8adef4aa1ed943ae05a7d (diff)
downloadrabbitmq-server-11472c95a2e54d116206079444458af90f6845fc.tar.gz
merge default
-rw-r--r--src/rabbit.erl25
-rw-r--r--src/rabbit_tests.erl15
2 files changed, 30 insertions, 10 deletions
diff --git a/src/rabbit.erl b/src/rabbit.erl
index 93808f84..5dcf27ed 100644
--- a/src/rabbit.erl
+++ b/src/rabbit.erl
@@ -300,9 +300,11 @@ start() ->
%% We do not want to HiPE compile or upgrade
%% mnesia after just restarting the app
ok = ensure_application_loaded(),
- ok = rabbit_node_monitor:prepare_cluster_status_files(),
- ok = rabbit_mnesia:check_cluster_consistency(),
ok = ensure_working_log_handlers(),
+ apply_post_boot_step(
+ fun rabbit_node_monitor:prepare_cluster_status_files/0),
+ apply_post_boot_step(
+ fun rabbit_mnesia:check_cluster_consistency/0),
ok = app_utils:start_applications(
app_startup_order(), fun handle_app_error/2),
ok = print_plugin_info(rabbit_plugins:active())
@@ -312,13 +314,15 @@ boot() ->
start_it(fun() ->
ok = ensure_application_loaded(),
maybe_hipe_compile(),
- ok = rabbit_node_monitor:prepare_cluster_status_files(),
ok = ensure_working_log_handlers(),
+ apply_post_boot_step(
+ fun rabbit_node_monitor:prepare_cluster_status_files/0),
ok = rabbit_upgrade:maybe_upgrade_mnesia(),
%% It's important that the consistency check happens after
%% the upgrade, since if we are a secondary node the
%% primary node will have forgotten us
- ok = rabbit_mnesia:check_cluster_consistency(),
+ apply_post_boot_step(
+ fun rabbit_mnesia:check_cluster_consistency/0),
Plugins = rabbit_plugins:setup(),
ToBeLoaded = Plugins ++ ?APPS,
ok = app_utils:load_applications(ToBeLoaded),
@@ -329,6 +333,13 @@ boot() ->
ok = print_plugin_info(Plugins)
end).
+apply_post_boot_step(Step) ->
+ try
+ ok = Step()
+ catch
+ _:Reason -> boot_error(Reason, erlang:get_stacktrace())
+ end.
+
handle_app_error(App, {bad_return, {_MFA, {'EXIT', {Reason, _}}}}) ->
boot_error({could_not_start, App, Reason}, not_available);
@@ -530,11 +541,13 @@ boot_error({error, {timeout_waiting_for_tables, _}}, _Stacktrace) ->
Ns}
end,
basic_boot_error(Err ++ rabbit_nodes:diagnostics(Nodes) ++ "~n~n", []);
-
boot_error(Reason, Stacktrace) ->
- Fmt = "Error description:~n ~p~n~n"
+ Fmt = "Error description:~n ~p~n~n" ++
"Log files (may contain more information):~n ~s~n ~s~n~n",
Args = [Reason, log_location(kernel), log_location(sasl)],
+ boot_error(Fmt, Args, Stacktrace).
+
+boot_error(Fmt, Args, Stacktrace) ->
case Stacktrace of
not_available -> basic_boot_error(Fmt, Args);
_ -> basic_boot_error(Fmt ++ "Stack trace:~n ~p~n~n",
diff --git a/src/rabbit_tests.erl b/src/rabbit_tests.erl
index aa48f228..e6054853 100644
--- a/src/rabbit_tests.erl
+++ b/src/rabbit_tests.erl
@@ -774,7 +774,9 @@ test_log_management_during_startup() ->
ok = case catch control_action(start_app, []) of
ok -> exit({got_success_but_expected_failure,
log_rotation_tty_no_handlers_test});
- {error, {cannot_log_to_tty, _, _}} -> ok
+ {badrpc, {'EXIT', {rabbit,failure_during_boot,
+ {error,{cannot_log_to_tty,
+ _, not_installed}}}}} -> ok
end,
%% fix sasl logging
@@ -798,7 +800,9 @@ test_log_management_during_startup() ->
ok = case control_action(start_app, []) of
ok -> exit({got_success_but_expected_failure,
log_rotation_no_write_permission_dir_test});
- {error, {cannot_log_to_file, _, _}} -> ok
+ {badrpc, {'EXIT',
+ {rabbit, failure_during_boot,
+ {error, {cannot_log_to_file, _, _}}}}} -> ok
end,
%% start application with logging to a subdirectory which
@@ -809,8 +813,11 @@ test_log_management_during_startup() ->
ok = case control_action(start_app, []) of
ok -> exit({got_success_but_expected_failure,
log_rotatation_parent_dirs_test});
- {error, {cannot_log_to_file, _,
- {error, {cannot_create_parent_dirs, _, eacces}}}} -> ok
+ {badrpc,
+ {'EXIT', {rabbit,failure_during_boot,
+ {error, {cannot_log_to_file, _,
+ {error,
+ {cannot_create_parent_dirs, _, eacces}}}}}}} -> ok
end,
ok = set_permissions(TmpDir, 8#00700),
ok = set_permissions(TmpLog, 8#00600),