Skip to content

Commit 2eec791

Browse files
Merge branch 'stable'
2 parents ae63a44 + 1393a45 commit 2eec791

File tree

1 file changed

+13
-16
lines changed

1 file changed

+13
-16
lines changed

src/rabbit_variable_queue.erl

Lines changed: 13 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -695,8 +695,7 @@ ack(AckTags, State) ->
695695
{accumulate_ack(MsgStatus, Acc), State3}
696696
end, {accumulate_ack_init(), State}, AckTags),
697697
IndexState1 = rabbit_queue_index:ack(IndexOnDiskSeqIds, IndexState),
698-
[ok = msg_store_remove(MSCState, IsPersistent, MsgIds)
699-
|| {IsPersistent, MsgIds} <- orddict:to_list(MsgIdsByStore)],
698+
remove_msgs_by_id(MsgIdsByStore, MSCState),
700699
{lists:reverse(AllMsgIds),
701700
a(State1 #vqstate { index_state = IndexState1,
702701
ack_out_counter = AckOutCount + length(AckTags) })}.
@@ -1122,7 +1121,7 @@ maybe_write_delivered(false, _SeqId, IndexState) ->
11221121
maybe_write_delivered(true, SeqId, IndexState) ->
11231122
rabbit_queue_index:deliver([SeqId], IndexState).
11241123

1125-
betas_from_index_entries(List, TransientThreshold, RPA, DPA, QPA, DelsAndAcksFun, State) ->
1124+
betas_from_index_entries(List, TransientThreshold, DelsAndAcksFun, State) ->
11261125
{Filtered, Delivers, Acks, RamReadyCount, RamBytes} =
11271126
lists:foldr(
11281127
fun ({_MsgOrId, SeqId, _MsgProps, IsPersistent, IsDelivered} = M,
@@ -1134,9 +1133,7 @@ betas_from_index_entries(List, TransientThreshold, RPA, DPA, QPA, DelsAndAcksFun
11341133
false -> MsgStatus = m(beta_msg_status(M)),
11351134
HaveMsg = msg_in_ram(MsgStatus),
11361135
Size = msg_size(MsgStatus),
1137-
case (gb_trees:is_defined(SeqId, RPA) orelse
1138-
gb_trees:is_defined(SeqId, DPA) orelse
1139-
gb_trees:is_defined(SeqId, QPA)) of
1136+
case is_msg_in_pending_acks(SeqId, State) of
11401137
false -> {?QUEUE:in_r(MsgStatus, Filtered1),
11411138
Delivers1, Acks1,
11421139
RRC + one_if(HaveMsg),
@@ -1151,6 +1148,13 @@ betas_from_index_entries(List, TransientThreshold, RPA, DPA, QPA, DelsAndAcksFun
11511148
%% been stored in the QI, thus the message must have been in
11521149
%% qi_pending_ack, thus it must already have been in RAM.
11531150

1151+
is_msg_in_pending_acks(SeqId, #vqstate { ram_pending_ack = RPA,
1152+
disk_pending_ack = DPA,
1153+
qi_pending_ack = QPA }) ->
1154+
(gb_trees:is_defined(SeqId, RPA) orelse
1155+
gb_trees:is_defined(SeqId, DPA) orelse
1156+
gb_trees:is_defined(SeqId, QPA)).
1157+
11541158
expand_delta(SeqId, ?BLANK_DELTA_PATTERN(X)) ->
11551159
d(#delta { start_seq_id = SeqId, count = 1, end_seq_id = SeqId + 1 });
11561160
expand_delta(SeqId, #delta { start_seq_id = StartSeqId,
@@ -1436,9 +1440,7 @@ remove_queue_entries(Q, DelsAndAcksFun,
14361440
{MsgIdsByStore, Delivers, Acks, State1} =
14371441
?QUEUE:foldl(fun remove_queue_entries1/2,
14381442
{orddict:new(), [], [], State}, Q),
1439-
ok = orddict:fold(fun (IsPersistent, MsgIds, ok) ->
1440-
msg_store_remove(MSCState, IsPersistent, MsgIds)
1441-
end, ok, MsgIdsByStore),
1443+
remove_msgs_by_id(MsgIdsByStore, MSCState),
14421444
DelsAndAcksFun(Delivers, Acks, State1).
14431445

14441446
remove_queue_entries1(
@@ -1886,9 +1888,7 @@ next({delta, #delta{start_seq_id = SeqId,
18861888
next({delta, Delta, [], State}, IndexState) ->
18871889
next({delta, Delta, State}, IndexState);
18881890
next({delta, Delta, [{_, SeqId, _, _, _} = M | Rest], State}, IndexState) ->
1889-
case (gb_trees:is_defined(SeqId, State#vqstate.ram_pending_ack) orelse
1890-
gb_trees:is_defined(SeqId, State#vqstate.disk_pending_ack) orelse
1891-
gb_trees:is_defined(SeqId, State#vqstate.qi_pending_ack)) of
1891+
case is_msg_in_pending_acks(SeqId, State) of
18921892
false -> Next = {delta, Delta, Rest, State},
18931893
{value, beta_msg_status(M), false, Next, IndexState};
18941894
true -> next({delta, Delta, Rest, State}, IndexState)
@@ -2060,9 +2060,6 @@ maybe_deltas_to_betas(DelsAndAcksFun,
20602060
index_state = IndexState,
20612061
ram_msg_count = RamMsgCount,
20622062
ram_bytes = RamBytes,
2063-
ram_pending_ack = RPA,
2064-
disk_pending_ack = DPA,
2065-
qi_pending_ack = QPA,
20662063
disk_read_count = DiskReadCount,
20672064
transient_threshold = TransientThreshold }) ->
20682065
#delta { start_seq_id = DeltaSeqId,
@@ -2075,7 +2072,7 @@ maybe_deltas_to_betas(DelsAndAcksFun,
20752072
IndexState),
20762073
{Q3a, RamCountsInc, RamBytesInc, State1} =
20772074
betas_from_index_entries(List, TransientThreshold,
2078-
RPA, DPA, QPA, DelsAndAcksFun,
2075+
DelsAndAcksFun,
20792076
State #vqstate { index_state = IndexState1 }),
20802077
State2 = State1 #vqstate { ram_msg_count = RamMsgCount + RamCountsInc,
20812078
ram_bytes = RamBytes + RamBytesInc,

0 commit comments

Comments
 (0)