diff options
author | Matthew Sackman <matthew@rabbitmq.com> | 2010-07-27 11:30:01 +0100 |
---|---|---|
committer | Matthew Sackman <matthew@rabbitmq.com> | 2010-07-27 11:30:01 +0100 |
commit | c6581a20f35a3c47a4eca60842aba39c3c26d4bd (patch) | |
tree | eb4ece79f4ba08a6d6685a1adb2f671e24b1a62d | |
parent | 629a1b991acf0c3d715aad06789c88b013c37369 (diff) | |
download | rabbitmq-server-c6581a20f35a3c47a4eca60842aba39c3c26d4bd.tar.gz |
Minor refactorings
-rw-r--r-- | src/rabbit_amqqueue.erl | 23 | ||||
-rw-r--r-- | src/rabbit_amqqueue_process.erl | 24 | ||||
-rw-r--r-- | src/rabbit_channel.erl | 1 |
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{}} -> |