Sfoglia il codice sorgente

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

Serge Tupchii 2 anni fa
parent
commit
9b3f88aeeb
2 ha cambiato i file con 17 aggiunte e 1 eliminazioni
  1. 16 1
      bin/nodetool
  2. 1 0
      changes/ce/fix-11567.en.md

+ 16 - 1
bin/nodetool

@@ -87,7 +87,10 @@ do(Args) ->
             %% a "pong"
             io:format("pong\n");
         ["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;
                 {badrpc, timeout} ->
@@ -152,6 +155,18 @@ do(Args) ->
     end,
     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) ->
     % 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

+ 1 - 0
changes/ce/fix-11567.en.md

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