diff options
author | kjnilsson <knilsson@pivotal.io> | 2020-11-19 15:59:51 +0000 |
---|---|---|
committer | kjnilsson <knilsson@pivotal.io> | 2020-11-19 15:59:51 +0000 |
commit | ea7c9e9b61d0f3ce04581263d12bdebae9c93501 (patch) | |
tree | 6f8ba97abb125d40d04e0708505e7833de1891ae | |
parent | 7a0e239c2c7723b2ed9c699b9336e30f18286c15 (diff) | |
download | rabbitmq-server-git-qq-basic-get-snapshots.tar.gz |
QQ: Emit release cursor for empty basic getsqq-basic-get-snapshots
Else an application that polled an empty quorum queue frequntly using basic.get
would never result in a snapshot being taken and results in unlimited
log growth.
-rw-r--r-- | deps/rabbit/src/rabbit_fifo.erl | 2 | ||||
-rw-r--r-- | deps/rabbit/test/rabbit_fifo_SUITE.erl | 15 |
2 files changed, 14 insertions, 3 deletions
diff --git a/deps/rabbit/src/rabbit_fifo.erl b/deps/rabbit/src/rabbit_fifo.erl index 51acfffd0d..9205f897ca 100644 --- a/deps/rabbit/src/rabbit_fifo.erl +++ b/deps/rabbit/src/rabbit_fifo.erl @@ -299,7 +299,7 @@ apply(#{index := Index, Exists = maps:is_key(ConsumerId, Consumers), case messages_ready(State0) of 0 -> - {State0, {dequeue, empty}}; + update_smallest_raft_index(Index, {dequeue, empty}, State0, []); _ when Exists -> %% a dequeue using the same consumer_id isn't possible at this point {State0, {dequeue, empty}}; diff --git a/deps/rabbit/test/rabbit_fifo_SUITE.erl b/deps/rabbit/test/rabbit_fifo_SUITE.erl index 7b90d91bfa..a9d541238d 100644 --- a/deps/rabbit/test/rabbit_fifo_SUITE.erl +++ b/deps/rabbit/test/rabbit_fifo_SUITE.erl @@ -207,7 +207,7 @@ enq_enq_checkout_get_settled_test(_) -> checkout_get_empty_test(_) -> Cid = {?FUNCTION_NAME, self()}, State = test_init(test), - {_State2, {dequeue, empty}} = + {_State2, {dequeue, empty}, _} = apply(meta(1), rabbit_fifo:make_checkout(Cid, {dequeue, unsettled}, #{}), State), ok. @@ -1556,7 +1556,7 @@ queue_ttl_test(_) -> = rabbit_fifo:tick(Now + 2500, S2D), %% dequeue should set last applied - {S1Deq, {dequeue, empty}} = + {S1Deq, {dequeue, empty}, _} = apply(meta(2, Now), rabbit_fifo:make_checkout(Cid, {dequeue, unsettled}, #{}), S0), @@ -1657,6 +1657,17 @@ checkout_priority_test(_) -> ?ASSERT_EFF({send_msg, P, {delivery, _, _}, _}, P == Pid, E5), ok. +empty_dequeue_should_emit_release_cursor_test(_) -> + State0 = test_init(?FUNCTION_NAME), + Cid = <<"basic.get1">>, + {_State, {dequeue, empty}, Effects} = + apply(meta(2, 1234), + rabbit_fifo:make_checkout(Cid, {dequeue, unsettled}, #{}), + State0), + + ?ASSERT_EFF({release_cursor, _, _}, Effects), + ok. + %% Utility init(Conf) -> rabbit_fifo:init(Conf). |