diff options
author | Michael Klishin <michael@clojurewerkz.org> | 2019-04-25 03:20:49 +0300 |
---|---|---|
committer | Michael Klishin <michael@clojurewerkz.org> | 2019-04-25 03:20:49 +0300 |
commit | 009b0482ac8667b97c04012507a0568f1b7f9217 (patch) | |
tree | 8196625fe83d8d8c6aa43407d618748760c42fc4 | |
parent | 54bda9775c71de431f6b7626f95e500c8881c505 (diff) | |
parent | db74cf2ad35bd055a5d40e353a1c450b6992b8a5 (diff) | |
download | rabbitmq-server-git-009b0482ac8667b97c04012507a0568f1b7f9217.tar.gz |
Merge branch 'velimir-schema-check-boot-failed'
-rw-r--r-- | src/rabbit.erl | 33 | ||||
-rw-r--r-- | test/unit_inbroker_non_parallel_SUITE.erl | 92 |
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), |