Skip to content

Commit 5594e75

Browse files
kjnilssonmergify-bot
authored andcommitted
Take all clustered nodes into account when declaring stream.
Deriving a max-cluster-size only from running nodes would create situations where in a three-node with only two nodes running cluster it would select an non-running node as follower. (cherry picked from commit 691de2b)
1 parent 6af5213 commit 5594e75

File tree

2 files changed

+18
-2
lines changed

2 files changed

+18
-2
lines changed

deps/rabbit/src/rabbit_stream_queue.erl

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -814,7 +814,7 @@ queue_leader_locator(undefined) -> <<"client-local">>;
814814
queue_leader_locator(Val) -> Val.
815815

816816
initial_cluster_size(undefined) ->
817-
length(rabbit_mnesia:cluster_nodes(running));
817+
length(rabbit_nodes:all());
818818
initial_cluster_size(Val) ->
819819
Val.
820820

deps/rabbit/test/rabbit_stream_queue_SUITE.erl

Lines changed: 17 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -50,7 +50,8 @@ groups() ->
5050
publish_coordinator_unavailable,
5151
leader_locator_policy]},
5252
{cluster_size_3_1, [], [shrink_coordinator_cluster]},
53-
{cluster_size_3_2, [], [recover]},
53+
{cluster_size_3_2, [], [recover,
54+
declare_with_node_down]},
5455
{cluster_size_3_parallel_1, [parallel], [delete_replica,
5556
delete_last_replica,
5657
delete_classic_replica,
@@ -665,6 +666,21 @@ restart_single_node(Config) ->
665666
quorum_queue_utils:wait_for_messages(Config, [[Q, <<"2">>, <<"2">>, <<"0">>]]),
666667
rabbit_ct_broker_helpers:rpc(Config, 0, ?MODULE, delete_testcase_queue, [Q]).
667668

669+
%% the failing case for this test relies on a particular random condition
670+
%% please never consider this a flake
671+
declare_with_node_down(Config) ->
672+
[Server1, Server2, Server3] = Servers = rabbit_ct_broker_helpers:get_node_configs(Config, nodename),
673+
Ch = rabbit_ct_client_helpers:open_channel(Config, Server1),
674+
rabbit_ct_broker_helpers:stop_node(Config, Server2),
675+
Q = ?config(queue_name, Config),
676+
?assertEqual({'queue.declare_ok', Q, 0, 0},
677+
declare(Ch, Q, [{<<"x-queue-type">>, longstr, <<"stream">>}])),
678+
679+
check_leader_and_replicas(Config, [Server1, Server3]),
680+
rabbit_ct_broker_helpers:start_node(Config, Server2),
681+
check_leader_and_replicas(Config, Servers),
682+
ok.
683+
668684
recover(Config) ->
669685
[Server | _] = Servers0 = rabbit_ct_broker_helpers:get_node_configs(Config, nodename),
670686

0 commit comments

Comments
 (0)