diff options
| author | Matthew Sackman <matthew@lshift.net> | 2009-06-24 13:16:47 +0100 |
|---|---|---|
| committer | Matthew Sackman <matthew@lshift.net> | 2009-06-24 13:16:47 +0100 |
| commit | 681a2deadac15035531000daba40964e67c45ae7 (patch) | |
| tree | 54a9575e775c754424af4be29eebc61e2f3c82a6 | |
| parent | cb6cc18ed1abda641025bfb5ff5eba907f99bac2 (diff) | |
| download | rabbitmq-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.erl | 19 |
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, |
