Skip to content

Commit f8a5c1b

Browse files
Merge pull request #8356 from rabbitmq/rabbitmq-server-8323
Fix issues with multiple src and dest queue args
2 parents bd05fd0 + 4567c3c commit f8a5c1b

2 files changed

Lines changed: 35 additions & 6 deletions

File tree

deps/rabbitmq_shovel/src/rabbit_shovel_util.erl

Lines changed: 15 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -224,12 +224,23 @@ validate_params_user(#amqp_params_network{}, _User) ->
224224
ok.
225225

226226
validate_queue_args(Name, Term0) ->
227-
Term = rabbit_data_coercion:to_proplist(Term0),
228-
rabbit_parameter_validation:proplist(Name, rabbit_amqqueue:declare_args(), Term).
227+
validate_amqp_table_args(Name, Term0, rabbit_amqqueue:declare_args()).
229228

230229
validate_consumer_args(Name, Term0) ->
231-
Term = rabbit_data_coercion:to_proplist(Term0),
232-
rabbit_parameter_validation:proplist(Name, rabbit_amqqueue:consume_args(), Term).
230+
validate_amqp_table_args(Name, Term0, rabbit_amqqueue:consume_args()).
231+
232+
validate_amqp_table_args(Name, Term0, Args) ->
233+
Table = rabbit_misc:to_amqp_table(rabbit_data_coercion:to_map(Term0)),
234+
[case rabbit_misc:table_lookup(Table, Key) of
235+
undefined -> ok;
236+
TypeVal ->
237+
case Fun(TypeVal, Table) of
238+
ok -> ok;
239+
{error, Error} ->
240+
{error, "invalid arg '~ts' in ~ts: ~255p",
241+
[Key, Name, Error]}
242+
end
243+
end || {Key, Fun} <- Args].
233244

234245
validate_delete_after(_Name, <<"never">>) -> ok;
235246
validate_delete_after(_Name, <<"queue-length">>) -> ok;

deps/rabbitmq_shovel/test/amqp091_dynamic_SUITE.erl

Lines changed: 20 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -48,7 +48,8 @@ groups() ->
4848
]},
4949

5050
{stream_queue_tests, [], [
51-
stream_queues
51+
stream_queues,
52+
stream_queues_with_dest_args
5253
]}
5354
].
5455

@@ -109,7 +110,9 @@ quorum_queues(Config) ->
109110
{<<"src-queue">>, <<"src">>},
110111
{<<"dest-queue">>, <<"dest">>},
111112
{<<"src-queue-args">>, #{<<"x-queue-type">> => <<"quorum">>}},
112-
{<<"dest-queue-args">>, #{<<"x-queue-type">> => <<"quorum">>}}
113+
{<<"dest-queue-args">>, #{<<"x-queue-type">> => <<"quorum">>,
114+
<<"x-dead-letter-exchange">> => <<"dlx1">>,
115+
<<"x-dead-letter-routing-key">> => <<"rk1">>}}
113116
]),
114117
amqp091_publish_expect(Ch, <<>>, <<"src">>, <<"dest">>, <<"hello">>)
115118
end).
@@ -128,6 +131,21 @@ stream_queues(Config) ->
128131
amqp091_publish_expect(Ch, <<>>, <<"src">>, <<"dest">>, <<"hello">>)
129132
end).
130133

134+
stream_queues_with_dest_args(Config) ->
135+
with_amqp091_ch(Config,
136+
fun (Ch) ->
137+
shovel_test_utils:set_param(
138+
Config,
139+
<<"test">>, [
140+
{<<"src-queue">>, <<"src">>},
141+
{<<"dest-queue">>, <<"dest">>},
142+
{<<"dest-queue-args">>, #{<<"x-queue-type">> => <<"stream">>,
143+
<<"x-max-age">> => <<"12h">>}}
144+
]),
145+
amqp091_publish(Ch, <<>>, <<"src">>, <<"hello">>),
146+
shovel_test_utils:amqp091_await_empty(Ch, <<"src">>)
147+
end).
148+
131149
set_properties_using_map(Config) ->
132150
with_amqp091_ch(Config,
133151
fun (Ch) ->

0 commit comments

Comments
 (0)