diff options
| author | kjnilsson <knilsson@pivotal.io> | 2019-03-14 17:38:20 +0000 |
|---|---|---|
| committer | kjnilsson <knilsson@pivotal.io> | 2019-03-14 17:43:07 +0000 |
| commit | c46020f15646febe2d32653defa0e94e55ff144a (patch) | |
| tree | 4ad19ae9f76bb624de540d6571fad9804170593d /src | |
| parent | 7b71da6e9e0b5c9bd7fc3485fbb7cf2150516cff (diff) | |
| download | rabbitmq-server-git-c46020f15646febe2d32653defa0e94e55ff144a.tar.gz | |
Fix snapshot bug in rabbit_fifo
The waiting_consumers were not being "dehydrated" causing snapshots to
potentially contain message bodies causing occasional test failures in
the snapshots property tests.
Diffstat (limited to 'src')
| -rw-r--r-- | src/rabbit_fifo.erl | 7 |
1 files changed, 5 insertions, 2 deletions
diff --git a/src/rabbit_fifo.erl b/src/rabbit_fifo.erl index 97e5f6e901..e551834490 100644 --- a/src/rabbit_fifo.erl +++ b/src/rabbit_fifo.erl @@ -1408,7 +1408,8 @@ maybe_queue_consumer(ConsumerId, #consumer{credit = Credit}, dehydrate_state(#?MODULE{messages = Messages, consumers = Consumers, returns = Returns, - prefix_msgs = {PrefRet0, PrefMsg0}} = State) -> + prefix_msgs = {PrefRet0, PrefMsg0}, + waiting_consumers = Waiting0} = State) -> %% TODO: optimise this function as far as possible PrefRet = lists:foldl(fun ({'$prefix_msg', Header}, Acc) -> [Header | Acc]; @@ -1422,6 +1423,7 @@ dehydrate_state(#?MODULE{messages = Messages, end, lists:reverse(PrefMsg0), lists:sort(maps:to_list(Messages))), + Waiting = [{Cid, dehydrate_consumer(C)} || {Cid, C} <- Waiting0], State#?MODULE{messages = #{}, ra_indexes = rabbit_fifo_index:empty(), release_cursors = lqueue:new(), @@ -1431,7 +1433,8 @@ dehydrate_state(#?MODULE{messages = Messages, end, Consumers), returns = lqueue:new(), prefix_msgs = {lists:reverse(PrefRet), - lists:reverse(PrefMsgs)}}. + lists:reverse(PrefMsgs)}, + waiting_consumers = Waiting}. dehydrate_consumer(#consumer{checked_out = Checked0} = Con) -> Checked = maps:map(fun (_, {'$prefix_msg', _} = M) -> |
