summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSimon MacMullen <simon@rabbitmq.com>2014-12-11 16:17:57 +0000
committerSimon MacMullen <simon@rabbitmq.com>2014-12-11 16:17:57 +0000
commite4116d4ace857b190b38feee25d31bda06bb07f5 (patch)
treea40a32a8219daee2987a15d6a0ecae342f8393e9
parenteba8bf97303221e65f0e6712f075f536ed6ac6d3 (diff)
downloadrabbitmq-server-e4116d4ace857b190b38feee25d31bda06bb07f5.tar.gz
Backport the part of 505868f421db which fixes ram_bytes when requeueing an in-memory message to delta, and do the same for beta.
-rw-r--r--src/rabbit_variable_queue.erl13
1 files changed, 11 insertions, 2 deletions
diff --git a/src/rabbit_variable_queue.erl b/src/rabbit_variable_queue.erl
index d076b534..6415eb6d 100644
--- a/src/rabbit_variable_queue.erl
+++ b/src/rabbit_variable_queue.erl
@@ -1485,7 +1485,12 @@ publish_alpha(MsgStatus, State) ->
publish_beta(MsgStatus, State) ->
{MsgStatus1, State1} = maybe_write_to_disk(true, false, MsgStatus, State),
- {m(trim_msg_status(MsgStatus1)), State1}.
+ MsgStatus2 = m(trim_msg_status(MsgStatus1)),
+ case {MsgStatus1#msg_status.msg =:= undefined,
+ MsgStatus2#msg_status.msg =:= undefined} of
+ {false, true} -> {MsgStatus2, upd_ram_bytes(-1, MsgStatus, State1)};
+ _ -> {MsgStatus2, State1}
+ end.
%% Rebuild queue, inserting sequence ids to maintain ordering
queue_merge(SeqIds, Q, MsgIds, Limit, PubFun, State) ->
@@ -1521,8 +1526,12 @@ delta_merge(SeqIds, Delta, MsgIds, State) ->
msg_from_pending_ack(SeqId, State0),
{_MsgStatus, State2} =
maybe_write_to_disk(true, true, MsgStatus, State1),
+ State3 = case MsgStatus#msg_status.msg of
+ undefined -> State2;
+ _ -> upd_ram_bytes(-1, MsgStatus, State2)
+ end,
{expand_delta(SeqId, Delta0), [MsgId | MsgIds0],
- upd_bytes(1, -1, MsgStatus, State2)}
+ upd_bytes(1, -1, MsgStatus, State3)}
end, {Delta, MsgIds, State}, SeqIds).
%% Mostly opposite of record_pending_ack/2