Просмотр исходного кода

Merge pull request #10015 from zmstone/0220-faile-fast-if-cookie-is-obviously-wrong

0220 fail fast if cookie is obviously wrong
Zaiming (Stone) Shi 3 лет назад
Родитель
Сommit
80afb69bb2
4 измененных файлов с 21 добавлено и 4 удалено
  1. 1 1
      apps/emqx_ctl/src/emqx_ctl.erl
  2. 9 3
      bin/emqx
  3. 7 0
      changes/ce/fix-10015.en.md
  4. 4 0
      changes/ce/fix-10015.zh.md

+ 1 - 1
apps/emqx_ctl/src/emqx_ctl.erl

@@ -149,7 +149,7 @@ help() ->
         [] ->
             print("No commands available.~n");
         Cmds ->
-            print("Usage: ~ts~n", [?MODULE]),
+            print("Usage: ~ts~n", ["emqx ctl"]),
             lists:foreach(
                 fun({_, {Mod, Cmd}, _}) ->
                     print("~110..-s~n", [""]),

+ 9 - 3
bin/emqx

@@ -545,8 +545,12 @@ else
                 logerr "Make sure environment variable EMQX_NODE__NAME is set to indicate for which node this command is intended."
                 exit 1
             fi
+        else
+            if [ -n "${EMQX_NODE__NAME:-}" ]; then
+                die "Node $EMQX_NODE__NAME is not running?"
+            fi
         fi
-        ## We have no choiece but to read the bootstrap config (with environment overrides available in the current shell)
+        ## We have no choice but to read the bootstrap config (with environment overrides available in the current shell)
         [ -f "$EMQX_ETC_DIR"/emqx.conf ] || die "emqx.conf is not found in $EMQX_ETC_DIR" 1
         maybe_use_portable_dynlibs
         EMQX_BOOT_CONFIGS="$(call_hocon -s "$SCHEMA_MOD" -c "$EMQX_ETC_DIR"/emqx.conf multi_get "${CONF_KEYS[@]}")"
@@ -940,9 +944,11 @@ if [ -n "${EMQX_NODE_COOKIE:-}" ]; then
     unset EMQX_NODE_COOKIE
 fi
 COOKIE="${EMQX_NODE__COOKIE:-}"
-if [ -z "$COOKIE" ]; then
-    COOKIE="$(get_boot_config 'node.cookie')"
+COOKIE_IN_USE="$(get_boot_config 'node.cookie')"
+if [ -n "$COOKIE_IN_USE" ] && [ -n "$COOKIE" ] && [ "$COOKIE" != "$COOKIE_IN_USE" ]; then
+    die "EMQX_NODE__COOKIE is different from the cookie used by $NAME"
 fi
+[ -z "$COOKIE" ] && COOKIE="$COOKIE_IN_USE"
 [ -z "$COOKIE" ] && COOKIE="$EMQX_DEFAULT_ERLANG_COOKIE"
 
 maybe_warn_default_cookie() {

+ 7 - 0
changes/ce/fix-10015.en.md

@@ -0,0 +1,7 @@
+To prevent errors caused by an incorrect EMQX node cookie provided from an environment variable,
+we have implemented a fail-fast mechanism.
+Previously, when an incorrect cookie was provided, the command would still attempt to ping the node,
+leading to the error message 'Node xxx not responding to pings'.
+With the new implementation, if a mismatched cookie is detected,
+a message will be logged to indicate that the cookie is incorrect,
+and the command will terminate with an error code of 1 without trying to ping the node.

+ 4 - 0
changes/ce/fix-10015.zh.md

@@ -0,0 +1,4 @@
+在 cookie 给错时,快速失败。
+在此修复前,即使 cookie 配置错误,emqx 命令仍然会尝试去 ping EMQX 节点,
+并得到一个 "Node xxx not responding to pings" 的错误。
+修复后,如果发现 cookie 不一致,立即打印不一致的错误信息并退出。