diff options
author | Emile Joubert <emile@rabbitmq.com> | 2013-08-01 11:51:36 +0100 |
---|---|---|
committer | Emile Joubert <emile@rabbitmq.com> | 2013-08-01 11:51:36 +0100 |
commit | a6225fd5cd01929846953fd767baa3727a9a1098 (patch) | |
tree | ee9e3b7f51ad4899a3662d3dcec8791df85305bb | |
parent | 0936a78fdda57cfea97e840b0088a94fed3f2903 (diff) | |
download | rabbitmq-server-a6225fd5cd01929846953fd767baa3727a9a1098.tar.gz |
Better error message for DLX type error
-rw-r--r-- | src/rabbit_channel.erl | 19 | ||||
-rw-r--r-- | src/rabbit_misc.erl | 9 |
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}) -> |