Merge pull request #9592 from zmstone/1221-fix-io-format-error-when-rpc-from-remsh
1221 fix io format error when rpc from remsh
This commit is contained in:
commit
d855fb3734
|
@ -26,6 +26,12 @@ NODE1="node1.$NET"
|
|||
NODE2="node2.$NET"
|
||||
COOKIE='this-is-a-secret'
|
||||
|
||||
if [ -f EMQX_ENTERPRISE ]; then
|
||||
REL_DIR='emqx-ee'
|
||||
else
|
||||
REL_DIR='emqx'
|
||||
fi
|
||||
|
||||
## clean up
|
||||
docker rm -f "$NODE1" >/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 run -d -t --restart=always --name "$NODE1" \
|
||||
docker run -d -it --restart=always --name "$NODE1" \
|
||||
--net "$NET" \
|
||||
-e EMQX_NODE_NAME="emqx@$NODE1" \
|
||||
-e EMQX_NODE_COOKIE="$COOKIE" \
|
||||
-e WAIT_FOR_ERLANG=60 \
|
||||
-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'
|
||||
|
||||
docker run -d -t --restart=always --name "$NODE2" \
|
||||
docker run -d -it --restart=always --name "$NODE2" \
|
||||
--net "$NET" \
|
||||
-e EMQX_NODE_NAME="emqx@$NODE2" \
|
||||
-e EMQX_NODE_COOKIE="$COOKIE" \
|
||||
-e WAIT_FOR_ERLANG=60 \
|
||||
-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'
|
||||
|
||||
wait (){
|
||||
|
|
|
@ -26,6 +26,7 @@
|
|||
-export([ merge_opts/2
|
||||
, maybe_apply/2
|
||||
, maybe_mute_rpc_log/0
|
||||
, safe_io_device/0
|
||||
, compose/1
|
||||
, compose/2
|
||||
, run_fold/3
|
||||
|
@ -478,6 +479,34 @@ maybe_mute_rpc_log(Node) ->
|
|||
ok
|
||||
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;
|
||||
|
|
|
@ -179,3 +179,6 @@ t_pmap_exception(_) ->
|
|||
[{2, 3}, {3, 4}, error]
|
||||
)
|
||||
).
|
||||
|
||||
t_safe_io_device(_) ->
|
||||
?assertEqual(standard_io, emqx_misc:safe_io_device()).
|
||||
|
|
Loading…
Reference in New Issue