Skip to content

Commit ef899f5

Browse files
committed
Display AZ in quorum_status
Include the availability zone (AZ) of each replica in the quorum_status output when a member placement tag is configured on the queue.
1 parent d2c33b5 commit ef899f5

1 file changed

Lines changed: 79 additions & 51 deletions

File tree

deps/rabbit/src/rabbit_quorum_queue.erl

Lines changed: 79 additions & 51 deletions
Original file line numberDiff line numberDiff line change
@@ -197,6 +197,12 @@
197197
[operator_policy_validator, <<"target-group-size">>, ?MODULE]}},
198198
{mfa, {rabbit_registry, register,
199199
[policy_merge_strategy, <<"target-group-size">>, ?MODULE]}},
200+
{mfa, {rabbit_registry, register,
201+
[policy_validator, <<"member-placement-tag">>, ?MODULE]}},
202+
{mfa, {rabbit_registry, register,
203+
[operator_policy_validator, <<"member-placement-tag">>, ?MODULE]}},
204+
{mfa, {rabbit_registry, register,
205+
[policy_merge_strategy, <<"member-placement-tag">>, ?MODULE]}},
200206
{mfa, {rabbit_registry, register,
201207
[policy_validator, <<"delayed-retry-type">>, ?MODULE]}},
202208
{mfa, {rabbit_registry, register,
@@ -244,6 +250,11 @@ validate_policy0(<<"target-group-size">>, Value) ->
244250
true -> ok;
245251
false -> {error, "~tp is not a valid qq target count value", [Value]}
246252
end;
253+
validate_policy0(<<"member-placement-tag">>, Value)
254+
when is_binary(Value), byte_size(Value) > 0 ->
255+
ok;
256+
validate_policy0(<<"member-placement-tag">>, Value) ->
257+
{error, "~tp is not a valid member-placement-tag value. Must be a non-empty string", [Value]};
247258
validate_policy0(<<"delayed-retry-type">>, <<"all">>) -> ok;
248259
validate_policy0(<<"delayed-retry-type">>, <<"failed">>) -> ok;
249260
validate_policy0(<<"delayed-retry-type">>, <<"returned">>) -> ok;
@@ -263,6 +274,8 @@ validate_policy0(<<"delayed-retry-max">>, Value) ->
263274

264275
merge_policy_value(<<"target-group-size">>, Val, OpVal) ->
265276
max(Val, OpVal);
277+
merge_policy_value(<<"member-placement-tag">>, _Val, OpVal) ->
278+
OpVal;
266279
merge_policy_value(<<"delayed-retry-type">>, _Val, OpVal) ->
267280
OpVal;
268281
merge_policy_value(<<"delayed-retry-min">>, Val, OpVal) ->
@@ -614,6 +627,7 @@ capabilities() ->
614627
<<"x-single-active-consumer">>,
615628
<<"x-queue-type">>,
616629
<<"x-quorum-initial-group-size">>,
630+
<<"x-member-placement-tag">>,
617631
<<"x-delivery-limit">>,
618632
<<"x-message-ttl">>,
619633
<<"x-queue-leader-locator">>,
@@ -1483,59 +1497,73 @@ status(#resource{virtual_host = Vhost, name = QueueName}) ->
14831497
status(Q) when ?amqqueue_is_quorum(Q) ->
14841498
{RName, _} = amqqueue:get_pid(Q),
14851499
Nodes = lists:sort(get_nodes(Q)),
1500+
TagKey = rabbit_queue_location:placement_tag_key(Q),
1501+
NodeToAZ = case TagKey of
1502+
undefined -> #{};
1503+
Key -> rabbit_member_placement_az:node_tags_for_nodes(Nodes, Key)
1504+
end,
14861505
[begin
14871506
ServerId = {RName, N},
1488-
case erpc_call(N, ?MODULE, key_metrics_rpc, [ServerId], ?RPC_TIMEOUT) of
1489-
#{state := RaftState,
1490-
membership := Membership,
1491-
commit_index := Commit,
1492-
term := Term,
1493-
last_index := Last,
1494-
last_applied := LastApplied,
1495-
last_written_index := LastWritten,
1496-
snapshot_index := SnapIdx,
1497-
machine_version := MacVer} ->
1498-
[{<<"Node Name">>, N},
1499-
{<<"Raft State">>, RaftState},
1500-
{<<"Membership">>, Membership},
1501-
{<<"Last Log Index">>, Last},
1502-
{<<"Last Written">>, LastWritten},
1503-
{<<"Last Applied">>, LastApplied},
1504-
{<<"Commit Index">>, Commit},
1505-
{<<"Snapshot Index">>, SnapIdx},
1506-
{<<"Term">>, Term},
1507-
{<<"Machine Version">>, MacVer}
1508-
];
1509-
#{state := noproc,
1510-
membership := unknown,
1511-
machine_version := MacVer} ->
1512-
[{<<"Node Name">>, N},
1513-
{<<"Raft State">>, noproc},
1514-
{<<"Membership">>, <<>>},
1515-
{<<"Last Log Index">>, <<>>},
1516-
{<<"Last Written">>, <<>>},
1517-
{<<"Last Applied">>, <<>>},
1518-
{<<"Commit Index">>, <<>>},
1519-
{<<"Snapshot Index">>, <<>>},
1520-
{<<"Term">>, <<>>},
1521-
{<<"Machine Version">>, MacVer}
1522-
];
1523-
{error, Reason} ->
1524-
State = case is_atom(Reason) of
1525-
true -> Reason;
1526-
false -> unknown
1527-
end,
1528-
[{<<"Node Name">>, N},
1529-
{<<"Raft State">>, State},
1530-
{<<"Membership">>, <<>>},
1531-
{<<"Last Log Index">>, <<>>},
1532-
{<<"Last Written">>, <<>>},
1533-
{<<"Last Applied">>, <<>>},
1534-
{<<"Commit Index">>, <<>>},
1535-
{<<"Snapshot Index">>, <<>>},
1536-
{<<"Term">>, <<>>},
1537-
{<<"Machine Version">>, <<>>}
1538-
]
1507+
BaseRow = case erpc_call(N, ?MODULE, key_metrics_rpc, [ServerId], ?RPC_TIMEOUT) of
1508+
#{state := RaftState,
1509+
membership := Membership,
1510+
commit_index := Commit,
1511+
term := Term,
1512+
last_index := Last,
1513+
last_applied := LastApplied,
1514+
last_written_index := LastWritten,
1515+
snapshot_index := SnapIdx,
1516+
machine_version := MacVer} ->
1517+
[{<<"Node Name">>, N},
1518+
{<<"Raft State">>, RaftState},
1519+
{<<"Membership">>, Membership},
1520+
{<<"Last Log Index">>, Last},
1521+
{<<"Last Written">>, LastWritten},
1522+
{<<"Last Applied">>, LastApplied},
1523+
{<<"Commit Index">>, Commit},
1524+
{<<"Snapshot Index">>, SnapIdx},
1525+
{<<"Term">>, Term},
1526+
{<<"Machine Version">>, MacVer}
1527+
];
1528+
#{state := noproc,
1529+
membership := unknown,
1530+
machine_version := MacVer} ->
1531+
[{<<"Node Name">>, N},
1532+
{<<"Raft State">>, noproc},
1533+
{<<"Membership">>, <<>>},
1534+
{<<"Last Log Index">>, <<>>},
1535+
{<<"Last Written">>, <<>>},
1536+
{<<"Last Applied">>, <<>>},
1537+
{<<"Commit Index">>, <<>>},
1538+
{<<"Snapshot Index">>, <<>>},
1539+
{<<"Term">>, <<>>},
1540+
{<<"Machine Version">>, MacVer}
1541+
];
1542+
{error, Reason} ->
1543+
State = case is_atom(Reason) of
1544+
true -> Reason;
1545+
false -> unknown
1546+
end,
1547+
[{<<"Node Name">>, N},
1548+
{<<"Raft State">>, State},
1549+
{<<"Membership">>, <<>>},
1550+
{<<"Last Log Index">>, <<>>},
1551+
{<<"Last Written">>, <<>>},
1552+
{<<"Last Applied">>, <<>>},
1553+
{<<"Commit Index">>, <<>>},
1554+
{<<"Snapshot Index">>, <<>>},
1555+
{<<"Term">>, <<>>},
1556+
{<<"Machine Version">>, <<>>}
1557+
]
1558+
end,
1559+
case TagKey of
1560+
undefined -> BaseRow;
1561+
_ -> AZ = case maps:get(N, NodeToAZ, undefined) of
1562+
undefined -> <<>>;
1563+
Val -> Val
1564+
end,
1565+
[NodeName | Rest] = BaseRow,
1566+
[NodeName, {<<"AZ">>, AZ} | Rest]
15391567
end
15401568
end || N <- Nodes].
15411569

0 commit comments

Comments
 (0)