summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMatthew Sackman <matthew@lshift.net>2009-10-14 14:19:58 +0100
committerMatthew Sackman <matthew@lshift.net>2009-10-14 14:19:58 +0100
commit9dfa3c6b67c7352407122f05f257adcaee842965 (patch)
treeea5f68ce7c5f04667e41002058dd10c382e3f3bf
parent10bd87cb3bf44d5604c1566bde622dc38a69cf30 (diff)
downloadrabbitmq-server-git-9dfa3c6b67c7352407122f05f257adcaee842965.tar.gz
slightly more likely to work
-rw-r--r--src/rabbit_queue_index.erl9
1 files changed, 5 insertions, 4 deletions
diff --git a/src/rabbit_queue_index.erl b/src/rabbit_queue_index.erl
index 4307399f74..10773c0cef 100644
--- a/src/rabbit_queue_index.erl
+++ b/src/rabbit_queue_index.erl
@@ -80,6 +80,7 @@
-define(SEGMENT_EXTENSION, ".idx").
-define(REL_SEQ_BITS, 14).
+-define(REL_SEQ_BITS_BYTE_ALIGNED, (?REL_SEQ_BITS + (?REL_SEQ_BITS rem 8))).
-define(SEGMENT_ENTRIES_COUNT, 16384). %% trunc(math:pow(2,?REL_SEQ_BITS))).
%% seq only is binary 00 followed by 14 bits of rel seq id
@@ -505,18 +506,18 @@ load_segment(SegNum, SegPath, JAckDict) ->
load_segment_entries(SegNum, Hdl, {SDict, AckCount, HighRelSeq}) ->
case file:read(Hdl, 1) of
{ok, <<?REL_SEQ_ONLY_PREFIX:?REL_SEQ_ONLY_PREFIX_BITS,
- MSB>>} ->
+ MSB:(8-?REL_SEQ_ONLY_PREFIX_BITS)>>} ->
{ok, LSB} = file:read(Hdl, ?REL_SEQ_ONLY_ENTRY_LENGTH_BYTES - 1),
- <<RelSeq:?REL_SEQ_BITS>> = <<MSB, LSB/binary>>,
+ <<RelSeq:?REL_SEQ_BITS_BYTE_ALIGNED>> = <<MSB, LSB/binary>>,
{SDict1, AckCount1} = deliver_or_ack_msg(SDict, AckCount, RelSeq),
load_segment_entries(SegNum, Hdl, {SDict1, AckCount1, HighRelSeq});
{ok, <<?PUBLISH_PREFIX:?PUBLISH_PREFIX_BITS,
- IsPersistentNum:1, MSB>>} ->
+ IsPersistentNum:1, MSB:(7-?PUBLISH_PREFIX_BITS)>>} ->
%% because we specify /binary, and binaries are complete
%% bytes, the size spec is in bytes, not bits.
{ok, <<LSB:1/binary, MsgId:?MSG_ID_BYTES/binary>>} =
file:read(Hdl, ?PUBLISH_RECORD_LENGTH_BYTES - 1),
- <<RelSeq:?REL_SEQ_BITS>> = <<MSB, LSB/binary>>,
+ <<RelSeq:?REL_SEQ_BITS_BYTE_ALIGNED>> = <<MSB, LSB/binary>>,
HighRelSeq1 = lists:max([RelSeq, HighRelSeq]),
load_segment_entries(
SegNum, Hdl, {dict:store(RelSeq, {MsgId, false,