summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMatthias Radestock <matthias@rabbitmq.com>2012-11-23 14:59:47 +0000
committerMatthias Radestock <matthias@rabbitmq.com>2012-11-23 14:59:47 +0000
commitb872b881f803417ed32e3b31a199a237998eceff (patch)
tree79a517a62db01d80d30d4af7b5cd36d19cba2986
parent107edf1a80b9e43d960bff62310b1ecee5157499 (diff)
downloadrabbitmq-server-bug25311.tar.gz
don't evict messages from RAM when inserting them into pending_ackbug25311
-rw-r--r--src/rabbit_variable_queue.erl17
1 files changed, 7 insertions, 10 deletions
diff --git a/src/rabbit_variable_queue.erl b/src/rabbit_variable_queue.erl
index 298c68b6..1aea8a3b 100644
--- a/src/rabbit_variable_queue.erl
+++ b/src/rabbit_variable_queue.erl
@@ -1232,17 +1232,15 @@ maybe_write_to_disk(ForceMsg, ForceIndex, MsgStatus,
%% Internal gubbins for acks
%%----------------------------------------------------------------------------
-record_pending_ack(#msg_status { seq_id = SeqId,
- msg_on_disk = MsgOnDisk } = MsgStatus,
+record_pending_ack(#msg_status { seq_id = SeqId, msg = Msg } = MsgStatus,
State = #vqstate { pending_ack = PA,
ram_ack_index = RAI,
ack_in_counter = AckInCount}) ->
- {AckEntry, RAI1} =
- case MsgOnDisk of
- true -> {m(trim_msg_status(MsgStatus)), RAI};
- false -> {MsgStatus, gb_sets:insert(SeqId, RAI)}
- end,
- State #vqstate { pending_ack = gb_trees:insert(SeqId, AckEntry, PA),
+ RAI1 = case Msg of
+ undefined -> RAI;
+ _ -> gb_sets:insert(SeqId, RAI)
+ end,
+ State #vqstate { pending_ack = gb_trees:insert(SeqId, MsgStatus, PA),
ram_ack_index = RAI1,
ack_in_counter = AckInCount + 1}.
@@ -1494,8 +1492,7 @@ limit_ram_acks(Quota, State = #vqstate { pending_ack = PA,
{Quota, State};
false ->
{SeqId, RAI1} = gb_sets:take_largest(RAI),
- MsgStatus = #msg_status { is_persistent = false} =
- gb_trees:get(SeqId, PA),
+ MsgStatus = gb_trees:get(SeqId, PA),
{MsgStatus1, State1} =
maybe_write_to_disk(true, false, MsgStatus, State),
PA1 = gb_trees:update(SeqId, m(trim_msg_status(MsgStatus1)), PA),