Skip to content

Commit 7121b80

Browse files
Merge pull request #12026 from rabbitmq/maintenance-revive-fixes
Fixes to rabbit_maintenance:revive/0
2 parents f1d51e1 + 2dcced6 commit 7121b80

File tree

3 files changed

+17
-23
lines changed

3 files changed

+17
-23
lines changed

deps/rabbit/src/rabbit_amqqueue.erl

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1260,8 +1260,8 @@ list_local_followers() ->
12601260
[Q
12611261
|| Q <- list(),
12621262
amqqueue:is_quorum(Q),
1263-
amqqueue:get_state(Q) =/= crashed,
12641263
amqqueue:get_leader(Q) =/= node(),
1264+
lists:member(node(), get_quorum_nodes(Q)),
12651265
rabbit_quorum_queue:is_recoverable(Q)
12661266
].
12671267

deps/rabbit/src/rabbit_maintenance.erl

Lines changed: 15 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -291,28 +291,21 @@ random_nth(Nodes) ->
291291

292292
revive_local_quorum_queue_replicas() ->
293293
Queues = rabbit_amqqueue:list_local_followers(),
294-
[begin
295-
Name = amqqueue:get_name(Q),
296-
rabbit_log:debug("Will trigger a leader election for local quorum queue ~ts",
297-
[rabbit_misc:rs(Name)]),
298-
%% start local QQ replica (Ra server) of this queue
299-
{Prefix, _Node} = amqqueue:get_pid(Q),
300-
RaServer = {Prefix, node()},
301-
rabbit_log:debug("Will start quorum queue replica (Ra server) ~tp", [RaServer]),
302-
case rabbit_quorum_queue:restart_server(RaServer) of
303-
ok ->
304-
rabbit_log:debug("Successfully restarted a quorum queue replica ~tp", [RaServer]);
305-
{error, {already_started, _Pid}} ->
306-
rabbit_log:debug("Quorum queue replica ~tp is already running", [RaServer]);
307-
{error, nodedown} ->
308-
rabbit_log:error("Failed to restart quorum queue replica ~tp: target node was reported as down", [RaServer]);
309-
{error, name_not_registered} ->
310-
rabbit_log:error("Failed to restart quorum queue replica ~tp: it reported as not registered (was deleted very recently?)", [RaServer]);
311-
{error, Other} ->
312-
rabbit_log:error("Failed to restart quorum queue replica ~tp: ~tp", [RaServer, Other])
313-
end
314-
end || Q <- Queues],
315-
rabbit_log:info("Restart of local quorum queue replicas is complete").
294+
%% NB: this function ignores the first argument so we can just pass the
295+
%% empty binary as the vhost name.
296+
{Recovered, Failed} = rabbit_quorum_queue:recover(<<>>, Queues),
297+
rabbit_log:debug("Successfully revived ~b quorum queue replicas",
298+
[length(Recovered)]),
299+
case length(Failed) of
300+
0 ->
301+
ok;
302+
NumFailed ->
303+
rabbit_log:error("Failed to revive ~b quorum queue replicas",
304+
[NumFailed])
305+
end,
306+
307+
rabbit_log:info("Restart of local quorum queue replicas is complete"),
308+
ok.
316309

317310
%%
318311
%% Implementation

deps/rabbit/test/maintenance_mode_SUITE.erl

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@
1212
-include_lib("eunit/include/eunit.hrl").
1313
-include_lib("rabbitmq_ct_helpers/include/rabbit_assert.hrl").
1414

15+
-compile(nowarn_export_all).
1516
-compile(export_all).
1617

1718
all() ->

0 commit comments

Comments
 (0)