diff options
Diffstat (limited to 'src/rabbit_variable_queue.erl')
-rw-r--r-- | src/rabbit_variable_queue.erl | 13 |
1 files changed, 10 insertions, 3 deletions
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 -> |