Skip to content

Commit e094a9b

Browse files
authored
Merge pull request #11742 from rabbitmq/fix_catch_precodition_fail_management
Handle more failure types in the rabbitmqqueue:declare/6 when declaring a stream
2 parents 8061419 + 909f0d8 commit e094a9b

File tree

2 files changed

+22
-2
lines changed

2 files changed

+22
-2
lines changed

deps/rabbit/src/rabbit_amqp_management.erl

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -147,8 +147,8 @@ handle_http_req(HttpMethod = <<"PUT">>,
147147
Result;
148148
{error, not_found} ->
149149
PermCache2 = check_dead_letter_exchange(QName, QArgs, User, PermCache1),
150-
case rabbit_amqqueue:declare(
151-
QName, Durable, AutoDelete, QArgs, Owner, Username) of
150+
try rabbit_amqqueue:declare(
151+
QName, Durable, AutoDelete, QArgs, Owner, Username) of
152152
{new, Q} ->
153153
rabbit_core_metrics:queue_created(QName),
154154
{Q, 0, 0, <<"201">>, PermCache2};
@@ -169,6 +169,11 @@ handle_http_req(HttpMethod = <<"PUT">>,
169169
ReasonArgs);
170170
{protocol_error, _ErrorType, Reason, ReasonArgs} ->
171171
throw(<<"400">>, Reason, ReasonArgs)
172+
catch exit:#amqp_error{name = precondition_failed,
173+
explanation = Expl} ->
174+
throw(<<"409">>, Expl, []);
175+
exit:#amqp_error{explanation = Expl} ->
176+
throw(<<"400">>, Expl, [])
172177
end;
173178
{error, {absent, Q, Reason}} ->
174179
absent(Q, Reason)

deps/rabbitmq_amqp_client/test/management_SUITE.erl

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -59,6 +59,7 @@ groups() ->
5959
declare_queue_inequivalent_fields,
6060
declare_queue_inequivalent_exclusive,
6161
declare_queue_invalid_field,
62+
declare_queue_invalid_arg,
6263
declare_default_exchange,
6364
declare_exchange_amq_prefix,
6465
declare_exchange_line_feed,
@@ -528,6 +529,20 @@ declare_queue_invalid_field(Config) ->
528529
amqp10_msg:body(Resp)),
529530
ok = cleanup(Init).
530531

532+
declare_queue_invalid_arg(Config) ->
533+
Init = {_, LinkPair} = init(Config),
534+
QName = <<"👌"/utf8>>,
535+
QProps = #{arguments => #{<<"x-queue-type">> => {utf8, <<"stream">>},
536+
<<"x-dead-letter-exchange">> => {utf8, <<"dlx is invalid for stream">>}}},
537+
{error, Resp} = rabbitmq_amqp_client:declare_queue(LinkPair, QName, QProps),
538+
?assertMatch(#{subject := <<"409">>}, amqp10_msg:properties(Resp)),
539+
?assertEqual(
540+
#'v1_0.amqp_value'{
541+
content = {utf8, <<"invalid arg 'x-dead-letter-exchange' for queue '", QName/binary,
542+
"' in vhost '/' of queue type rabbit_stream_queue">>}},
543+
amqp10_msg:body(Resp)),
544+
ok = cleanup(Init).
545+
531546
declare_default_exchange(Config) ->
532547
Init = {_, LinkPair} = init(Config),
533548
{error, Resp} = rabbitmq_amqp_client:declare_exchange(LinkPair, ?DEFAULT_EXCHANGE, #{}),

0 commit comments

Comments
 (0)