Skip to content

Commit 8318d55

Browse files
Merge pull request #12309 from rabbitmq/mergify/bp/v4.0.x/pr-12303
forget_cluster_node: delete all local classic queues when using Khepri store (backport #12303)
2 parents 31f7c2e + 772d307 commit 8318d55

File tree

3 files changed

+29
-1
lines changed

3 files changed

+29
-1
lines changed

deps/rabbit/src/rabbit_amqqueue.erl

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1815,6 +1815,7 @@ internal_delete(Queue, ActingUser, Reason) ->
18151815
%% TODO this is used by `rabbit_mnesia:remove_node_if_mnesia_running`
18161816
%% Does it make any sense once mnesia is not used/removed?
18171817
forget_all_durable(Node) ->
1818+
rabbit_log:info("Will remove all classic queues from node ~ts. The node is likely being removed from the cluster.", [Node]),
18181819
UpdateFun = fun(Q) ->
18191820
forget_node_for_queue(Q)
18201821
end,

deps/rabbit/src/rabbit_khepri.erl

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -538,6 +538,7 @@ remove_reachable_member(NodeToRemove) ->
538538
NodeToRemove, khepri_cluster, reset, [?RA_CLUSTER_NAME]),
539539
case Ret of
540540
ok ->
541+
rabbit_amqqueue:forget_all_durable(NodeToRemove),
541542
?LOG_DEBUG(
542543
"Node ~s removed from Khepri cluster \"~s\"",
543544
[NodeToRemove, ?RA_CLUSTER_NAME],
@@ -559,6 +560,7 @@ remove_down_member(NodeToRemove) ->
559560
Ret = ra:remove_member(ServerRef, ServerId, Timeout),
560561
case Ret of
561562
{ok, _, _} ->
563+
rabbit_amqqueue:forget_all_durable(NodeToRemove),
562564
?LOG_DEBUG(
563565
"Node ~s removed from Khepri cluster \"~s\"",
564566
[NodeToRemove, ?RA_CLUSTER_NAME],

deps/rabbit/test/cli_forget_cluster_node_SUITE.erl

Lines changed: 26 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,8 @@ groups() ->
3737
forget_cluster_node_with_all_last_streams,
3838
forget_cluster_node_with_quorum_queues_and_streams,
3939
forget_cluster_node_with_one_last_quorum_member_and_streams,
40-
forget_cluster_node_with_one_last_stream_and_quorum_queues
40+
forget_cluster_node_with_one_last_stream_and_quorum_queues,
41+
forget_cluster_node_with_one_classic_queue
4142
]}
4243
].
4344

@@ -354,6 +355,30 @@ forget_cluster_node_with_one_last_stream_and_quorum_queues(Config) ->
354355
?awaitMatch(Members when length(Members) == 2, get_quorum_members(Rabbit, QQ1), 30000),
355356
?awaitMatch(Members when length(Members) == 2, get_quorum_members(Rabbit, QQ2), 30000).
356357

358+
forget_cluster_node_with_one_classic_queue(Config) ->
359+
[Rabbit, Hare, Bunny] = rabbit_ct_broker_helpers:get_node_configs(Config, nodename),
360+
361+
assert_clustered([Rabbit, Hare, Bunny]),
362+
363+
Ch = rabbit_ct_client_helpers:open_channel(Config, Bunny),
364+
CQ1 = <<"classic-queue-1">>,
365+
declare(Ch, CQ1, [{<<"x-queue-type">>, longstr, <<"classic">>}]),
366+
367+
?awaitMatch([_], rabbit_ct_broker_helpers:rabbitmqctl_list(
368+
Config, Rabbit,
369+
["list_queues", "name", "--no-table-headers"]),
370+
30000),
371+
372+
?assertEqual(ok, rabbit_control_helper:command(stop_app, Bunny)),
373+
?assertEqual(ok, forget_cluster_node(Rabbit, Bunny)),
374+
375+
assert_cluster_status({[Rabbit, Hare], [Rabbit, Hare], [Rabbit, Hare]},
376+
[Rabbit, Hare]),
377+
?awaitMatch([], rabbit_ct_broker_helpers:rabbitmqctl_list(
378+
Config, Rabbit,
379+
["list_queues", "name", "--no-table-headers"]),
380+
30000).
381+
357382
forget_cluster_node(Node, Removee) ->
358383
rabbit_control_helper:command(forget_cluster_node, Node, [atom_to_list(Removee)],
359384
[]).

0 commit comments

Comments
 (0)