From 0e10b1de2df3a133aa35757ec551f4f45452589c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jean-S=C3=A9bastien=20P=C3=A9dron?= Date: Fri, 27 Jun 2025 20:06:47 +0200 Subject: [PATCH] cluster_minority_SUITE: Fix race in `remove_node_when_seed_node_is_leader` [Why] When node A becomes the leader, it still takes a few exchanges with followers to allow cluster changes again. Concurrently, the testcase blocks traffic between A and other nodes to simulate a network partition. If this happens after A becomes the leader but before cluster changes are permitted again, the testcase will never succeed and will eventually abort with: Case: cluster_minority_SUITE:remove_node_when_seed_node_is_leader Reason: {error, {{awaitMatch, [{module,cluster_minority_SUITE}, {expression, "..."}, {pattern,"ok"}, {value, {error,69,<<"Error:\ncluster_change_not_permitted">>}}]}, [How] Before blocking traffic, we wait for cluster changes to be permitted again on node A. (cherry picked from commit 716635742e207a917b768d7c83082d7222ede065) # Conflicts: # deps/rabbit/test/cluster_minority_SUITE.erl --- deps/rabbit/test/cluster_minority_SUITE.erl | 28 +++++++++++++++++++++ 1 file changed, 28 insertions(+) diff --git a/deps/rabbit/test/cluster_minority_SUITE.erl b/deps/rabbit/test/cluster_minority_SUITE.erl index 83a2582a5395..164e9b90ace7 100644 --- a/deps/rabbit/test/cluster_minority_SUITE.erl +++ b/deps/rabbit/test/cluster_minority_SUITE.erl @@ -311,7 +311,35 @@ remove_node(Config) -> rabbit_control_helper:command(start_app, C), %% Minority partition: A +<<<<<<< HEAD partition_3_node_cluster(Config), +======= + partition_3_node_cluster(Config1), + + Pong = ra:ping(AMember, 10000), + ct:pal("Member A state: ~0p", [Pong]), + case Pong of + {pong, leader} -> + ?awaitMatch( + {ok, #{cluster_change_permitted := true}, _}, + rabbit_ct_broker_helpers:rpc(Config, A, ra, member_overview, [AMember]), + 60000), + ?awaitMatch( + ok, + rabbit_control_helper:command( + forget_cluster_node, A, [atom_to_list(B)], []), + 60000); + Ret -> + ct:pal("A is not the expected leader: ~p", [Ret]), + {skip, "Node A was not a leader"} + end. + +remove_node_when_seed_node_is_follower(Config) -> + [A, B, C | _] = rabbit_ct_broker_helpers:get_node_configs( + Config, nodename), + + %% Three node cluster: A, B, C +>>>>>>> 716635742 (cluster_minority_SUITE: Fix race in `remove_node_when_seed_node_is_leader`) Cluster = [A, B, C], ok = rabbit_control_helper:command(forget_cluster_node, A, [atom_to_list(B)], []),