summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAlexandru Scvortov <alexandru@rabbitmq.com>2011-08-11 16:14:50 +0100
committerAlexandru Scvortov <alexandru@rabbitmq.com>2011-08-11 16:14:50 +0100
commit5757824244675fb7d0c71dcb464da8e8536c8013 (patch)
tree0df9606a5dffc640aedbbd6302b10008908adf97
parentff9f8b0f20b47bcd17bb379b0185011d549faaa2 (diff)
downloadrabbitmq-server-5757824244675fb7d0c71dcb464da8e8536c8013.tar.gz
refactor
-rw-r--r--src/rabbit_channel_sup.erl2
-rw-r--r--src/rabbit_limiter.erl18
-rw-r--r--src/rabbit_tests.erl4
3 files changed, 14 insertions, 10 deletions
diff --git a/src/rabbit_channel_sup.erl b/src/rabbit_channel_sup.erl
index 27e0b743..a217a6c4 100644
--- a/src/rabbit_channel_sup.erl
+++ b/src/rabbit_channel_sup.erl
@@ -89,4 +89,4 @@ start_limiter(SupPid) ->
SupPid,
{limiter, {rabbit_limiter, start_link, []},
transient, ?MAX_WAIT, worker, [rabbit_limiter]}),
- rabbit_limiter:make_new_token(Pid).
+ rabbit_limiter:make_token(Pid).
diff --git a/src/rabbit_limiter.erl b/src/rabbit_limiter.erl
index 37994d2d..15193d2b 100644
--- a/src/rabbit_limiter.erl
+++ b/src/rabbit_limiter.erl
@@ -20,7 +20,7 @@
-export([init/1, terminate/2, code_change/3, handle_call/3, handle_cast/2,
handle_info/2, prioritise_call/3]).
--export([start_link/0, make_new_token/1, is_enabled/1, enable/2, disable/1]).
+-export([start_link/0, make_token/1, is_enabled/1, enable/2, disable/1]).
-export([limit/2, can_send/3, ack/2, register/2, unregister/2]).
-export([get_limit/1, block/1, unblock/1, is_blocked/1]).
@@ -36,7 +36,7 @@
-opaque(token() :: #token{}).
-spec(start_link/0 :: () -> rabbit_types:ok_pid_or_error()).
--spec(make_new_token/1 :: (pid()) -> token()).
+-spec(make_token/1 :: (pid()) -> token()).
-spec(is_enabled/1 :: (token()) -> boolean()).
-spec(enable/2 :: (token(), non_neg_integer()) -> token()).
-spec(disable/1 :: (token()) -> token()).
@@ -70,7 +70,7 @@
start_link() -> gen_server2:start_link(?MODULE, [], []).
-make_new_token(Pid) -> #token{pid = Pid}.
+make_token(Pid) -> #token{pid = Pid}.
is_enabled(#token{enabled = Enabled}) -> Enabled.
@@ -84,13 +84,17 @@ limit(Limiter, PrefetchCount) ->
maybe_call(Limiter, {limit, PrefetchCount, Limiter}, ok).
%% Ask the limiter whether the queue can deliver a message without
-%% breaching a limit
-can_send(Limiter, QPid, AckRequired) ->
+%% breaching a limit. Note that we don't use maybe_call here in order
+%% to avoid always going through with_exit_handler/2, even when the
+%% limiter is disabled.
+can_send(#token{pid = Pid, enabled = true}, QPid, AckRequired) ->
rabbit_misc:with_exit_handler(
fun () -> true end,
fun () ->
- maybe_call(Limiter, {can_send, QPid, AckRequired}, true)
- end).
+ gen_server2:call(Pid, {can_send, QPid, AckRequired}, infinity)
+ end);
+can_send(_, _, _) ->
+ true.
%% Let the limiter know that the channel has received some acks from a
%% consumer
diff --git a/src/rabbit_tests.erl b/src/rabbit_tests.erl
index 3b91aa8d..3ba87b00 100644
--- a/src/rabbit_tests.erl
+++ b/src/rabbit_tests.erl
@@ -1136,7 +1136,7 @@ test_server_status() ->
{ok, Ch} = rabbit_channel:start_link(
1, self(), Writer, self(), rabbit_framing_amqp_0_9_1,
user(<<"user">>), <<"/">>, [], self(),
- rabbit_limiter:make_new_token(self())),
+ rabbit_limiter:make_token(self())),
[Q, Q2] = [Queue || Name <- [<<"foo">>, <<"bar">>],
{new, Queue = #amqqueue{}} <-
[rabbit_amqqueue:declare(
@@ -1203,7 +1203,7 @@ test_spawn() ->
{ok, Ch} = rabbit_channel:start_link(
1, Me, Writer, Me, rabbit_framing_amqp_0_9_1,
user(<<"guest">>), <<"/">>, [], self(),
- rabbit_limiter:make_new_token(self())),
+ rabbit_limiter:make_token(self())),
ok = rabbit_channel:do(Ch, #'channel.open'{}),
receive #'channel.open_ok'{} -> ok
after 1000 -> throw(failed_to_receive_channel_open_ok)