Skip to content

Commit 2670200

Browse files
ansdmichaelklishin
authored andcommitted
Use appropriate error condition for maxlen
This is a follow up to #15075 For maximum queue length exceeded use more appropriate error condition `resource-limit-exceeded` (instead of `precondition-failed`).
1 parent a5c144c commit 2670200

File tree

2 files changed

+24
-26
lines changed

2 files changed

+24
-26
lines changed

deps/rabbit/src/rabbit_amqp_session.erl

Lines changed: 22 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -695,19 +695,10 @@ send_delivery_state_changes(State0 = #state{cfg = #cfg{writer_pid = Writer,
695695
%% Order is important:
696696
%% 1. Process queue rejections.
697697
{RejectedIds, GrantCredits0, State1} = handle_stashed_rejected(State0),
698-
maps:foreach(
699-
fun({QNameBin, Reason}, Ids) ->
700-
Description = reject_description(QNameBin, Reason),
701-
Info = {map,
702-
[{{symbol, <<"queue">>}, {utf8, QNameBin}},
703-
{{symbol, <<"reason">>}, {symbol, reject_reason_to_binary(Reason)}}]},
704-
Rej = #'v1_0.rejected'{
705-
error = #'v1_0.error'{
706-
condition = ?V_1_0_AMQP_ERROR_PRECONDITION_FAILED,
707-
description = {utf8, Description},
708-
info = Info}},
709-
send_dispositions(Ids, Rej, Writer, ChannelNum)
710-
end, RejectedIds),
698+
maps:foreach(fun({QNameBin, Reason}, Ids) ->
699+
Rejected = rejected(QNameBin, Reason),
700+
send_dispositions(Ids, Rejected, Writer, ChannelNum)
701+
end, RejectedIds),
711702
%% 2. Process queue confirmations.
712703
{AcceptedIds0, GrantCredits1, State2} = handle_stashed_settled(GrantCredits0, State1),
713704
%% 3. Process unavailable classic queues.
@@ -2487,7 +2478,7 @@ incoming_link_transfer(
24872478
Detach = detach(HandleInt, Link0, Err1),
24882479
{error, [Detach]};
24892480
false ->
2490-
Disposition = rejected(DeliveryId, Err),
2481+
Disposition = disposition_rejected(DeliveryId, Err),
24912482
DeliveryCount = add(DeliveryCount0, 1),
24922483
Credit1 = Credit0 - 1,
24932484
{Credit, Reply0} = maybe_grant_link_credit(
@@ -2599,21 +2590,28 @@ released(DeliveryId) ->
25992590
settled = true,
26002591
state = #'v1_0.released'{}}.
26012592

2602-
rejected(DeliveryId, Error) ->
2593+
disposition_rejected(DeliveryId, Error) ->
26032594
#'v1_0.disposition'{role = ?AMQP_ROLE_RECEIVER,
26042595
first = ?UINT(DeliveryId),
26052596
settled = true,
26062597
state = #'v1_0.rejected'{error = Error}}.
26072598

2608-
reject_description(QNameBin, maxlen) ->
2609-
<<"queue '", QNameBin/binary, "' exceeded maximum length">>;
2610-
reject_description(QNameBin, down) ->
2611-
<<"queue '", QNameBin/binary, "' is unavailable">>.
2612-
2613-
reject_reason_to_binary(maxlen) ->
2614-
<<"maxlen">>;
2615-
reject_reason_to_binary(down) ->
2616-
<<"unavailable">>.
2599+
rejected(QNameBin, maxlen) ->
2600+
#'v1_0.rejected'{
2601+
error = #'v1_0.error'{
2602+
condition = ?V_1_0_AMQP_ERROR_RESOURCE_LIMIT_EXCEEDED,
2603+
description = {utf8, <<"queue '", QNameBin/binary, "' exceeded maximum length">>},
2604+
info = {map,
2605+
[{{symbol, <<"queue">>}, {utf8, QNameBin}},
2606+
{{symbol, <<"reason">>}, {symbol, <<"maxlen">>}}]}}};
2607+
rejected(QNameBin, down) ->
2608+
#'v1_0.rejected'{
2609+
error = #'v1_0.error'{
2610+
condition = ?V_1_0_AMQP_ERROR_PRECONDITION_FAILED,
2611+
description = {utf8, <<"queue '", QNameBin/binary, "' is unavailable">>},
2612+
info = {map,
2613+
[{{symbol, <<"queue">>}, {utf8, QNameBin}},
2614+
{{symbol, <<"reason">>}, {symbol, <<"unavailable">>}}]}}}.
26172615

26182616
maybe_grant_link_credit(Credit, MaxLinkCredit, DeliveryCount, NumUnconfirmed, Handle) ->
26192617
case grant_link_credit(Credit, MaxLinkCredit, NumUnconfirmed) of

deps/rabbit/test/amqp_client_SUITE.erl

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3609,7 +3609,7 @@ target_quorum_queue_rejects(Config) ->
36093609
[receive {amqp10_disposition, {{rejected, Error}, DTag}} ->
36103610
?assertEqual(
36113611
#'v1_0.error'{
3612-
condition = ?V_1_0_AMQP_ERROR_PRECONDITION_FAILED,
3612+
condition = ?V_1_0_AMQP_ERROR_RESOURCE_LIMIT_EXCEEDED,
36133613
description = {utf8, <<"queue '🎄' exceeded maximum length"/utf8>>},
36143614
info = {map, [{{symbol, <<"queue">>}, {utf8, QName}},
36153615
{{symbol, <<"reason">>}, {symbol, <<"maxlen">>}}]}},
@@ -3668,7 +3668,7 @@ target_classic_queue_rejects(Config) ->
36683668
%% This message should make it to only the 2nd queue.
36693669
ok = amqp10_client:send_msg(Sender, amqp10_msg:new(<<"t2">>, <<"m2">>)),
36703670
ExpectedErr1 = #'v1_0.error'{
3671-
condition = ?V_1_0_AMQP_ERROR_PRECONDITION_FAILED,
3671+
condition = ?V_1_0_AMQP_ERROR_RESOURCE_LIMIT_EXCEEDED,
36723672
description = {utf8, <<"queue '", QName1/binary, "' exceeded maximum length">>},
36733673
info = {map, [{{symbol, <<"queue">>}, {utf8, QName1}},
36743674
{{symbol, <<"reason">>}, {symbol, <<"maxlen">>}}]}},

0 commit comments

Comments
 (0)