diff options
| author | Michael Klishin <michael@clojurewerkz.org> | 2017-10-19 20:06:12 +0300 |
|---|---|---|
| committer | Michael Klishin <michael@clojurewerkz.org> | 2017-10-19 20:06:12 +0300 |
| commit | 1409ce20c40bfeeb3d82065119a2caf5f9b7e54e (patch) | |
| tree | bb2ddc043bfea9756ea847ef88efe896ecd1d990 | |
| parent | be796e0c6fe9237ab5e9b1bae86b0de2f7b0a19a (diff) | |
| parent | 51aca8851eba66445ad5b164fc92b2ffa0692fc2 (diff) | |
| download | rabbitmq-server-git-1409ce20c40bfeeb3d82065119a2caf5f9b7e54e.tar.gz | |
Merge branch 'rabbitmqctl-shutdown-custom-exit-code-to-indicate-server-reported-failure' into stable
| -rw-r--r-- | include/rabbit_cli.hrl | 5 | ||||
| -rw-r--r-- | src/rabbit.erl | 2 | ||||
| -rw-r--r-- | src/rabbit_cli.erl | 4 | ||||
| -rw-r--r-- | src/rabbit_control_main.erl | 11 |
4 files changed, 17 insertions, 5 deletions
diff --git a/include/rabbit_cli.hrl b/include/rabbit_cli.hrl index 12fa5b4dd8..0908f82775 100644 --- a/include/rabbit_cli.hrl +++ b/include/rabbit_cli.hrl @@ -72,3 +72,8 @@ -define(EX_SOFTWARE , 70). % Failed to execute command. -define(EX_TEMPFAIL , 75). % Temporary error (e.g. something has timed out). -define(EX_CONFIG , 78). % Misconfiguration detected + +% Non-standard code that indicates that node shutdown failed with an error +% other than an unsuccessfull RPC call or a timeout. See rabbitmq/rabbitmq-server#1396 +% for context. +-define(EX_SHUTDOWN_ERROR, 79). diff --git a/src/rabbit.erl b/src/rabbit.erl index 033379bad1..4a9ae6ba76 100644 --- a/src/rabbit.erl +++ b/src/rabbit.erl @@ -453,7 +453,7 @@ stop_and_halt() -> stop() catch Type:Reason -> rabbit_log:error("Error trying to stop RabbitMQ: ~p:~p", [Type, Reason]), - error({Type, Reason}) + erlang:error({Type, Reason}) after %% Enclose all the logging in the try block. %% init:stop() will be called regardless of any errors. diff --git a/src/rabbit_cli.erl b/src/rabbit_cli.erl index da29136853..c4c7b8eaeb 100644 --- a/src/rabbit_cli.erl +++ b/src/rabbit_cli.erl @@ -93,6 +93,10 @@ main(ParseFun, DoFun, UsageMod) -> {'EXIT', {function_clause, [{?MODULE, action, _, _} | _]}} -> %% >= R15 PrintInvalidCommandError(), usage(UsageMod); + {error, {error_during_shutdown, Err}} -> + print_error("Node ~w failed to shut down: ~p.", + [Node, Err]), + rabbit_misc:quit(?EX_SHUTDOWN_ERROR); {error, {missing_dependencies, Missing, Blame}} -> print_error("dependent plugins ~p not found; used by ~p.", [Missing, Blame]), diff --git a/src/rabbit_control_main.erl b/src/rabbit_control_main.erl index 50cf832e5d..d220ab3802 100644 --- a/src/rabbit_control_main.erl +++ b/src/rabbit_control_main.erl @@ -283,10 +283,13 @@ shutdown_node_and_wait_pid_to_stop(Node, Pid, Inform) -> wait_for_process_death(Pid), Inform( "RabbitMQ node ~p running at PID ~s successfully shut down", - [Node, Pid]); - _ -> ok - end, - Res. + [Node, Pid]), + Res; + {error, Err} -> + {error, {error_during_shutdown, Err}}; + _ -> + Res + end. action(shutdown, Node, [], _Opts, Inform) -> case rpc:call(Node, os, getpid, []) of |
