summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMichael Klishin <michael@clojurewerkz.org>2019-04-25 03:20:49 +0300
committerMichael Klishin <michael@clojurewerkz.org>2019-04-25 03:20:49 +0300
commit009b0482ac8667b97c04012507a0568f1b7f9217 (patch)
tree8196625fe83d8d8c6aa43407d618748760c42fc4
parent54bda9775c71de431f6b7626f95e500c8881c505 (diff)
parentdb74cf2ad35bd055a5d40e353a1c450b6992b8a5 (diff)
downloadrabbitmq-server-git-009b0482ac8667b97c04012507a0568f1b7f9217.tar.gz
Merge branch 'velimir-schema-check-boot-failed'
-rw-r--r--src/rabbit.erl33
-rw-r--r--test/unit_inbroker_non_parallel_SUITE.erl92
2 files changed, 75 insertions, 50 deletions
diff --git a/src/rabbit.erl b/src/rabbit.erl
index 09b0494ce1..02a2a899ad 100644
--- a/src/rabbit.erl
+++ b/src/rabbit.erl
@@ -320,13 +320,11 @@ ensure_config() ->
case rabbit_config:validate_config_files() of
ok -> ok;
{error, {ErrFmt, ErrArgs}} ->
- log_boot_error_and_exit(check_config_file, ErrFmt, ErrArgs)
+ throw({error, {check_config_file, ErrFmt, ErrArgs}})
end,
case rabbit_config:prepare_and_use_config() of
{error, {generation_error, Error}} ->
- log_boot_error_and_exit(generate_config_file,
- "~nConfig file generation failed ~s",
- Error);
+ throw({error, {generate_config_file, Error}});
ok -> ok
end.
@@ -463,9 +461,8 @@ start_it(StartFun) ->
true -> ok;
false -> StartFun()
end
- catch
- Class:Reason ->
- boot_error(Class, Reason)
+ catch Class:Reason ->
+ boot_error(Class, Reason)
after
unlink(Marker),
Marker ! stop,
@@ -1018,11 +1015,23 @@ boot_error(_, {could_not_start, rabbit, {{timeout_waiting_for_tables, _}, _}}) -
log_boot_error_and_exit(
timeout_waiting_for_tables,
"~n" ++ Err ++ rabbit_nodes:diagnostics(Nodes), []);
-boot_error(Class, {error, {cannot_log_to_file, _, _}} = Reason) ->
- log_boot_error_and_exit(
- Reason,
- "~nError description:~s",
- [lager:pr_stacktrace(erlang:get_stacktrace(), {Class, Reason})]);
+boot_error(_, {error, {cannot_log_to_file, unknown, Reason}}) ->
+ log_boot_error_and_exit(could_not_initialise_logger,
+ "failed to initialised logger: ~p~n",
+ [Reason]);
+boot_error(_, {error, {cannot_log_to_file, LogFile,
+ {cannot_create_parent_dirs, _, Reason}}}) ->
+ log_boot_error_and_exit(could_not_initialise_logger,
+ "failed to create parent directory for log file at '~s', reason: ~p~n",
+ [LogFile, Reason]);
+boot_error(_, {error, {cannot_log_to_file, LogFile, Reason}}) ->
+ log_boot_error_and_exit(could_not_initialise_logger,
+ "failed to open log file at '~s', reason: ~p~n",
+ [LogFile, Reason]);
+boot_error(_, {error, {generate_config_file, Error}}) ->
+ log_boot_error_and_exit(generate_config_file,
+ "~nConfig file generation failed ~s~n",
+ [Error]);
boot_error(Class, Reason) ->
LogLocations = log_locations(),
log_boot_error_and_exit(
diff --git a/test/unit_inbroker_non_parallel_SUITE.erl b/test/unit_inbroker_non_parallel_SUITE.erl
index 866d529489..56b645c98e 100644
--- a/test/unit_inbroker_non_parallel_SUITE.erl
+++ b/test/unit_inbroker_non_parallel_SUITE.erl
@@ -39,7 +39,8 @@ groups() ->
file_handle_cache, %% Change FHC limit.
head_message_timestamp_statistics, %% Expect specific statistics.
log_management, %% Check log files.
- log_management_during_startup, %% Check log files.
+ log_file_initialised_during_startup,
+ log_file_fails_to_initialise_during_startup,
externally_rotated_logs_are_automatically_reopened %% Check log files.
]}
].
@@ -271,11 +272,11 @@ log_management1(_Config) ->
ok = test_logs_working([LogFile]),
passed.
-log_management_during_startup(Config) ->
+log_file_initialised_during_startup(Config) ->
passed = rabbit_ct_broker_helpers:rpc(Config, 0,
- ?MODULE, log_management_during_startup1, [Config]).
+ ?MODULE, log_file_initialised_during_startup1, [Config]).
-log_management_during_startup1(_Config) ->
+log_file_initialised_during_startup1(_Config) ->
[LogFile|_] = rabbit:log_locations(),
Suffix = ".0",
@@ -299,57 +300,72 @@ log_management_during_startup1(_Config) ->
application:unset_env(lager, extra_sinks),
ok = rabbit:start(),
- %% start application with logging to directory with no
- %% write permissions
- ok = rabbit:stop(),
- NoPermission1 = "/var/empty/test.log",
- delete_file(NoPermission1),
- delete_file(filename:dirname(NoPermission1)),
- ok = rabbit:stop(),
- ok = application:set_env(rabbit, lager_default_file, NoPermission1),
+ %% clean up
+ ok = application:set_env(rabbit, lager_default_file, LogFile),
application:unset_env(rabbit, log),
application:unset_env(lager, handlers),
application:unset_env(lager, extra_sinks),
- ok = try rabbit:start() of
+ ok = rabbit:start(),
+ passed.
+
+
+log_file_fails_to_initialise_during_startup(Config) ->
+ passed = rabbit_ct_broker_helpers:rpc(Config, 0,
+ ?MODULE, log_file_fails_to_initialise_during_startup1, [Config]).
+
+log_file_fails_to_initialise_during_startup1(_Config) ->
+ [LogFile|_] = rabbit:log_locations(),
+ Suffix = ".0",
+
+ %% start application with logging to directory with no
+ %% write permissions
+ ok = rabbit:stop(),
+
+ Run1 = fun() ->
+ NoPermission1 = "/var/empty/test.log",
+ delete_file(NoPermission1),
+ delete_file(filename:dirname(NoPermission1)),
+ ok = rabbit:stop(),
+ ok = application:set_env(rabbit, lager_default_file, NoPermission1),
+ application:unset_env(rabbit, log),
+ application:unset_env(lager, handlers),
+ application:unset_env(lager, extra_sinks),
+ rabbit:start()
+ end,
+
+ ok = try Run1() of
ok -> exit({got_success_but_expected_failure,
log_rotation_no_write_permission_dir_test})
catch
- _:{error, {cannot_log_to_file, _, Reason1}}
- when Reason1 =:= enoent orelse Reason1 =:= eacces -> ok;
- _:{error, {cannot_log_to_file, _,
- {cannot_create_parent_dirs, _, Reason1}}}
- when Reason1 =:= eperm orelse
- Reason1 =:= eacces orelse
- Reason1 =:= enoent-> ok
+ _:could_not_initialise_logger -> ok
end,
%% start application with logging to a subdirectory which
%% parent directory has no write permissions
NoPermission2 = "/var/empty/non-existent/test.log",
- delete_file(NoPermission2),
- delete_file(filename:dirname(NoPermission2)),
- case rabbit:stop() of
- ok -> ok;
- {error, lager_not_running} -> ok
+
+ Run2 = fun() ->
+ delete_file(NoPermission2),
+ delete_file(filename:dirname(NoPermission2)),
+ case rabbit:stop() of
+ ok -> ok;
+ {error, lager_not_running} -> ok
+ end,
+ ok = application:set_env(rabbit, lager_default_file, NoPermission2),
+ application:unset_env(rabbit, log),
+ application:unset_env(lager, handlers),
+ application:unset_env(lager, extra_sinks),
+ rabbit:start()
end,
- ok = application:set_env(rabbit, lager_default_file, NoPermission2),
- application:unset_env(rabbit, log),
- application:unset_env(lager, handlers),
- application:unset_env(lager, extra_sinks),
- ok = try rabbit:start() of
+
+ ok = try Run2() of
ok -> exit({got_success_but_expected_failure,
log_rotation_parent_dirs_test})
catch
- _:{error, {cannot_log_to_file, _, Reason2}}
- when Reason2 =:= enoent orelse Reason2 =:= eacces -> ok;
- _:{error, {cannot_log_to_file, _,
- {cannot_create_parent_dirs, _, Reason2}}}
- when Reason2 =:= eperm orelse
- Reason2 =:= eacces orelse
- Reason2 =:= enoent-> ok
+ _:could_not_initialise_logger -> ok
end,
- %% cleanup
+ %% clean up
ok = application:set_env(rabbit, lager_default_file, LogFile),
application:unset_env(rabbit, log),
application:unset_env(lager, handlers),