Merge pull request #13314 from zhongwencool/flaky-cluster-rpc-SUITE
test: add more debug msg to flaky cluster_rpc SUITE
This commit is contained in:
commit
14e2ed7be1
|
@ -74,13 +74,14 @@ end_per_testcase(_Config) ->
|
||||||
t_base_test(_Config) ->
|
t_base_test(_Config) ->
|
||||||
?assertEqual(emqx_cluster_rpc:status(), {atomic, []}),
|
?assertEqual(emqx_cluster_rpc:status(), {atomic, []}),
|
||||||
Pid = self(),
|
Pid = self(),
|
||||||
MFA = {M, F, A} = {?MODULE, echo, [Pid, test]},
|
Msg = ?FUNCTION_NAME,
|
||||||
|
MFA = {M, F, A} = {?MODULE, echo, [Pid, Msg]},
|
||||||
{ok, TnxId, ok} = multicall(M, F, A),
|
{ok, TnxId, ok} = multicall(M, F, A),
|
||||||
{atomic, Query} = emqx_cluster_rpc:query(TnxId),
|
{atomic, Query} = emqx_cluster_rpc:query(TnxId),
|
||||||
?assertEqual(MFA, maps:get(mfa, Query)),
|
?assertEqual(MFA, maps:get(mfa, Query)),
|
||||||
?assertEqual(node(), maps:get(initiator, Query)),
|
?assertEqual(node(), maps:get(initiator, Query)),
|
||||||
?assert(maps:is_key(created_at, Query)),
|
?assert(maps:is_key(created_at, Query)),
|
||||||
?assertEqual(ok, receive_msg(3, test)),
|
?assertEqual(ok, receive_msg(3, Msg)),
|
||||||
?assertEqual({ok, 2, ok}, multicall(M, F, A)),
|
?assertEqual({ok, 2, ok}, multicall(M, F, A)),
|
||||||
{atomic, Status} = emqx_cluster_rpc:status(),
|
{atomic, Status} = emqx_cluster_rpc:status(),
|
||||||
case length(Status) =:= 3 of
|
case length(Status) =:= 3 of
|
||||||
|
@ -118,9 +119,10 @@ t_commit_ok_but_apply_fail_on_other_node(_Config) ->
|
||||||
emqx_cluster_rpc:reset(),
|
emqx_cluster_rpc:reset(),
|
||||||
{atomic, []} = emqx_cluster_rpc:status(),
|
{atomic, []} = emqx_cluster_rpc:status(),
|
||||||
Pid = self(),
|
Pid = self(),
|
||||||
{BaseM, BaseF, BaseA} = {?MODULE, echo, [Pid, test]},
|
Msg = ?FUNCTION_NAME,
|
||||||
|
{BaseM, BaseF, BaseA} = {?MODULE, echo, [Pid, Msg]},
|
||||||
{ok, _TnxId, ok} = multicall(BaseM, BaseF, BaseA),
|
{ok, _TnxId, ok} = multicall(BaseM, BaseF, BaseA),
|
||||||
?assertEqual(ok, receive_msg(3, test)),
|
?assertEqual(ok, receive_msg(3, Msg)),
|
||||||
|
|
||||||
{M, F, A} = {?MODULE, failed_on_node, [erlang:whereis(?NODE1)]},
|
{M, F, A} = {?MODULE, failed_on_node, [erlang:whereis(?NODE1)]},
|
||||||
{ok, _, ok} = multicall(M, F, A, 1, 1000),
|
{ok, _, ok} = multicall(M, F, A, 1, 1000),
|
||||||
|
@ -154,9 +156,10 @@ t_commit_ok_but_apply_fail_on_other_node(_Config) ->
|
||||||
t_commit_concurrency(_Config) ->
|
t_commit_concurrency(_Config) ->
|
||||||
{atomic, []} = emqx_cluster_rpc:status(),
|
{atomic, []} = emqx_cluster_rpc:status(),
|
||||||
Pid = self(),
|
Pid = self(),
|
||||||
{BaseM, BaseF, BaseA} = {?MODULE, echo, [Pid, test]},
|
Msg = ?FUNCTION_NAME,
|
||||||
{ok, _TnxId, ok} = multicall(BaseM, BaseF, BaseA),
|
{BaseM, BaseF, BaseA} = {?MODULE, echo, [Pid, Msg]},
|
||||||
?assertEqual(ok, receive_msg(3, test)),
|
?assertEqual({ok, 1, ok}, multicall(BaseM, BaseF, BaseA)),
|
||||||
|
?assertEqual(ok, receive_msg(3, Msg)),
|
||||||
|
|
||||||
%% call concurrently without stale tnx_id error
|
%% call concurrently without stale tnx_id error
|
||||||
Workers = lists:seq(1, 256),
|
Workers = lists:seq(1, 256),
|
||||||
|
@ -231,23 +234,24 @@ t_commit_ok_apply_fail_on_other_node_then_recover(_Config) ->
|
||||||
{atomic, [_Status | L]} = emqx_cluster_rpc:status(),
|
{atomic, [_Status | L]} = emqx_cluster_rpc:status(),
|
||||||
?assertEqual([], L),
|
?assertEqual([], L),
|
||||||
ets:insert(test, {other_mfa_result, ok}),
|
ets:insert(test, {other_mfa_result, ok}),
|
||||||
{ok, 2, ok} = multicall(io, format, ["test"], 1, 1000),
|
{ok, 2, ok} = multicall(io, format, ["format:~p~n", [?FUNCTION_NAME]], 1, 1000),
|
||||||
ct:sleep(1000),
|
ct:sleep(1000),
|
||||||
{atomic, NewStatus} = emqx_cluster_rpc:status(),
|
{atomic, NewStatus} = emqx_cluster_rpc:status(),
|
||||||
?assertEqual(3, length(NewStatus)),
|
?assertEqual(3, length(NewStatus)),
|
||||||
Pid = self(),
|
Pid = self(),
|
||||||
MFAEcho = {M1, F1, A1} = {?MODULE, echo, [Pid, test]},
|
Msg = ?FUNCTION_NAME,
|
||||||
|
MFAEcho = {M1, F1, A1} = {?MODULE, echo, [Pid, Msg]},
|
||||||
{ok, TnxId, ok} = multicall(M1, F1, A1),
|
{ok, TnxId, ok} = multicall(M1, F1, A1),
|
||||||
{atomic, Query} = emqx_cluster_rpc:query(TnxId),
|
{atomic, Query} = emqx_cluster_rpc:query(TnxId),
|
||||||
?assertEqual(MFAEcho, maps:get(mfa, Query)),
|
?assertEqual(MFAEcho, maps:get(mfa, Query)),
|
||||||
?assertEqual(node(), maps:get(initiator, Query)),
|
?assertEqual(node(), maps:get(initiator, Query)),
|
||||||
?assert(maps:is_key(created_at, Query)),
|
?assert(maps:is_key(created_at, Query)),
|
||||||
?assertEqual(ok, receive_msg(3, test)),
|
?assertEqual(ok, receive_msg(3, Msg)),
|
||||||
ok.
|
ok.
|
||||||
|
|
||||||
t_del_stale_mfa(_Config) ->
|
t_del_stale_mfa(_Config) ->
|
||||||
{atomic, []} = emqx_cluster_rpc:status(),
|
{atomic, []} = emqx_cluster_rpc:status(),
|
||||||
MFA = {M, F, A} = {io, format, ["test"]},
|
MFA = {M, F, A} = {io, format, ["format:~p~n", [?FUNCTION_NAME]]},
|
||||||
Keys = lists:seq(1, 50),
|
Keys = lists:seq(1, 50),
|
||||||
Keys2 = lists:seq(51, 150),
|
Keys2 = lists:seq(51, 150),
|
||||||
Ids =
|
Ids =
|
||||||
|
@ -288,7 +292,7 @@ t_del_stale_mfa(_Config) ->
|
||||||
|
|
||||||
t_skip_failed_commit(_Config) ->
|
t_skip_failed_commit(_Config) ->
|
||||||
{atomic, []} = emqx_cluster_rpc:status(),
|
{atomic, []} = emqx_cluster_rpc:status(),
|
||||||
{ok, 1, ok} = multicall(io, format, ["test~n"], all, 1000),
|
{ok, 1, ok} = multicall(io, format, ["format:~p~n", [?FUNCTION_NAME]], all, 1000),
|
||||||
ct:sleep(180),
|
ct:sleep(180),
|
||||||
{atomic, List1} = emqx_cluster_rpc:status(),
|
{atomic, List1} = emqx_cluster_rpc:status(),
|
||||||
Node = node(),
|
Node = node(),
|
||||||
|
@ -308,7 +312,7 @@ t_skip_failed_commit(_Config) ->
|
||||||
|
|
||||||
t_fast_forward_commit(_Config) ->
|
t_fast_forward_commit(_Config) ->
|
||||||
{atomic, []} = emqx_cluster_rpc:status(),
|
{atomic, []} = emqx_cluster_rpc:status(),
|
||||||
{ok, 1, ok} = multicall(io, format, ["test~n"], all, 1000),
|
{ok, 1, ok} = multicall(io, format, ["format:~p~n", [?FUNCTION_NAME]], all, 1000),
|
||||||
ct:sleep(180),
|
ct:sleep(180),
|
||||||
{atomic, List1} = emqx_cluster_rpc:status(),
|
{atomic, List1} = emqx_cluster_rpc:status(),
|
||||||
Node = node(),
|
Node = node(),
|
||||||
|
@ -356,7 +360,11 @@ tnx_ids(Status) ->
|
||||||
start() ->
|
start() ->
|
||||||
{ok, _Pid2} = emqx_cluster_rpc:start_link({node(), ?NODE2}, ?NODE2, 500),
|
{ok, _Pid2} = emqx_cluster_rpc:start_link({node(), ?NODE2}, ?NODE2, 500),
|
||||||
{ok, _Pid3} = emqx_cluster_rpc:start_link({node(), ?NODE3}, ?NODE3, 500),
|
{ok, _Pid3} = emqx_cluster_rpc:start_link({node(), ?NODE3}, ?NODE3, 500),
|
||||||
|
ok = emqx_cluster_rpc:wait_for_cluster_rpc(),
|
||||||
ok = emqx_cluster_rpc:reset(),
|
ok = emqx_cluster_rpc:reset(),
|
||||||
|
%% Ensure all processes are idle status.
|
||||||
|
ok = gen_server:call(?NODE2, test),
|
||||||
|
ok = gen_server:call(?NODE3, test),
|
||||||
ok.
|
ok.
|
||||||
|
|
||||||
stop() ->
|
stop() ->
|
||||||
|
@ -366,6 +374,7 @@ stop() ->
|
||||||
undefined ->
|
undefined ->
|
||||||
ok;
|
ok;
|
||||||
P ->
|
P ->
|
||||||
|
erlang:unregister(N),
|
||||||
erlang:unlink(P),
|
erlang:unlink(P),
|
||||||
erlang:exit(P, kill)
|
erlang:exit(P, kill)
|
||||||
end
|
end
|
||||||
|
@ -379,8 +388,9 @@ receive_msg(Count, Msg) when Count > 0 ->
|
||||||
receive
|
receive
|
||||||
Msg ->
|
Msg ->
|
||||||
receive_msg(Count - 1, Msg)
|
receive_msg(Count - 1, Msg)
|
||||||
after 1000 ->
|
after 1300 ->
|
||||||
timeout
|
Msg = iolist_to_binary(io_lib:format("There's still ~w messages to be received", [Count])),
|
||||||
|
{Msg, flush_msg([])}
|
||||||
end.
|
end.
|
||||||
|
|
||||||
echo(Pid, Msg) ->
|
echo(Pid, Msg) ->
|
||||||
|
@ -425,3 +435,11 @@ multicall(M, F, A, N, T) ->
|
||||||
|
|
||||||
multicall(M, F, A) ->
|
multicall(M, F, A) ->
|
||||||
multicall(M, F, A, all, timer:minutes(2)).
|
multicall(M, F, A, all, timer:minutes(2)).
|
||||||
|
|
||||||
|
flush_msg(Acc) ->
|
||||||
|
receive
|
||||||
|
Msg ->
|
||||||
|
flush_msg([Msg | Acc])
|
||||||
|
after 10 ->
|
||||||
|
Acc
|
||||||
|
end.
|
||||||
|
|
Loading…
Reference in New Issue