From 76cf21c347592ddf940cb460c5f14374c779b6e5 Mon Sep 17 00:00:00 2001 From: Ayanda Dube Date: Tue, 1 Oct 2024 14:32:37 +0100 Subject: [PATCH 1/3] add support for the leader info item in classic queues --- deps/rabbit/src/rabbit_amqqueue_process.erl | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/deps/rabbit/src/rabbit_amqqueue_process.erl b/deps/rabbit/src/rabbit_amqqueue_process.erl index f1daf31f0a94..5e3e966ddcdb 100644 --- a/deps/rabbit/src/rabbit_amqqueue_process.erl +++ b/deps/rabbit/src/rabbit_amqqueue_process.erl @@ -119,7 +119,8 @@ arguments, owner_pid, exclusive, - user_who_performed_action + user_who_performed_action, + leader ]). -define(INFO_KEYS, [pid | ?CREATION_EVENT_KEYS ++ ?STATISTICS_KEYS -- [name, type]]). @@ -1083,6 +1084,7 @@ i(auto_delete, #q{q = Q}) -> amqqueue:is_auto_delete(Q); i(arguments, #q{q = Q}) -> amqqueue:get_arguments(Q); i(pid, _) -> self(); +i(leader, State) -> node(i(pid, State)); i(owner_pid, #q{q = Q}) when ?amqqueue_exclusive_owner_is(Q, none) -> ''; i(owner_pid, #q{q = Q}) -> From c0c1d003d8d987bbfe7d784390620004b111a93f Mon Sep 17 00:00:00 2001 From: Ayanda Dube Date: Tue, 1 Oct 2024 14:39:36 +0100 Subject: [PATCH 2/3] test and assert new classic queue leader info item --- deps/rabbit/test/classic_queue_SUITE.erl | 1 + 1 file changed, 1 insertion(+) diff --git a/deps/rabbit/test/classic_queue_SUITE.erl b/deps/rabbit/test/classic_queue_SUITE.erl index 5b54d7150fb0..e1e828124ffb 100644 --- a/deps/rabbit/test/classic_queue_SUITE.erl +++ b/deps/rabbit/test/classic_queue_SUITE.erl @@ -83,6 +83,7 @@ leader_locator_client_local(Config) -> {<<"x-queue-leader-locator">>, longstr, <<"client-local">>}])), {ok, Leader0} = rabbit_ct_broker_helpers:rpc(Config, Server, rabbit_amqqueue, lookup, [rabbit_misc:r(<<"/">>, queue, Q)]), Leader = amqqueue:qnode(Leader0), + ?assertEqual([{leader, Leader}], rabbit_ct_broker_helpers:rpc(Config, Server, rabbit_amqqueue, info, [Leader0, [leader]])), ?assertEqual(Server, Leader), ?assertMatch(#'queue.delete_ok'{}, amqp_channel:call(Ch, #'queue.delete'{queue = Q})) From 9576a0eb7d45ad377b432ccd98ac2aa33c90b374 Mon Sep 17 00:00:00 2001 From: Ayanda Dube Date: Wed, 2 Oct 2024 13:34:48 +0100 Subject: [PATCH 3/3] support members info item in classic queues, which will always be the leader --- deps/rabbit/src/rabbit_amqqueue_process.erl | 4 +++- deps/rabbit/test/classic_queue_SUITE.erl | 3 ++- 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/deps/rabbit/src/rabbit_amqqueue_process.erl b/deps/rabbit/src/rabbit_amqqueue_process.erl index 5e3e966ddcdb..63f886bd3763 100644 --- a/deps/rabbit/src/rabbit_amqqueue_process.erl +++ b/deps/rabbit/src/rabbit_amqqueue_process.erl @@ -120,7 +120,8 @@ owner_pid, exclusive, user_who_performed_action, - leader + leader, + members ]). -define(INFO_KEYS, [pid | ?CREATION_EVENT_KEYS ++ ?STATISTICS_KEYS -- [name, type]]). @@ -1085,6 +1086,7 @@ i(arguments, #q{q = Q}) -> amqqueue:get_arguments(Q); i(pid, _) -> self(); i(leader, State) -> node(i(pid, State)); +i(members, State) -> [i(leader, State)]; i(owner_pid, #q{q = Q}) when ?amqqueue_exclusive_owner_is(Q, none) -> ''; i(owner_pid, #q{q = Q}) -> diff --git a/deps/rabbit/test/classic_queue_SUITE.erl b/deps/rabbit/test/classic_queue_SUITE.erl index e1e828124ffb..1336c6bdbcd4 100644 --- a/deps/rabbit/test/classic_queue_SUITE.erl +++ b/deps/rabbit/test/classic_queue_SUITE.erl @@ -83,7 +83,8 @@ leader_locator_client_local(Config) -> {<<"x-queue-leader-locator">>, longstr, <<"client-local">>}])), {ok, Leader0} = rabbit_ct_broker_helpers:rpc(Config, Server, rabbit_amqqueue, lookup, [rabbit_misc:r(<<"/">>, queue, Q)]), Leader = amqqueue:qnode(Leader0), - ?assertEqual([{leader, Leader}], rabbit_ct_broker_helpers:rpc(Config, Server, rabbit_amqqueue, info, [Leader0, [leader]])), + ?assertEqual([{leader, Leader}, {members, [Leader]}], + rabbit_ct_broker_helpers:rpc(Config, Server, rabbit_amqqueue, info, [Leader0, [leader, members]])), ?assertEqual(Server, Leader), ?assertMatch(#'queue.delete_ok'{}, amqp_channel:call(Ch, #'queue.delete'{queue = Q}))