summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorEmile Joubert <emile@rabbitmq.com>2013-06-06 12:52:49 +0100
committerEmile Joubert <emile@rabbitmq.com>2013-06-06 12:52:49 +0100
commit202a36f38bf480d4833f4f9847d03006c8d00952 (patch)
tree213694ed241164a5d362e9548a286410b983f910
parent0b0da3203790cb851931a167e007f59c608d586a (diff)
parent79b05bef4e1eeed3db0f222fd94fad78d09c4135 (diff)
downloadrabbitmq-server-202a36f38bf480d4833f4f9847d03006c8d00952.tar.gz
Merged bug25576 into stable
-rw-r--r--src/rabbit_queue_index.erl13
1 files changed, 12 insertions, 1 deletions
diff --git a/src/rabbit_queue_index.erl b/src/rabbit_queue_index.erl
index ea70208f..9a2d2a4a 100644
--- a/src/rabbit_queue_index.erl
+++ b/src/rabbit_queue_index.erl
@@ -1022,7 +1022,18 @@ journal_minus_segment1({no_pub, del, ack}, {?PUB, no_del, no_ack}) ->
journal_minus_segment1({no_pub, del, ack}, {?PUB, del, no_ack}) ->
{{no_pub, no_del, ack}, 0};
journal_minus_segment1({no_pub, del, ack}, {?PUB, del, ack}) ->
- {undefined, -1}.
+ {undefined, -1};
+
+%% Missing segment. If flush_journal/1 is interrupted after deleting
+%% the segment but before truncating the journal we can get these
+%% cases: a delivery and an acknowledgement in the journal, or just an
+%% acknowledgement in the journal, but with no segment. In both cases
+%% we have really forgotten the message; so ignore what's in the
+%% journal.
+journal_minus_segment1({no_pub, no_del, ack}, undefined) ->
+ {undefined, 0};
+journal_minus_segment1({no_pub, del, ack}, undefined) ->
+ {undefined, 0}.
%%----------------------------------------------------------------------------
%% upgrade