diff options
| author | Matthew Sackman <matthew@rabbitmq.com> | 2011-10-12 14:40:12 +0100 |
|---|---|---|
| committer | Matthew Sackman <matthew@rabbitmq.com> | 2011-10-12 14:40:12 +0100 |
| commit | 3b6108f1fe79cdcbf7dcbb0dc91d0da60045c425 (patch) | |
| tree | a609a666504575cabe611840b7f42582bff3291b /src | |
| parent | fae4da6b71bfb923cc44b7e506edad1e55b5ef75 (diff) | |
| download | rabbitmq-server-git-3b6108f1fe79cdcbf7dcbb0dc91d0da60045c425.tar.gz | |
cosmetic, and be somewhat smarter about deciding the minimum length of q3 (now must end on a segment boundary - minor optimisation)
Diffstat (limited to 'src')
| -rw-r--r-- | src/lqueue.erl | 10 | ||||
| -rw-r--r-- | src/rabbit_variable_queue.erl | 13 |
2 files changed, 15 insertions, 8 deletions
diff --git a/src/lqueue.erl b/src/lqueue.erl index 80fb1fd9da..9f58b25017 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 2df8304683..44d7d73c27 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 -> |
