Skip to content

Commit 4fe96df

Browse files
committed
Ra 2.16.5 - bug fixes and minor improvements
Ra improvements: * Don't allow a non-voter to start elections * Register with ra directory before initialising ra server. * Trigger tick_timeout immediately after entering leader state. * Set a configurable segment max size This commit also includes a change to turn the quorum queue become leader callback to become a noop and instead rely on the more promptly tick_handler to handle the meta data store update after a leader election. This more prompt tick update means there should be a much shorter gap between the queue metrics being deleted from the old leader node to them being available again on the new node resulting in smoother message count metrics. Fix test that relied on waiting on too simplistic a property before asserting.
1 parent 44657cd commit 4fe96df

File tree

3 files changed

+51
-57
lines changed

3 files changed

+51
-57
lines changed

deps/rabbit/src/rabbit_quorum_queue.erl

Lines changed: 8 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -425,11 +425,10 @@ local_or_remote_handler(ChPid, Module, Function, Args) ->
425425
erpc:cast(Node, Module, Function, Args)
426426
end.
427427

428-
become_leader(QName, Name) ->
429-
%% as this function is called synchronously when a ra node becomes leader
430-
%% we need to ensure there is no chance of blocking as else the ra node
431-
%% may not be able to establish its leadership
432-
spawn(fun () -> become_leader0(QName, Name) end).
428+
become_leader(_QName, _Name) ->
429+
%% noop now as we instead rely on the promt tick_timeout + repair to update
430+
%% the meta data store after a leader change
431+
ok.
433432

434433
become_leader0(QName, Name) ->
435434
Fun = fun (Q1) ->
@@ -580,7 +579,6 @@ handle_tick(QName,
580579
Nodes) ->
581580
%% this makes calls to remote processes so cannot be run inside the
582581
%% ra server
583-
Self = self(),
584582
spawn(
585583
fun() ->
586584
try
@@ -638,7 +636,7 @@ handle_tick(QName,
638636
end}
639637
| Infos0],
640638
rabbit_core_metrics:queue_stats(QName, Infos),
641-
ok = repair_leader_record(Q, Self),
639+
ok = repair_leader_record(Q, Name),
642640
case repair_amqqueue_nodes(Q) of
643641
ok ->
644642
ok;
@@ -675,17 +673,16 @@ handle_tick(QName, Config, _Nodes) ->
675673
rabbit_log:debug("~ts: handle tick received unexpected config format ~tp",
676674
[rabbit_misc:rs(QName), Config]).
677675

678-
repair_leader_record(Q, Self) ->
676+
repair_leader_record(Q, Name) ->
679677
Node = node(),
680678
case amqqueue:get_pid(Q) of
681679
{_, Node} ->
682680
%% it's ok - we don't need to do anything
683681
ok;
684682
_ ->
685683
QName = amqqueue:get_name(Q),
686-
rabbit_log:debug("~ts: repairing leader record",
687-
[rabbit_misc:rs(QName)]),
688-
{_, Name} = erlang:process_info(Self, registered_name),
684+
rabbit_log:debug("~ts: updating leader record to current node ~b",
685+
[rabbit_misc:rs(QName), Node]),
689686
ok = become_leader0(QName, Name),
690687
ok
691688
end,

deps/rabbitmq_management/test/rabbit_mgmt_only_http_SUITE.erl

Lines changed: 42 additions & 45 deletions
Original file line numberDiff line numberDiff line change
@@ -482,53 +482,50 @@ queues_enable_totals_test(Config) ->
482482
Publish(<<"foo">>),
483483

484484
Fun = fun() ->
485-
length(rabbit_ct_broker_helpers:rpc(Config, 0, ets, tab2list,
486-
[queue_coarse_metrics])) == 2
485+
Queues = http_get(Config, "/queues/%2F"),
486+
Queue = http_get(Config, "/queues/%2F/foo"),
487+
488+
Node = rabbit_ct_broker_helpers:get_node_config(Config, 0, nodename),
489+
NodeBin = atom_to_binary(Node, utf8),
490+
assert_list([#{name => <<"baz">>,
491+
vhost => <<"/">>,
492+
durable => true,
493+
auto_delete => false,
494+
exclusive => false,
495+
arguments => #{'x-queue-type' => <<"classic">>},
496+
node => NodeBin,
497+
messages => 1,
498+
messages_ready => 1,
499+
messages_unacknowledged => 0},
500+
#{name => <<"foo">>,
501+
vhost => <<"/">>,
502+
durable => true,
503+
auto_delete => false,
504+
exclusive => null,
505+
arguments => #{'x-queue-type' => <<"quorum">>},
506+
leader => NodeBin,
507+
messages => 2,
508+
messages_ready => 2,
509+
messages_unacknowledged => 0,
510+
members => [NodeBin]}], Queues),
511+
assert_item(#{name => <<"foo">>,
512+
vhost => <<"/">>,
513+
durable => true,
514+
auto_delete => false,
515+
exclusive => null,
516+
arguments => #{'x-queue-type' => <<"quorum">>},
517+
leader => NodeBin,
518+
messages => 2,
519+
messages_ready => 2,
520+
messages_unacknowledged => 0,
521+
members => [NodeBin]}, Queue),
522+
523+
?assert(not maps:is_key(message_stats, Queue)),
524+
?assert(not maps:is_key(messages_details, Queue)),
525+
?assert(not maps:is_key(reductions_details, Queue)),
526+
true
487527
end,
488528
await_condition(Fun),
489-
490-
Queues = http_get(Config, "/queues/%2F"),
491-
Queue = http_get(Config, "/queues/%2F/foo"),
492-
493-
Node = rabbit_ct_broker_helpers:get_node_config(Config, 0, nodename),
494-
NodeBin = atom_to_binary(Node, utf8),
495-
assert_list([#{name => <<"baz">>,
496-
vhost => <<"/">>,
497-
durable => true,
498-
auto_delete => false,
499-
exclusive => false,
500-
arguments => #{'x-queue-type' => <<"classic">>},
501-
node => NodeBin,
502-
messages => 1,
503-
messages_ready => 1,
504-
messages_unacknowledged => 0},
505-
#{name => <<"foo">>,
506-
vhost => <<"/">>,
507-
durable => true,
508-
auto_delete => false,
509-
exclusive => null,
510-
arguments => #{'x-queue-type' => <<"quorum">>},
511-
leader => NodeBin,
512-
messages => 2,
513-
messages_ready => 2,
514-
messages_unacknowledged => 0,
515-
members => [NodeBin]}], Queues),
516-
assert_item(#{name => <<"foo">>,
517-
vhost => <<"/">>,
518-
durable => true,
519-
auto_delete => false,
520-
exclusive => null,
521-
arguments => #{'x-queue-type' => <<"quorum">>},
522-
leader => NodeBin,
523-
messages => 2,
524-
messages_ready => 2,
525-
messages_unacknowledged => 0,
526-
members => [NodeBin]}, Queue),
527-
528-
?assert(not maps:is_key(message_stats, Queue)),
529-
?assert(not maps:is_key(messages_details, Queue)),
530-
?assert(not maps:is_key(reductions_details, Queue)),
531-
532529
http_delete(Config, "/queues/%2F/foo", {group, '2xx'}),
533530
http_delete(Config, "/queues/%2F/baz", {group, '2xx'}),
534531
close_connection(Conn),

rabbitmq-components.mk

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -51,7 +51,7 @@ dep_khepri_mnesia_migration = hex 0.7.1
5151
dep_meck = hex 1.0.0
5252
dep_osiris = git https://github.com/rabbitmq/osiris v1.8.6
5353
dep_prometheus = hex 4.11.0
54-
dep_ra = hex 2.16.3
54+
dep_ra = hex 2.16.5
5555
dep_ranch = hex 2.2.0
5656
dep_recon = hex 2.5.6
5757
dep_redbug = hex 2.0.7

0 commit comments

Comments
 (0)