diff options
| author | Matthew Sackman <matthew@lshift.net> | 2009-10-14 14:19:58 +0100 |
|---|---|---|
| committer | Matthew Sackman <matthew@lshift.net> | 2009-10-14 14:19:58 +0100 |
| commit | 9dfa3c6b67c7352407122f05f257adcaee842965 (patch) | |
| tree | ea5f68ce7c5f04667e41002058dd10c382e3f3bf | |
| parent | 10bd87cb3bf44d5604c1566bde622dc38a69cf30 (diff) | |
| download | rabbitmq-server-git-9dfa3c6b67c7352407122f05f257adcaee842965.tar.gz | |
slightly more likely to work
| -rw-r--r-- | src/rabbit_queue_index.erl | 9 |
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, |
