summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMatthew Sackman <matthew@rabbitmq.com>2010-07-27 11:30:01 +0100
committerMatthew Sackman <matthew@rabbitmq.com>2010-07-27 11:30:01 +0100
commitc6581a20f35a3c47a4eca60842aba39c3c26d4bd (patch)
treeeb4ece79f4ba08a6d6685a1adb2f671e24b1a62d
parent629a1b991acf0c3d715aad06789c88b013c37369 (diff)
downloadrabbitmq-server-c6581a20f35a3c47a4eca60842aba39c3c26d4bd.tar.gz
Minor refactorings
-rw-r--r--src/rabbit_amqqueue.erl23
-rw-r--r--src/rabbit_amqqueue_process.erl24
-rw-r--r--src/rabbit_channel.erl1
3 files changed, 20 insertions, 28 deletions
diff --git a/src/rabbit_amqqueue.erl b/src/rabbit_amqqueue.erl
index 714d3287..6bf2f6db 100644
--- a/src/rabbit_amqqueue.erl
+++ b/src/rabbit_amqqueue.erl
@@ -39,7 +39,6 @@
-export([pseudo_queue/2]).
-export([lookup/1, with/2, with_or_die/2, assert_equivalence/5,
check_exclusive_access/2, with_exclusive_access_or_die/3,
- check_declare_arguments/2,
stat/1, deliver/2, requeue/3, ack/4]).
-export([list/1, info_keys/0, info/1, info/2, info_all/1, info_all/2]).
-export([consumers/1, consumers_all/1]).
@@ -89,8 +88,6 @@
rabbit_framing:amqp_table(), rabbit_types:maybe(pid()))
-> 'ok' | no_return()).
-spec(check_exclusive_access/2 :: (rabbit_types:amqqueue(), pid()) -> 'ok').
--spec(check_declare_arguments/2 :: (name(), rabbit_framing:amqp_table()) ->
- 'ok' | no_return()).
-spec(with_exclusive_access_or_die/3 :: (name(), pid(), qfun(A)) -> A).
-spec(list/1 :: (rabbit_types:vhost()) -> [rabbit_types:amqqueue()]).
-spec(info_keys/0 :: () -> [rabbit_types:info_key()]).
@@ -192,6 +189,7 @@ recover_durable_queues(DurableQueues) ->
[Q || Q <- Qs, gen_server2:call(Q#amqqueue.pid, {init, true}) == Q].
declare(QueueName, Durable, AutoDelete, Args, Owner) ->
+ ok = check_declare_arguments(QueueName, Args),
Q = start_queue_process(#amqqueue{name = QueueName,
durable = Durable,
auto_delete = AutoDelete,
@@ -292,27 +290,24 @@ assert_args_equivalence(#amqqueue{name = QueueName, arguments = Args},
[<<"x-expires">>]).
check_declare_arguments(QueueName, Args) ->
- [case Fun(Args) of
+ [case Fun(rabbit_misc:table_lookup(Args, Key)) of
ok -> ok;
{error, Error} -> rabbit_misc:protocol_error(
precondition_failed,
"Invalid arguments in declaration of queue ~s: "
- "~w (arguments: ~w)",
- [rabbit_misc:rs(QueueName), Error, Args])
- end || Fun <- [fun check_expires_argument/1]],
+ "~w (on argument: ~w)",
+ [rabbit_misc:rs(QueueName), Error, Key])
+ end || {Key, Fun} <- [{<<"x-expires">>, fun check_expires_argument/1}]],
ok.
-check_expires_argument(Args) ->
- check_expires_argument1(rabbit_misc:table_lookup(Args, <<"x-expires">>)).
-
-check_expires_argument1(undefined) ->
+check_expires_argument(undefined) ->
ok;
-check_expires_argument1({?EXPIRES_TYPE, Expires})
+check_expires_argument({?EXPIRES_TYPE, Expires})
when is_integer(Expires) andalso Expires > 0 ->
ok;
-check_expires_argument1({?EXPIRES_TYPE, _Expires}) ->
+check_expires_argument({?EXPIRES_TYPE, _Expires}) ->
{error, expires_zero_or_less};
-check_expires_argument1(_) ->
+check_expires_argument(_) ->
{error, expires_not_of_type_long}.
list(VHostPath) ->
diff --git a/src/rabbit_amqqueue_process.erl b/src/rabbit_amqqueue_process.erl
index 778f47c5..b98e1801 100644
--- a/src/rabbit_amqqueue_process.erl
+++ b/src/rabbit_amqqueue_process.erl
@@ -104,18 +104,16 @@ init(Q) ->
process_flag(trap_exit, true),
{ok, BQ} = application:get_env(backing_queue_module),
- State = #q{q = Q#amqqueue{pid = self()},
- exclusive_consumer = none,
- has_had_consumers = false,
- backing_queue = BQ,
- backing_queue_state = undefined,
- active_consumers = queue:new(),
- blocked_consumers = queue:new(),
- sync_timer_ref = undefined,
- rate_timer_ref = undefined,
- expiry_timer_ref = undefined},
-
- {ok, init_expires(State), hibernate,
+ {ok, #q{q = Q#amqqueue{pid = self()},
+ exclusive_consumer = none,
+ has_had_consumers = false,
+ backing_queue = BQ,
+ backing_queue_state = undefined,
+ active_consumers = queue:new(),
+ blocked_consumers = queue:new(),
+ sync_timer_ref = undefined,
+ rate_timer_ref = undefined,
+ expiry_timer_ref = undefined}, hibernate,
{backoff, ?HIBERNATE_AFTER_MIN, ?HIBERNATE_AFTER_MIN, ?DESIRED_HIBERNATE}}.
terminate(shutdown, State = #q{backing_queue = BQ}) ->
@@ -156,7 +154,7 @@ declare(Recover, From,
self(), {rabbit_amqqueue,
set_ram_duration_target, [self()]}),
BQS = BQ:init(QName, IsDurable, Recover),
- noreply(State#q{backing_queue_state = BQS});
+ noreply(init_expires(State#q{backing_queue_state = BQS}));
Q1 -> {stop, normal, {existing, Q1}, State}
end.
diff --git a/src/rabbit_channel.erl b/src/rabbit_channel.erl
index 2d814619..c4db3ace 100644
--- a/src/rabbit_channel.erl
+++ b/src/rabbit_channel.erl
@@ -726,7 +726,6 @@ handle_method(#'queue.declare'{queue = QueueNameBin,
return_queue_declare_ok(QueueName, NoWait, MessageCount,
ConsumerCount, State);
{error, not_found} ->
- rabbit_amqqueue:check_declare_arguments(QueueName, Args),
case rabbit_amqqueue:declare(QueueName, Durable, AutoDelete,
Args, Owner) of
{new, Q = #amqqueue{}} ->