summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorMatthew Sackman <matthew@lshift.net>2010-05-19 13:54:53 +0100
committerMatthew Sackman <matthew@lshift.net>2010-05-19 13:54:53 +0100
commit645ba16b338338005902259890eebbb4fec36771 (patch)
tree619144c61548b0335163fa5f37381b15b48ae2f3 /src
parent82d04bc937324d87ef0859ccce4ccb939d76a36f (diff)
parent204a8cd94600e5dc9011b01b5f4f67cd7ad791a9 (diff)
downloadrabbitmq-server-git-645ba16b338338005902259890eebbb4fec36771.tar.gz
Merging heads
Diffstat (limited to 'src')
-rw-r--r--src/rabbit_queue_index.erl39
1 files changed, 15 insertions, 24 deletions
diff --git a/src/rabbit_queue_index.erl b/src/rabbit_queue_index.erl
index 67bf9f5236..acd13a0640 100644
--- a/src/rabbit_queue_index.erl
+++ b/src/rabbit_queue_index.erl
@@ -241,8 +241,8 @@ init(Name, MsgStoreRecovered, ContainsCheckFun) ->
end, {Segments, 0}, all_segment_nums(State1));
true ->
%% At this stage, we will only know about files that
- %% were loaded during journal loading, They *will* have
- %% correct ack and pub counts, but for all remaining
+ %% were loaded during journal loading, They *will*
+ %% have correct unacked counts, but for all remaining
%% segments, if they're not in the Segments store then
%% we need to add them and populate with saved data.
SegmentDictTerms =
@@ -590,23 +590,18 @@ flush_journal(State = #qistate { dirty_count = 0 }) ->
flush_journal(State = #qistate { segments = Segments }) ->
Segments1 =
segment_fold(
- fun (_Seg, #segment { journal_entries = JEntries,
- unacked = UnackedCount } = Segment,
- SegmentsN) ->
- case UnackedCount of
- 0 -> ok = delete_segment(Segment),
- SegmentsN;
- _ -> segment_store(
- append_journal_to_segment(Segment, JEntries),
- SegmentsN)
- end
+ fun (_Seg, #segment { unacked = 0 } = Segment, SegmentsN) ->
+ ok = delete_segment(Segment),
+ SegmentsN;
+ (_Seg, #segment {} = Segment, SegmentsN) ->
+ segment_store(append_journal_to_segment(Segment), SegmentsN)
end, segments_new(), Segments),
{JournalHdl, State1} =
get_journal_handle(State #qistate { segments = Segments1 }),
ok = file_handle_cache:clear(JournalHdl),
State1 #qistate { dirty_count = 0 }.
-append_journal_to_segment(Segment, JEntries) ->
+append_journal_to_segment(#segment { journal_entries = JEntries } = Segment) ->
case array:sparse_size(JEntries) of
0 -> Segment;
_ -> {Hdl, Segment1} = get_segment_handle(Segment),
@@ -642,15 +637,12 @@ load_journal(State) ->
%% counts here are purely from the segment itself.
{SegEntries, UnackedCountInSeg, Segment1} =
load_segment(true, Segment),
- %% Removed counts here are the number of pubs and
- %% acks that are duplicates - i.e. found in both the
- %% segment and journal.
{JEntries1, UnackedCountDuplicates} =
journal_minus_segment(JEntries, SegEntries),
Segment1 #segment { journal_entries = JEntries1,
- unacked = UnackedCountInJournal +
- UnackedCountInSeg -
- UnackedCountDuplicates }
+ unacked = (UnackedCountInJournal +
+ UnackedCountInSeg -
+ UnackedCountDuplicates) }
end, Segments),
State2 #qistate { segments = Segments1 }.
@@ -724,12 +716,11 @@ get_segment_handle(Segment = #segment { handle = Hdl }) ->
{Hdl, Segment}.
segment_new(Seg, Dir) ->
- #segment { unacked = 0,
- handle = undefined,
+ #segment { unacked = 0,
+ handle = undefined,
journal_entries = array_new(),
- path = seg_num_to_path(Dir, Seg),
- num = Seg
- }.
+ path = seg_num_to_path(Dir, Seg),
+ num = Seg }.
segment_find_or_new(Seg, Dir, Segments) ->
case segment_find(Seg, Segments) of