Merge remote-tracking branch 'origin/main-v4.4' into 1221-sync-release-v44-to-main-v4.4

This commit is contained in:
Zaiming (Stone) Shi 2022-12-22 09:33:08 +01:00
commit 1421040ecf
3 changed files with 42 additions and 4 deletions

View File

@ -26,6 +26,12 @@ NODE1="node1.$NET"
NODE2="node2.$NET" NODE2="node2.$NET"
COOKIE='this-is-a-secret' COOKIE='this-is-a-secret'
if [ -f EMQX_ENTERPRISE ]; then
REL_DIR='emqx-ee'
else
REL_DIR='emqx'
fi
## clean up ## clean up
docker rm -f "$NODE1" >/dev/null 2>&1 || true docker rm -f "$NODE1" >/dev/null 2>&1 || true
docker rm -f "$NODE2" >/dev/null 2>&1 || true docker rm -f "$NODE2" >/dev/null 2>&1 || true
@ -33,22 +39,22 @@ docker network rm "$NET" >/dev/null 2>&1 || true
docker network create "$NET" docker network create "$NET"
docker run -d -t --restart=always --name "$NODE1" \ docker run -d -it --restart=always --name "$NODE1" \
--net "$NET" \ --net "$NET" \
-e EMQX_NODE_NAME="emqx@$NODE1" \ -e EMQX_NODE_NAME="emqx@$NODE1" \
-e EMQX_NODE_COOKIE="$COOKIE" \ -e EMQX_NODE_COOKIE="$COOKIE" \
-e WAIT_FOR_ERLANG=60 \ -e WAIT_FOR_ERLANG=60 \
-p 18083:18083 \ -p 18083:18083 \
-v "$PROJ_DIR"/_build/emqx/rel/emqx:/built \ -v "$PROJ_DIR"/_build/"${REL_DIR}"/rel/emqx:/built \
"$IMAGE" sh -c 'cp -r /built /emqx && /emqx/bin/emqx console' "$IMAGE" sh -c 'cp -r /built /emqx && /emqx/bin/emqx console'
docker run -d -t --restart=always --name "$NODE2" \ docker run -d -it --restart=always --name "$NODE2" \
--net "$NET" \ --net "$NET" \
-e EMQX_NODE_NAME="emqx@$NODE2" \ -e EMQX_NODE_NAME="emqx@$NODE2" \
-e EMQX_NODE_COOKIE="$COOKIE" \ -e EMQX_NODE_COOKIE="$COOKIE" \
-e WAIT_FOR_ERLANG=60 \ -e WAIT_FOR_ERLANG=60 \
-p 18084:18083 \ -p 18084:18083 \
-v "$PROJ_DIR"/_build/emqx/rel/emqx:/built \ -v "$PROJ_DIR"/_build/"${REL_DIR}"/rel/emqx:/built \
"$IMAGE" sh -c 'cp -r /built /emqx && /emqx/bin/emqx console' "$IMAGE" sh -c 'cp -r /built /emqx && /emqx/bin/emqx console'
wait (){ wait (){

View File

@ -26,6 +26,7 @@
-export([ merge_opts/2 -export([ merge_opts/2
, maybe_apply/2 , maybe_apply/2
, maybe_mute_rpc_log/0 , maybe_mute_rpc_log/0
, safe_io_device/0
, compose/1 , compose/1
, compose/2 , compose/2
, run_fold/3 , run_fold/3
@ -478,6 +479,34 @@ maybe_mute_rpc_log(Node) ->
ok ok
end. end.
is_group_leader_node_connected() ->
GLNode = node(group_leader()),
case atom_to_list(GLNode) of
"remsh" ++ _ ->
{ok, Nodes} = net_kernel:nodes_info(),
lists:keymember(GLNode, 1, Nodes);
_ ->
%% for a non-remsh node
%% as long as the group leader is showing up
%% it should be connected
true
end.
%% @doc Return 'standard_io' or 'standard_error' io device depending on the
%% current group leader node.
%% EMQX nodes do not use EPMD, there is no way for a EMQX node to connect to
%% a remsh node which is not directly connected already.
%% In this case, io:format may fail with {io,terminated} exception.
%% For io:format calls which can be evaluated from RPC calls, call this
%% function to get a safe io device.
safe_io_device() ->
case is_group_leader_node_connected() of
true ->
standard_io;
false ->
standard_error
end.
is_sensitive_key(token) -> true; is_sensitive_key(token) -> true;
is_sensitive_key("token") -> true; is_sensitive_key("token") -> true;
is_sensitive_key(<<"token">>) -> true; is_sensitive_key(<<"token">>) -> true;

View File

@ -179,3 +179,6 @@ t_pmap_exception(_) ->
[{2, 3}, {3, 4}, error] [{2, 3}, {3, 4}, error]
) )
). ).
t_safe_io_device(_) ->
?assertEqual(standard_io, emqx_misc:safe_io_device()).