summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorEmile Joubert <emile@rabbitmq.com>2013-08-01 11:51:36 +0100
committerEmile Joubert <emile@rabbitmq.com>2013-08-01 11:51:36 +0100
commita6225fd5cd01929846953fd767baa3727a9a1098 (patch)
treeee9e3b7f51ad4899a3662d3dcec8791df85305bb
parent0936a78fdda57cfea97e840b0088a94fed3f2903 (diff)
downloadrabbitmq-server-a6225fd5cd01929846953fd767baa3727a9a1098.tar.gz
Better error message for DLX type error
-rw-r--r--src/rabbit_channel.erl19
-rw-r--r--src/rabbit_misc.erl9
2 files changed, 17 insertions, 11 deletions
diff --git a/src/rabbit_channel.erl b/src/rabbit_channel.erl
index 3f2f7afa..f0904163 100644
--- a/src/rabbit_channel.erl
+++ b/src/rabbit_channel.erl
@@ -986,12 +986,19 @@ handle_method(#'queue.declare'{queue = QueueNameBin,
return_queue_declare_ok(QueueName, NoWait, MessageCount,
ConsumerCount, State);
{error, not_found} ->
- case rabbit_misc:r_arg(VHostPath, exchange, Args,
- <<"x-dead-letter-exchange">>) of
- undefined -> ok;
- DLX -> check_read_permitted(QueueName, State),
- check_write_permitted(DLX, State),
- ok
+ DlxKey = <<"x-dead-letter-exchange">>,
+ case rabbit_misc:r_arg(VHostPath, exchange, Args, DlxKey) of
+ undefined ->
+ ok;
+ {error, {invalid_type, Type}} ->
+ rabbit_misc:protocol_error(
+ precondition_failed,
+ "invalid type '~s' for arg '~s' in ~s",
+ [Type, DlxKey, rabbit_misc:rs(QueueName)]);
+ DLX ->
+ check_read_permitted(QueueName, State),
+ check_write_permitted(DLX, State),
+ ok
end,
case rabbit_amqqueue:declare(QueueName, Durable, AutoDelete,
Args, Owner) of
diff --git a/src/rabbit_misc.erl b/src/rabbit_misc.erl
index be9d2712..e4016e83 100644
--- a/src/rabbit_misc.erl
+++ b/src/rabbit_misc.erl
@@ -142,9 +142,9 @@
when is_subtype(K, atom())).
-spec(r_arg/4 ::
(rabbit_types:vhost() | rabbit_types:r(atom()), K,
- rabbit_framing:amqp_table(), binary())
- -> undefined | rabbit_types:r(K)
- when is_subtype(K, atom())).
+ rabbit_framing:amqp_table(), binary()) -> undefined |
+ {error, {invalid_type, rabbit_framing:amqp_field_type()}} |
+ rabbit_types:r(K) when is_subtype(K, atom())).
-spec(rs/1 :: (rabbit_types:r(atom())) -> string()).
-spec(enable_cover/0 :: () -> ok_or_error()).
-spec(start_cover/1 :: ([{string(), string()} | string()]) -> 'ok').
@@ -371,8 +371,7 @@ r_arg(VHostPath, Kind, Table, Key) ->
case table_lookup(Table, Key) of
{longstr, NameBin} -> r(VHostPath, Kind, NameBin);
undefined -> undefined;
- Other -> protocol_error(precondition_failed,
- "invalid arg: ~p", [Other])
+ {Type, _} -> {error, {invalid_type, Type}}
end.
rs(#resource{virtual_host = VHostPath, kind = Kind, name = Name}) ->