summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/rabbit_tests.erl16
-rw-r--r--src/rabbit_variable_queue.erl8
2 files changed, 15 insertions, 9 deletions
diff --git a/src/rabbit_tests.erl b/src/rabbit_tests.erl
index c6c62c0685..13aeb85188 100644
--- a/src/rabbit_tests.erl
+++ b/src/rabbit_tests.erl
@@ -1871,7 +1871,17 @@ test_queue_recover() ->
ok = supervisor:terminate_child(rabbit_sup, rabbit_amqqueue_sup),
ok = supervisor:delete_child(rabbit_sup, rabbit_amqqueue_sup),
ok = rabbit_amqqueue:start(),
- {ok, Count} = rabbit_amqqueue:with_or_die(
- QName,
- fun (Q1) -> rabbit_amqqueue:delete(Q1, false, false) end),
+ rabbit_amqqueue:with_or_die(
+ QName,
+ fun (Q1 = #amqqueue { pid = QPid1 }) ->
+ CountMinusOne = Count - 1,
+ {ok, CountMinusOne, {QName, QPid1, _AckTag, true, _Msg}} =
+ rabbit_amqqueue:basic_get(Q1, self(), false),
+ exit(QPid1, shutdown),
+ VQ1 = rabbit_variable_queue:init(QName, true, true),
+ {{_Msg1, true, _AckTag1, CountMinusOne}, VQ2} =
+ rabbit_variable_queue:fetch(true, VQ1),
+ _VQ3 = rabbit_variable_queue:delete_and_terminate(VQ2),
+ rabbit_amqqueue:internal_delete(QName)
+ end),
passed.
diff --git a/src/rabbit_variable_queue.erl b/src/rabbit_variable_queue.erl
index fca0e80ac9..ff2d57afcd 100644
--- a/src/rabbit_variable_queue.erl
+++ b/src/rabbit_variable_queue.erl
@@ -840,12 +840,8 @@ permitted_ram_index_count(#vqstate { len = Len,
q2 = Q2,
q3 = Q3,
delta = #delta { count = DeltaCount } }) ->
- AlphaBetaLen = Len - DeltaCount,
- case AlphaBetaLen == 0 of
- true -> infinity;
- false -> BetaLen = bpqueue:len(Q2) + bpqueue:len(Q3),
- BetaLen - trunc(BetaLen * BetaLen / AlphaBetaLen)
- end.
+ BetaLen = bpqueue:len(Q2) + bpqueue:len(Q3),
+ BetaLen - trunc(BetaLen * BetaLen / (Len - DeltaCount)).
should_force_index_to_disk(State = #vqstate {
ram_index_count = RamIndexCount }) ->