Merge pull request #14122 from rabbitmq/mergify/bp/v4.1.x/pr-14115
Test (make) / Build and Xref (1.17, 26) (push) Waiting to run
Details
Test (make) / Build and Xref (1.17, 27) (push) Waiting to run
Details
Test (make) / Test (1.17, 27, khepri) (push) Waiting to run
Details
Test (make) / Test (1.17, 27, mnesia) (push) Waiting to run
Details
Test (make) / Test mixed clusters (1.17, 27, khepri) (push) Waiting to run
Details
Test (make) / Test mixed clusters (1.17, 27, mnesia) (push) Waiting to run
Details
Test (make) / Type check (1.17, 27) (push) Waiting to run
Details
Test (make) / Build and Xref (1.17, 26) (push) Waiting to run
Details
Test (make) / Build and Xref (1.17, 27) (push) Waiting to run
Details
Test (make) / Test (1.17, 27, khepri) (push) Waiting to run
Details
Test (make) / Test (1.17, 27, mnesia) (push) Waiting to run
Details
Test (make) / Test mixed clusters (1.17, 27, khepri) (push) Waiting to run
Details
Test (make) / Test mixed clusters (1.17, 27, mnesia) (push) Waiting to run
Details
Test (make) / Type check (1.17, 27) (push) Waiting to run
Details
Add log in test (backport #14115)
This commit is contained in:
commit
5ca894138d
|
|
@ -12,7 +12,7 @@
|
|||
%%
|
||||
%% The Initial Developer of the Original Code is Pivotal Software, Inc.
|
||||
%% Copyright (c) 2025 Broadcom. All Rights Reserved.
|
||||
%% The term “Broadcom” refers to Broadcom Inc. and/or its subsidiaries. All rights reserved.
|
||||
%% The term "Broadcom" refers to Broadcom Inc. and/or its subsidiaries. All rights reserved.
|
||||
%%
|
||||
|
||||
-module(rabbit_stream_partitions_SUITE).
|
||||
|
|
@ -107,6 +107,8 @@ simple_sac_consumer_should_get_disconnected_on_network_partition(Config) ->
|
|||
%% another node will be isolated
|
||||
?assertEqual(L#node.name, coordinator_leader(Config)),
|
||||
|
||||
log("Stream leader and coordinator leader are on ~p", [L#node.name]),
|
||||
|
||||
{ok, So0, C0_00} = stream_test_utils:connect(Config, 0),
|
||||
{ok, So1, C1_00} = stream_test_utils:connect(Config, 1),
|
||||
{ok, So2, C2_00} = stream_test_utils:connect(Config, 2),
|
||||
|
|
@ -135,18 +137,24 @@ simple_sac_consumer_should_get_disconnected_on_network_partition(Config) ->
|
|||
end, Consumers1),
|
||||
#consumer{subscription_id = DiscSubId} = DisconnectedConsumer,
|
||||
|
||||
log("Isolating node ~p", [Isolated]),
|
||||
|
||||
rabbit_ct_broker_helpers:block_traffic_between(Isolated, LN),
|
||||
rabbit_ct_broker_helpers:block_traffic_between(Isolated, F2N),
|
||||
|
||||
wait_for_disconnected_consumer(Config, LN, S),
|
||||
wait_for_presumed_down_consumer(Config, LN, S),
|
||||
|
||||
log("Node ~p rejoins cluster", [Isolated]),
|
||||
|
||||
rabbit_ct_broker_helpers:allow_traffic_between(Isolated, LN),
|
||||
rabbit_ct_broker_helpers:allow_traffic_between(Isolated, F2N),
|
||||
|
||||
wait_for_all_consumers_connected(Config, LN, S),
|
||||
|
||||
Consumers2 = query_consumers(Config, LN, S),
|
||||
log("Consumers after partition resolution: ~p", [Consumers2]),
|
||||
log("Disconnected consumer: ~p", [DisconnectedConsumer]),
|
||||
%% the disconnected, then presumed down consumer is cancelled,
|
||||
%% because the stream member on its node has been restarted
|
||||
assertSize(2, Consumers2),
|
||||
|
|
@ -157,21 +165,28 @@ simple_sac_consumer_should_get_disconnected_on_network_partition(Config) ->
|
|||
%% assert the cancelled consumer received a metadata update frame
|
||||
SubIdToState1 =
|
||||
maps:fold(fun(K, {S0, C0}, Acc) when K == DiscSubId ->
|
||||
log("Expecting metadata update for disconnected consumer"),
|
||||
C1 = receive_metadata_update(S0, C0),
|
||||
log("Received metadata update"),
|
||||
Acc#{K => {S0, C1}};
|
||||
(K, {S0, C0}, Acc) ->
|
||||
Acc#{K => {S0, C0}}
|
||||
end, #{}, SubIdToState0),
|
||||
|
||||
log("Deleting stream"),
|
||||
delete_stream(stream_port(Config, 0), S),
|
||||
|
||||
%% online consumers should receive a metadata update frame (stream deleted)
|
||||
%% we unqueue the this frame before closing the connection
|
||||
%% directly closing the connection of the cancelled consumer
|
||||
maps:foreach(fun(K, {S0, C0}) when K /= DiscSubId ->
|
||||
{_, C1} = receive_commands(S0, C0),
|
||||
log("Expecting frame in consumer ~p", [K]),
|
||||
{Cmd1, C1} = receive_commands(S0, C0),
|
||||
log("Received ~p", [Cmd1]),
|
||||
log("Closing"),
|
||||
{ok, _} = stream_test_utils:close(S0, C1);
|
||||
(_, {S0, C0}) ->
|
||||
(K, {S0, C0}) ->
|
||||
log("Closing ~p", [K]),
|
||||
{ok, _} = stream_test_utils:close(S0, C0)
|
||||
end, SubIdToState1),
|
||||
|
||||
|
|
@ -190,6 +205,8 @@ simple_sac_consumer_should_get_disconnected_on_coord_leader_network_partition(Co
|
|||
%% the coordinator leader node will be isolated
|
||||
?assertNotEqual(L#node.name, CL),
|
||||
|
||||
log("Stream leader and coordinator leader are on ~p", [L#node.name]),
|
||||
|
||||
{ok, So0, C0_00} = stream_test_utils:connect(Config, CL),
|
||||
{ok, So1, C1_00} = stream_test_utils:connect(Config, CF1),
|
||||
{ok, So2, C2_00} = stream_test_utils:connect(Config, CF2),
|
||||
|
|
@ -216,12 +233,16 @@ simple_sac_consumer_should_get_disconnected_on_coord_leader_network_partition(Co
|
|||
end, Consumers1),
|
||||
#consumer{subscription_id = DiscSubId} = DisconnectedConsumer,
|
||||
|
||||
log("Isolating node ~p", [Isolated]),
|
||||
|
||||
rabbit_ct_broker_helpers:block_traffic_between(Isolated, CF1),
|
||||
rabbit_ct_broker_helpers:block_traffic_between(Isolated, CF2),
|
||||
|
||||
wait_for_disconnected_consumer(Config, NotIsolated, S),
|
||||
wait_for_presumed_down_consumer(Config, NotIsolated, S),
|
||||
|
||||
log("Node ~p rejoins cluster", [Isolated]),
|
||||
|
||||
rabbit_ct_broker_helpers:allow_traffic_between(Isolated, CF1),
|
||||
rabbit_ct_broker_helpers:allow_traffic_between(Isolated, CF2),
|
||||
|
||||
|
|
@ -231,6 +252,8 @@ simple_sac_consumer_should_get_disconnected_on_coord_leader_network_partition(Co
|
|||
|
||||
Consumers2 = query_consumers(Config, NotIsolated, S),
|
||||
|
||||
log("Consumers after partition resolution ~p", [Consumers2]),
|
||||
log("Disconnected consumer: ~p", [DisconnectedConsumer]),
|
||||
%% the disconnected, then presumed down consumer is cancelled,
|
||||
%% because the stream member on its node has been restarted
|
||||
assertSize(2, Consumers2),
|
||||
|
|
@ -246,26 +269,35 @@ simple_sac_consumer_should_get_disconnected_on_coord_leader_network_partition(Co
|
|||
|
||||
SubIdToState1 =
|
||||
maps:fold(fun(K, {S0, C0}, Acc) when K == DiscSubId ->
|
||||
log("Expecting metadata update for disconnected consumer"),
|
||||
%% cancelled consumer received a metadata update
|
||||
C1 = receive_metadata_update(S0, C0),
|
||||
log("Received metadata update"),
|
||||
Acc#{K => {S0, C1}};
|
||||
(K, {S0, C0}, Acc) when K == ActiveSubId ->
|
||||
log("Expecting consumer update for promoted consumer"),
|
||||
%% promoted consumer should have received consumer update
|
||||
C1 = receive_consumer_update_and_respond(S0, C0),
|
||||
log("Received consumer update"),
|
||||
Acc#{K => {S0, C1}};
|
||||
(K, {S0, C0}, Acc) ->
|
||||
Acc#{K => {S0, C0}}
|
||||
end, #{}, SubIdToState0),
|
||||
|
||||
log("Deleting stream"),
|
||||
delete_stream(L#node.stream_port, S),
|
||||
|
||||
%% online consumers should receive a metadata update frame (stream deleted)
|
||||
%% we unqueue this frame before closing the connection
|
||||
%% directly closing the connection of the cancelled consumer
|
||||
maps:foreach(fun(K, {S0, C0}) when K /= DiscSubId ->
|
||||
{_, C1} = receive_commands(S0, C0),
|
||||
log("Expecting frame in consumer ~p", [K]),
|
||||
{Cmd1, C1} = receive_commands(S0, C0),
|
||||
log("Received ~p", [Cmd1]),
|
||||
log("Closing"),
|
||||
{ok, _} = stream_test_utils:close(S0, C1);
|
||||
(_, {S0, C0}) ->
|
||||
(K, {S0, C0}) ->
|
||||
log("Closing ~p", [K]),
|
||||
{ok, _} = stream_test_utils:close(S0, C0)
|
||||
end, SubIdToState1),
|
||||
|
||||
|
|
@ -286,6 +318,8 @@ super_stream_sac_consumer_should_get_disconnected_on_network_partition(Config) -
|
|||
%% another node will be isolated
|
||||
?assertEqual(L#node.name, CL),
|
||||
|
||||
log("Stream leader and coordinator leader are on ~p", [L#node.name]),
|
||||
|
||||
{ok, So0, C0_00} = stream_test_utils:connect(L#node.stream_port),
|
||||
{ok, So1, C1_00} = stream_test_utils:connect(F1#node.stream_port),
|
||||
{ok, So2, C2_00} = stream_test_utils:connect(F2#node.stream_port),
|
||||
|
|
@ -315,12 +349,16 @@ super_stream_sac_consumer_should_get_disconnected_on_network_partition(Config) -
|
|||
end, Consumers1),
|
||||
#consumer{subscription_id = DiscSubId} = DisconnectedConsumer,
|
||||
|
||||
log("Isolating node ~p", [Isolated]),
|
||||
|
||||
rabbit_ct_broker_helpers:block_traffic_between(Isolated, LN),
|
||||
rabbit_ct_broker_helpers:block_traffic_between(Isolated, F2N),
|
||||
|
||||
wait_for_disconnected_consumer(Config, NotIsolated, Partition),
|
||||
wait_for_presumed_down_consumer(Config, NotIsolated, Partition),
|
||||
|
||||
log("Node ~p rejoins cluster", [Isolated]),
|
||||
|
||||
rabbit_ct_broker_helpers:allow_traffic_between(Isolated, LN),
|
||||
rabbit_ct_broker_helpers:allow_traffic_between(Isolated, F2N),
|
||||
|
||||
|
|
@ -329,6 +367,8 @@ super_stream_sac_consumer_should_get_disconnected_on_network_partition(Config) -
|
|||
wait_for_all_consumers_connected(Config, NotIsolated, Partition),
|
||||
|
||||
Consumers2 = query_consumers(Config, NotIsolated, Partition),
|
||||
log("Consumers after partition resolution: ~p", [Consumers2]),
|
||||
log("Disconnected consumer: ~p", [DisconnectedConsumer]),
|
||||
|
||||
%% the disconnected, then presumed down consumer is cancelled,
|
||||
%% because the stream member on its node has been restarted
|
||||
|
|
@ -340,22 +380,29 @@ super_stream_sac_consumer_should_get_disconnected_on_network_partition(Config) -
|
|||
|
||||
SubIdToState1 =
|
||||
maps:fold(fun(K, {S0, C0}, Acc) when K == DiscSubId ->
|
||||
log("Expecting metadata update for disconnected consumer"),
|
||||
%% cancelled consumer received a metadata update
|
||||
C1 = receive_metadata_update(S0, C0),
|
||||
log("Received metadata update"),
|
||||
Acc#{K => {S0, C1}};
|
||||
(K, {S0, C0}, Acc) ->
|
||||
Acc#{K => {S0, C0}}
|
||||
end, #{}, SubIdToState0),
|
||||
|
||||
log("Deleting super stream"),
|
||||
delete_super_stream(L#node.stream_port, Ss),
|
||||
|
||||
%% online consumers should receive a metadata update frame (stream deleted)
|
||||
%% we unqueue this frame before closing the connection
|
||||
%% directly closing the connection of the cancelled consumer
|
||||
maps:foreach(fun(K, {S0, C0}) when K /= DiscSubId ->
|
||||
{_, C1} = receive_commands(S0, C0),
|
||||
log("Expecting frame in consumer ~p", [K]),
|
||||
{Cmd1, C1} = receive_commands(S0, C0),
|
||||
log("Received ~p", [Cmd1]),
|
||||
log("Closing"),
|
||||
{ok, _} = stream_test_utils:close(S0, C1);
|
||||
(_, {S0, C0}) ->
|
||||
(K, {S0, C0}) ->
|
||||
log("Closing ~p", [K]),
|
||||
{ok, _} = stream_test_utils:close(S0, C0)
|
||||
end, SubIdToState1),
|
||||
ok.
|
||||
|
|
@ -374,6 +421,8 @@ super_stream_sac_consumer_should_get_disconnected_on_coord_leader_network_partit
|
|||
%% the coordinator leader node will be isolated
|
||||
?assertNotEqual(L#node.name, CL),
|
||||
|
||||
log("Stream leader and coordinator leader are on ~p", [L#node.name]),
|
||||
|
||||
{ok, So0, C0_00} = stream_test_utils:connect(L#node.stream_port),
|
||||
{ok, So1, C1_00} = stream_test_utils:connect(F1#node.stream_port),
|
||||
{ok, So2, C2_00} = stream_test_utils:connect(F2#node.stream_port),
|
||||
|
|
@ -410,12 +459,16 @@ super_stream_sac_consumer_should_get_disconnected_on_coord_leader_network_partit
|
|||
end, Consumers1),
|
||||
#consumer{subscription_id = DiscSubId} = DisconnectedConsumer,
|
||||
|
||||
log("Isolating node ~p", [Isolated]),
|
||||
|
||||
rabbit_ct_broker_helpers:block_traffic_between(Isolated, LN),
|
||||
rabbit_ct_broker_helpers:block_traffic_between(Isolated, F2N),
|
||||
|
||||
wait_for_disconnected_consumer(Config, NotIsolated, Partition),
|
||||
wait_for_presumed_down_consumer(Config, NotIsolated, Partition),
|
||||
|
||||
log("Node ~p rejoins cluster", [Isolated]),
|
||||
|
||||
rabbit_ct_broker_helpers:allow_traffic_between(Isolated, LN),
|
||||
rabbit_ct_broker_helpers:allow_traffic_between(Isolated, F2N),
|
||||
|
||||
|
|
@ -424,6 +477,8 @@ super_stream_sac_consumer_should_get_disconnected_on_coord_leader_network_partit
|
|||
wait_for_all_consumers_connected(Config, NotIsolated, Partition),
|
||||
|
||||
Consumers2 = query_consumers(Config, NotIsolated, Partition),
|
||||
log("Consumers after partition resolution: ~p", [Consumers2]),
|
||||
log("Disconnected consumer: ~p", [DisconnectedConsumer]),
|
||||
|
||||
%% the disconnected, then presumed down consumer is cancelled,
|
||||
%% because the stream member on its node has been restarted
|
||||
|
|
@ -440,27 +495,35 @@ super_stream_sac_consumer_should_get_disconnected_on_coord_leader_network_partit
|
|||
|
||||
SubIdToState1 =
|
||||
maps:fold(fun(K, {S0, C0}, Acc) when K == DiscSubId ->
|
||||
log("Expecting metadata update for disconnected consumer"),
|
||||
%% cancelled consumer received a metadata update
|
||||
C1 = receive_metadata_update(S0, C0),
|
||||
log("Received metadata update"),
|
||||
Acc#{K => {S0, C1}};
|
||||
(K, {S0, C0}, Acc) when K == ActiveSubId ->
|
||||
log("Expecting consumer update for promoted consumer"),
|
||||
%% promoted consumer should have received consumer update
|
||||
C1 = receive_consumer_update_and_respond(S0, C0),
|
||||
log("Received consumer update"),
|
||||
Acc#{K => {S0, C1}};
|
||||
(K, {S0, C0}, Acc) ->
|
||||
Acc#{K => {S0, C0}}
|
||||
end, #{}, SubIdToState0),
|
||||
|
||||
log("Deleting super stream"),
|
||||
delete_super_stream(L#node.stream_port, Ss),
|
||||
|
||||
%% online consumers should receive a metadata update frame (stream deleted)
|
||||
%% we unqueue this frame before closing the connection
|
||||
%% directly closing the connection of the cancelled consumer
|
||||
maps:foreach(fun(K, {S0, C0}) when K /= DiscSubId ->
|
||||
log("Expecting frame in consumer ~p", [K]),
|
||||
{Cmd1, C1} = receive_commands(S0, C0),
|
||||
ct:pal("Received command: ~p", [Cmd1]),
|
||||
log("Received ~p", [Cmd1]),
|
||||
log("Closing"),
|
||||
{ok, _} = stream_test_utils:close(S0, C1);
|
||||
(_, {S0, C0}) ->
|
||||
(K, {S0, C0}) ->
|
||||
log("Closing ~p", [K]),
|
||||
{ok, _} = stream_test_utils:close(S0, C0)
|
||||
end, SubIdToState1),
|
||||
ok.
|
||||
|
|
@ -727,6 +790,7 @@ wait_for_disconnected_consumer(Config, Node, Stream) ->
|
|||
rabbit_ct_helpers:await_condition(
|
||||
fun() ->
|
||||
Cs = query_consumers(Config, Node, Stream),
|
||||
log("Expecting a disconnected consumer: ~p", [Cs]),
|
||||
lists:any(fun(#consumer{status = {disconnected, _}}) ->
|
||||
true;
|
||||
(_) ->
|
||||
|
|
@ -738,6 +802,7 @@ wait_for_presumed_down_consumer(Config, Node, Stream) ->
|
|||
rabbit_ct_helpers:await_condition(
|
||||
fun() ->
|
||||
Cs = query_consumers(Config, Node, Stream),
|
||||
log("Expecting a presumed-down consumer: ~p", [Cs]),
|
||||
lists:any(fun(#consumer{status = {presumed_down, _}}) ->
|
||||
true;
|
||||
(_) ->
|
||||
|
|
@ -749,6 +814,7 @@ wait_for_all_consumers_connected(Config, Node, Stream) ->
|
|||
rabbit_ct_helpers:await_condition(
|
||||
fun() ->
|
||||
Cs = query_consumers(Config, Node, Stream),
|
||||
log("Expecting connected consumers: ~p", [Cs]),
|
||||
lists:all(fun(#consumer{status = {connected, _}}) ->
|
||||
true;
|
||||
(_) ->
|
||||
|
|
@ -761,6 +827,7 @@ wait_for_coordinator_ready(Config) ->
|
|||
rabbit_ct_helpers:await_condition(
|
||||
fun() ->
|
||||
Status = coordinator_status(Config),
|
||||
log("Coordinator status: ~p", [Status]),
|
||||
lists:all(fun(St) ->
|
||||
RS = proplists:get_value(<<"Raft State">>, St,
|
||||
undefined),
|
||||
|
|
@ -785,3 +852,9 @@ assertSize(Expected, List) when is_list(List) ->
|
|||
|
||||
assertEmpty(Data) ->
|
||||
assertSize(0, Data).
|
||||
|
||||
log(Format) ->
|
||||
ct:pal(Format).
|
||||
|
||||
log(Format, Args) ->
|
||||
ct:pal(Format, Args).
|
||||
|
|
|
|||
Loading…
Reference in New Issue