summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMatthew Sackman <matthew@lshift.net>2009-06-24 13:16:47 +0100
committerMatthew Sackman <matthew@lshift.net>2009-06-24 13:16:47 +0100
commit681a2deadac15035531000daba40964e67c45ae7 (patch)
tree54a9575e775c754424af4be29eebc61e2f3c82a6
parentcb6cc18ed1abda641025bfb5ff5eba907f99bac2 (diff)
downloadrabbitmq-server-git-681a2deadac15035531000daba40964e67c45ae7.tar.gz
memory size tracking was wrong on startup in disk mode for mixed_queue (and actually for mixed mode too, given that mixed mode starts up in disk mode, then converts, which maintains the same size).
-rw-r--r--src/rabbit_mixed_queue.erl19
1 files changed, 9 insertions, 10 deletions
diff --git a/src/rabbit_mixed_queue.erl b/src/rabbit_mixed_queue.erl
index fed95da3eb..88077f100d 100644
--- a/src/rabbit_mixed_queue.erl
+++ b/src/rabbit_mixed_queue.erl
@@ -186,11 +186,11 @@ to_mixed_mode(TxnMessages, State =
purge_non_persistent_messages(State = #mqstate { mode = disk, queue = Q,
is_durable = IsDurable,
- memory_size = QSize }) ->
+ memory_size = 0 }) ->
%% iterate through the content on disk, ack anything which isn't
%% persistent, accumulate everything else that is persistent and
%% requeue it
- {Acks, Requeue, Length, ASize} =
+ {Acks, Requeue, Length, QSize} =
deliver_all_messages(Q, IsDurable, [], [], 0, 0),
ok = if Requeue == [] -> ok;
true ->
@@ -199,22 +199,21 @@ purge_non_persistent_messages(State = #mqstate { mode = disk, queue = Q,
ok = if Acks == [] -> ok;
true -> rabbit_disk_queue:ack(Q, Acks)
end,
- {ok, State #mqstate { length = Length, memory_size = QSize - ASize }}.
+ {ok, State #mqstate { length = Length, memory_size = QSize }}.
-deliver_all_messages(Q, IsDurable, Acks, Requeue, Length, ASize) ->
+deliver_all_messages(Q, IsDurable, Acks, Requeue, Length, QSize) ->
case rabbit_disk_queue:deliver(Q) of
- empty -> {Acks, Requeue, Length, ASize};
+ empty -> {Acks, Requeue, Length, QSize};
{Msg = #basic_message { is_persistent = IsPersistent },
_Size, IsDelivered, AckTag, _Remaining} ->
OnDisk = IsPersistent andalso IsDurable,
- {Acks1, Requeue1, Length1, ASize1} =
+ {Acks1, Requeue1, Length1, QSize1} =
if OnDisk -> { Acks,
[{AckTag, {next, IsDelivered}} | Requeue],
- Length + 1, ASize };
- true -> { [AckTag | Acks], Requeue, Length,
- ASize + size_of_message(Msg) }
+ Length + 1, QSize + size_of_message(Msg) };
+ true -> { [AckTag | Acks], Requeue, Length, QSize }
end,
- deliver_all_messages(Q, IsDurable, Acks1, Requeue1, Length1, ASize1)
+ deliver_all_messages(Q, IsDurable, Acks1, Requeue1, Length1, QSize1)
end.
publish(Msg, State = #mqstate { mode = disk, queue = Q, length = Length,