summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorMatthias Radestock <matthias@lshift.net>2010-05-15 18:23:36 +0100
committerMatthias Radestock <matthias@lshift.net>2010-05-15 18:23:36 +0100
commit932a2e493670b85f536fa1b5b0fdc7e0b1168ee0 (patch)
tree41fbae45cb4544c0311b9be7dfc3b353a3d681d3 /src
parent998ced84c1b0eb4d1531806a95bfdeaa84b7dd10 (diff)
downloadrabbitmq-server-git-932a2e493670b85f536fa1b5b0fdc7e0b1168ee0.tar.gz
refactor: more concise journal_plus_segment
Diffstat (limited to 'src')
-rw-r--r--src/rabbit_queue_index.erl50
1 files changed, 23 insertions, 27 deletions
diff --git a/src/rabbit_queue_index.erl b/src/rabbit_queue_index.erl
index c1e7fed74f..d793ffca28 100644
--- a/src/rabbit_queue_index.erl
+++ b/src/rabbit_queue_index.erl
@@ -865,38 +865,34 @@ journal_plus_segment(JEntries, SegEntries) ->
undefined -> not_found;
SObj = {_, _, _} -> SObj
end,
- journal_plus_segment(JObj, SegEntry, RelSeq, SegEntriesOut)
+ case journal_plus_segment1(JObj, SegEntry) of
+ undefined -> array:reset(RelSeq, SegEntriesOut);
+ Obj -> array:set(RelSeq, Obj, SegEntriesOut)
+ end
end, SegEntries, JEntries).
%% Here, the Out is the Seg Array which we may be adding to (for
%% items only in the journal), modifying (bits in both), or erasing
%% from (ack in journal, not segment).
-journal_plus_segment({{_Guid, _IsPersistent}, no_del, no_ack} = Obj,
- not_found,
- RelSeq, Out) ->
- array:set(RelSeq, Obj, Out);
-journal_plus_segment({{_Guid, _IsPersistent}, del, no_ack} = Obj,
- not_found,
- RelSeq, Out) ->
- array:set(RelSeq, Obj, Out);
-journal_plus_segment({{_Guid, _IsPersistent}, del, ack},
- not_found,
- RelSeq, Out) ->
- array:reset(RelSeq, Out);
-
-journal_plus_segment({no_pub, del, no_ack},
- {{_Guid, _IsPersistent} = Pub, no_del, no_ack},
- RelSeq, Out) ->
- array:set(RelSeq, {Pub, del, no_ack}, Out);
-
-journal_plus_segment({no_pub, del, ack},
- {{_Guid, _IsPersistent}, no_del, no_ack},
- RelSeq, Out) ->
- array:reset(RelSeq, Out);
-journal_plus_segment({no_pub, no_del, ack},
- {{_Guid, _IsPersistent}, del, no_ack},
- RelSeq, Out) ->
- array:reset(RelSeq, Out).
+journal_plus_segment1({{_Guid, _IsPersistent}, no_del, no_ack} = Obj,
+ not_found) ->
+ Obj;
+journal_plus_segment1({{_Guid, _IsPersistent}, del, no_ack} = Obj,
+ not_found) ->
+ Obj;
+journal_plus_segment1({{_Guid, _IsPersistent}, del, ack},
+ not_found) ->
+ undefined;
+
+journal_plus_segment1({no_pub, del, no_ack},
+ {{_Guid, _IsPersistent} = Pub, no_del, no_ack}) ->
+ {Pub, del, no_ack};
+journal_plus_segment1({no_pub, del, ack},
+ {{_Guid, _IsPersistent}, no_del, no_ack}) ->
+ undefined;
+journal_plus_segment1({no_pub, no_del, ack},
+ {{_Guid, _IsPersistent}, del, no_ack}) ->
+ undefined.
%% Remove from the journal entries for a segment, items that are
%% duplicates of entries found in the segment itself. Used on start up