summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMatthew Sackman <matthew@lshift.net>2009-12-03 15:59:00 +0000
committerMatthew Sackman <matthew@lshift.net>2009-12-03 15:59:00 +0000
commit9f617991fe0a150264795803388b76ec5493b143 (patch)
tree499eaf52616a6487180a5fa9e211f4e16c43364c
parent77f9e0f3ad3583962a42c9617764ed26a7227d60 (diff)
downloadrabbitmq-server-git-9f617991fe0a150264795803388b76ec5493b143.tar.gz
If I write it this way then it saves code and is maybe slightly faster. maybe.
-rw-r--r--src/rabbit_queue_index.erl52
1 files changed, 22 insertions, 30 deletions
diff --git a/src/rabbit_queue_index.erl b/src/rabbit_queue_index.erl
index 829b03aa18..5ae5c77322 100644
--- a/src/rabbit_queue_index.erl
+++ b/src/rabbit_queue_index.erl
@@ -249,29 +249,32 @@ sync_seq_ids(_SeqIds, State = #qistate { journal_handle = JournalHdl }) ->
flush_journal(State = #qistate { dirty_count = 0 }) ->
State;
-flush_journal(State = #qistate { segments = Segments }) ->
+flush_journal(State = #qistate { segments = Segments, dir = Dir }) ->
Segments1 =
segment_fold(
fun (_Seg, #segment { journal_entries = JEntries, pubs = PubCount,
acks = AckCount } = Segment, SegmentsN) ->
case PubCount > 0 andalso PubCount == AckCount of
true ->
- segment_erase(delete_segment(Segment), SegmentsN);
+ ok = delete_segment(Segment),
+ SegmentsN;
false ->
- case 0 == dict:size(JEntries) of
- true ->
- SegmentsN;
- false ->
- {Hdl, Segment1} = get_segment_handle(Segment),
- dict:fold(fun write_entry_to_segment/3,
- Hdl, JEntries),
- ok = file_handle_cache:sync(Hdl),
- segment_store(
- Segment1 #segment { journal_entries =
- dict:new() }, SegmentsN)
- end
+ Segment1 =
+ case 0 == dict:size(JEntries) of
+ true ->
+ SegmentsN;
+ false ->
+ {Hdl, Segment2} =
+ get_segment_handle(Segment),
+ dict:fold(fun write_entry_to_segment/3,
+ Hdl, JEntries),
+ ok = file_handle_cache:sync(Hdl),
+ Segment2 #segment { journal_entries =
+ dict:new() }
+ end,
+ segment_store(Segment1, SegmentsN)
end
- end, Segments, Segments),
+ end, segment_new(Dir), Segments),
{JournalHdl, State1} =
get_journal_handle(State #qistate { segments = Segments1 }),
ok = file_handle_cache:clear(JournalHdl),
@@ -428,11 +431,10 @@ seg_num_to_path(Dir, Seg) ->
SegName = integer_to_list(Seg),
filename:join(Dir, SegName ++ ?SEGMENT_EXTENSION).
-delete_segment(Segment = #segment { handle = undefined }) ->
- Segment;
-delete_segment(Segment = #segment { handle = Hdl }) ->
- ok = file_handle_cache:delete(Hdl),
- Segment #segment { handle = undefined }.
+delete_segment(#segment { handle = undefined }) ->
+ ok;
+delete_segment(#segment { handle = Hdl }) ->
+ ok = file_handle_cache:delete(Hdl).
detect_clean_shutdown(Dir) ->
case file:delete(filename:join(Dir, ?CLEAN_FILENAME)) of
@@ -521,16 +523,6 @@ segment_fetch_keys({Segments, CachedSegments, _Dir}) ->
lists:map(fun (Segment) -> Segment#segment.num end, CachedSegments) ++
dict:fetch_keys(Segments).
-segment_erase(#segment { handle = undefined, num = Num },
- {Segments, [#segment { num = Num } | Rest], Dir}) ->
- {Segments, Rest, Dir}; %% 1 or (2, matches head)
-segment_erase(#segment { handle = undefined, num = Num },
- {Segments, [Head, #segment { num = Num }], Dir}) ->
- {Segments, [Head], Dir}; %% 2, matches tail
-segment_erase(#segment { handle = undefined, num = Num },
- {Segments, CachedSegments, Dir}) ->
- {dict:erase(Num, Segments), CachedSegments, Dir}.
-
segment_new(Dir) ->
{dict:new(), [], Dir}.