summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMatthew Sackman <matthew@rabbitmq.com>2011-10-12 14:40:12 +0100
committerMatthew Sackman <matthew@rabbitmq.com>2011-10-12 14:40:12 +0100
commit071488bfaada18897cb19ff3e568d837e0260bc4 (patch)
treea609a666504575cabe611840b7f42582bff3291b
parentbf22ced93fa82abd9e1fd1833545bf55bd68c775 (diff)
downloadrabbitmq-server-071488bfaada18897cb19ff3e568d837e0260bc4.tar.gz
cosmetic, and be somewhat smarter about deciding the minimum length of q3 (now must end on a segment boundary - minor optimisation)
-rw-r--r--src/lqueue.erl10
-rw-r--r--src/rabbit_variable_queue.erl13
2 files changed, 15 insertions, 8 deletions
diff --git a/src/lqueue.erl b/src/lqueue.erl
index 80fb1fd9..9f58b250 100644
--- a/src/lqueue.erl
+++ b/src/lqueue.erl
@@ -119,10 +119,10 @@ foldr(Fun, Init, Q) ->
len({L, _Q, _I, _O}) ->
L.
-peek({0, _, _, _}) -> empty;
-peek({1, _, V, empty}) -> V;
-peek({_L, _Q, _I, O}) -> O.
+peek({0, _, _, _}) -> empty;
+peek({1, _, V, empty}) -> V;
+peek({_L, _Q, _I, O}) -> O.
-peek_r({0, _, _, _}) -> empty;
+peek_r({0, _, _, _}) -> empty;
peek_r({1, _, empty, V}) -> V;
-peek_r({_L, _Q, I, _O}) -> I.
+peek_r({_L, _Q, I, _O}) -> I.
diff --git a/src/rabbit_variable_queue.erl b/src/rabbit_variable_queue.erl
index 2df83046..44d7d73c 100644
--- a/src/rabbit_variable_queue.erl
+++ b/src/rabbit_variable_queue.erl
@@ -1482,11 +1482,18 @@ permitted_beta_count(#vqstate { len = 0 }) ->
infinity;
permitted_beta_count(#vqstate { target_ram_count = 0 }) ->
rabbit_queue_index:next_segment_boundary(0);
-permitted_beta_count(#vqstate { target_ram_count = TargetRamCount,
+permitted_beta_count(#vqstate { q3 = Q3,
+ target_ram_count = TargetRamCount,
len = Len }) ->
BetaDelta = lists:max([0, Len - TargetRamCount]),
- lists:max([BetaDelta - ((BetaDelta * BetaDelta) div Len),
- rabbit_queue_index:next_segment_boundary(0)]).
+ Q3SizeLimit =
+ case ?QUEUE:peek(Q3) of
+ empty ->
+ 0;
+ {value, #msg_status { seq_id = SeqId }} ->
+ rabbit_queue_index:next_segment_boundary(SeqId) - SeqId
+ end,
+ lists:max([BetaDelta - ((BetaDelta * BetaDelta) div Len), Q3SizeLimit]).
chunk_size(Current, Permitted)
when Permitted =:= infinity orelse Permitted >= Current ->