diff options
Diffstat (limited to 'src')
| -rw-r--r-- | src/rabbit_queue_index.erl | 13 | ||||
| -rw-r--r-- | src/rabbit_tests.erl | 18 | ||||
| -rw-r--r-- | src/rabbit_variable_queue.erl | 8 |
3 files changed, 15 insertions, 24 deletions
diff --git a/src/rabbit_queue_index.erl b/src/rabbit_queue_index.erl index 241766b823..36dd5c6d1c 100644 --- a/src/rabbit_queue_index.erl +++ b/src/rabbit_queue_index.erl @@ -32,9 +32,8 @@ -module(rabbit_queue_index). -export([init/3, terminate/2, terminate_and_erase/1, publish/4, - deliver/2, ack/2, sync/2, flush/1, - read_segment_entries/2, next_segment_boundary/1, segment_size/0, - find_lowest_seq_id_seg_and_next_seq_id/1, recover/1]). + deliver/2, ack/2, sync/2, flush/1, read_segment_entries/2, + next_segment_boundary/1, segment_size/0, bounds/1, recover/1]). -define(CLEAN_FILENAME, "clean.dot"). @@ -198,7 +197,7 @@ {[{guid(), seq_id(), boolean(), boolean()}], qistate()}). -spec(next_segment_boundary/1 :: (seq_id()) -> seq_id()). -spec(segment_size/0 :: () -> non_neg_integer()). --spec(find_lowest_seq_id_seg_and_next_seq_id/1 :: (qistate()) -> +-spec(bounds/1 :: (qistate()) -> {non_neg_integer(), non_neg_integer(), qistate()}). -spec(recover/1 :: ([queue_name()]) -> {[[any()]], startup_fun_state()}). @@ -347,7 +346,7 @@ next_segment_boundary(SeqId) -> segment_size() -> ?SEGMENT_ENTRY_COUNT. -find_lowest_seq_id_seg_and_next_seq_id(State) -> +bounds(State) -> SegNums = all_segment_nums(State), %% We don't want the lowest seq_id, merely the seq_id of the start %% of the lowest segment. That seq_id may not actually exist, but @@ -358,13 +357,13 @@ find_lowest_seq_id_seg_and_next_seq_id(State) -> %% next segment: it makes life much easier. %% SegNums is sorted, ascending. - {LowSeqIdSeg, NextSeqId} = + {LowSeqId, NextSeqId} = case SegNums of [] -> {0, 0}; [MinSeg|_] -> {reconstruct_seq_id(MinSeg, 0), reconstruct_seq_id(1 + lists:last(SegNums), 0)} end, - {LowSeqIdSeg, NextSeqId, State}. + {LowSeqId, NextSeqId, State}. recover(DurableQueues) -> DurableDict = dict:from_list([ {queue_name_to_dir_name(Queue), Queue} || diff --git a/src/rabbit_tests.erl b/src/rabbit_tests.erl index 97d74fc93f..f69a9dc594 100644 --- a/src/rabbit_tests.erl +++ b/src/rabbit_tests.erl @@ -1455,11 +1455,9 @@ test_queue_index() -> SeqIdsA = lists:seq(0,9999), SeqIdsB = lists:seq(10000,19999), {0, _Terms, Qi0} = test_queue_init(), - {0, 0, Qi1} = - rabbit_queue_index:find_lowest_seq_id_seg_and_next_seq_id(Qi0), + {0, 0, Qi1} = rabbit_queue_index:bounds(Qi0), {Qi2, SeqIdsGuidsA} = queue_index_publish(SeqIdsA, false, Qi1), - {0, SegmentSize, Qi3} = - rabbit_queue_index:find_lowest_seq_id_seg_and_next_seq_id(Qi2), + {0, SegmentSize, Qi3} = rabbit_queue_index:bounds(Qi2), {ReadA, Qi4} = rabbit_queue_index:read_segment_entries(0, Qi3), ok = verify_read_with_published(false, false, ReadA, lists:reverse(SeqIdsGuidsA)), @@ -1469,11 +1467,9 @@ test_queue_index() -> ok = rabbit_variable_queue:start([test_queue()]), %% should get length back as 0, as all the msgs were transient {0, _Terms1, Qi6} = test_queue_init(), - {0, 0, Qi7} = - rabbit_queue_index:find_lowest_seq_id_seg_and_next_seq_id(Qi6), + {0, 0, Qi7} = rabbit_queue_index:bounds(Qi6), {Qi8, SeqIdsGuidsB} = queue_index_publish(SeqIdsB, true, Qi7), - {0, TwoSegs, Qi9} = - rabbit_queue_index:find_lowest_seq_id_seg_and_next_seq_id(Qi8), + {0, TwoSegs, Qi9} = rabbit_queue_index:bounds(Qi8), {ReadB, Qi10} = rabbit_queue_index:read_segment_entries(0, Qi9), ok = verify_read_with_published(false, true, ReadB, lists:reverse(SeqIdsGuidsB)), @@ -1483,8 +1479,7 @@ test_queue_index() -> %% should get length back as 10000 LenB = length(SeqIdsB), {LenB, _Terms2, Qi12} = test_queue_init(), - {0, TwoSegs, Qi13} = - rabbit_queue_index:find_lowest_seq_id_seg_and_next_seq_id(Qi12), + {0, TwoSegs, Qi13} = rabbit_queue_index:bounds(Qi12), Qi14 = queue_index_deliver(SeqIdsB, Qi13), {ReadC, Qi15} = rabbit_queue_index:read_segment_entries(0, Qi14), ok = verify_read_with_published(true, true, ReadC, @@ -1492,8 +1487,7 @@ test_queue_index() -> Qi16 = rabbit_queue_index:ack(SeqIdsB, Qi15), Qi17 = queue_index_flush(Qi16), %% Everything will have gone now because #pubs == #acks - {0, 0, Qi18} = - rabbit_queue_index:find_lowest_seq_id_seg_and_next_seq_id(Qi17), + {0, 0, Qi18} = rabbit_queue_index:bounds(Qi17), _Qi19 = rabbit_queue_index:terminate([], Qi18), ok = stop_msg_store(), ok = rabbit_variable_queue:start([test_queue()]), diff --git a/src/rabbit_variable_queue.erl b/src/rabbit_variable_queue.erl index 079c14eb9a..eb0f45c120 100644 --- a/src/rabbit_variable_queue.erl +++ b/src/rabbit_variable_queue.erl @@ -283,8 +283,7 @@ init(QueueName, IsDurable, _Recover) -> end, {DeltaCount, Terms, IndexState} = rabbit_queue_index:init(QueueName, MsgStoreRecovered, ContainsCheckFun), - {DeltaSeqId, NextSeqId, IndexState1} = - rabbit_queue_index:find_lowest_seq_id_seg_and_next_seq_id(IndexState), + {LowSeqId, NextSeqId, IndexState1} = rabbit_queue_index:bounds(IndexState), {PRef, TRef, Terms1} = case [persistent_ref, transient_ref] -- proplists:get_keys(Terms) of @@ -296,7 +295,7 @@ init(QueueName, IsDurable, _Recover) -> DeltaCount1 = proplists:get_value(persistent_count, Terms1, DeltaCount), Delta = case DeltaCount1 == 0 andalso DeltaCount /= undefined of true -> ?BLANK_DELTA; - false -> #delta { start_seq_id = DeltaSeqId, + false -> #delta { start_seq_id = LowSeqId, count = DeltaCount1, end_seq_id = NextSeqId } end, @@ -362,8 +361,7 @@ delete_and_terminate(State) -> %% leaving only partial segments around. IndexState1 = rabbit_queue_index:flush(IndexState), IndexState2 = - case rabbit_queue_index:find_lowest_seq_id_seg_and_next_seq_id( - IndexState1) of + case rabbit_queue_index:bounds(IndexState1) of {N, N, IndexState3} -> IndexState3; {DeltaSeqId, NextSeqId, IndexState3} -> |
