feat(nodetool): print shutdown status messages while EMQX is stopping

This commit is contained in:
Serge Tupchii 2023-09-06 12:33:07 +03:00
parent 9de9631d6b
commit 9b3f88aeeb
2 changed files with 17 additions and 1 deletions

View File

@ -87,7 +87,10 @@ do(Args) ->
%% a "pong" %% a "pong"
io:format("pong\n"); io:format("pong\n");
["stop"] -> ["stop"] ->
case rpc:call(TargetNode, emqx_machine, graceful_shutdown, [], ?SHUTDOWN_TIMEOUT_MS) of Pid = start_shutdown_status(),
Res = rpc:call(TargetNode, emqx_machine, graceful_shutdown, [], ?SHUTDOWN_TIMEOUT_MS),
true = stop_shutdown_status(Pid),
case Res of
ok -> ok ->
ok; ok;
{badrpc, timeout} -> {badrpc, timeout} ->
@ -152,6 +155,18 @@ do(Args) ->
end, end,
net_kernel:stop(). net_kernel:stop().
start_shutdown_status() ->
spawn_link(fun shutdown_status_loop/0).
stop_shutdown_status(Pid) ->
true = unlink(Pid),
true = exit(Pid, stop).
shutdown_status_loop() ->
timer:sleep(10_000),
io:format("EMQX is shutting down, please wait...\n", []),
shutdown_status_loop().
parse_eval_args(Args) -> parse_eval_args(Args) ->
% shells may process args into more than one, and end up stripping % shells may process args into more than one, and end up stripping
% spaces, so this converts all of that to a single string to parse % spaces, so this converts all of that to a single string to parse

View File

@ -1,3 +1,4 @@
Improve EMQX graceful shutdown (`emqx stop` command): Improve EMQX graceful shutdown (`emqx stop` command):
- increase timeout from 1 to 2 minutes - increase timeout from 1 to 2 minutes
- print an error message if EMQX can't stop gracefully within the configured timeout - print an error message if EMQX can't stop gracefully within the configured timeout
- print periodic status messages while EMQX is shutting down