summaryrefslogtreecommitdiff
path: root/test
diff options
context:
space:
mode:
authorkjnilsson <knilsson@pivotal.io>2020-02-25 14:40:09 +0000
committerkjnilsson <knilsson@pivotal.io>2020-02-25 14:43:58 +0000
commitac86a6cad73cbcee0e94e65f245c5b89fffb220b (patch)
tree99b37f42225d0b5ff6a8495f2b936a3a2b09c32f /test
parent227e69480c22fdea58d5c388ec98ecc8ecd4e8ec (diff)
downloadrabbitmq-server-git-ac86a6cad73cbcee0e94e65f245c5b89fffb220b.tar.gz
Fix QQ crash recovery bug
When using dead letter handlers the state machine would crash when a prefix_msg was being dead-lettered on recovery. This handles this case and also fixes an issue where the incorrect initial release cursor interval would have been set when overriding the release cursor default. [#171463230]
Diffstat (limited to 'test')
-rw-r--r--test/rabbit_fifo_prop_SUITE.erl29
1 files changed, 25 insertions, 4 deletions
diff --git a/test/rabbit_fifo_prop_SUITE.erl b/test/rabbit_fifo_prop_SUITE.erl
index e0fced2de3..d79dac5b6f 100644
--- a/test/rabbit_fifo_prop_SUITE.erl
+++ b/test/rabbit_fifo_prop_SUITE.erl
@@ -44,6 +44,7 @@ all_tests() ->
scenario18,
scenario19,
scenario20,
+ scenario21,
single_active,
single_active_01,
single_active_02,
@@ -356,6 +357,24 @@ scenario20(_Config) ->
max_in_memory_length => 1}, Commands),
ok.
+scenario21(_Config) ->
+ C1Pid = c:pid(0,883,1),
+ C1 = {<<>>, C1Pid},
+ E = c:pid(0,176,1),
+ Commands = [
+ make_checkout(C1, {auto,2,simple_prefetch}),
+ make_enqueue(E,1,<<"1">>),
+ make_enqueue(E,2,<<"2">>),
+ make_enqueue(E,3,<<"3">>),
+ rabbit_fifo:make_discard(C1, [0]),
+ rabbit_fifo:make_settle(C1, [1])
+ ],
+ run_snapshot_test(#{name => ?FUNCTION_NAME,
+ release_cursor_interval => 1,
+ dead_letter_handler => {?MODULE, banana, []}},
+ Commands),
+ ok.
+
single_active_01(_Config) ->
C1Pid = test_util:fake_pid(rabbit@fake_node1),
C1 = {<<0>>, C1Pid},
@@ -450,7 +469,7 @@ snapshots(_Config) ->
oneof([range(1, 10), undefined]),
oneof([range(1, 1000), undefined])
}}]),
- ?FORALL(O, ?LET(Ops, log_gen(250), expand(Ops)),
+ ?FORALL(O, ?LET(Ops, log_gen(256), expand(Ops)),
collect({log_size, length(O)},
snapshots_prop(
config(?FUNCTION_NAME,
@@ -607,10 +626,12 @@ in_memory_limit(_Config) ->
InMemoryBytes), O))))
end, [], Size).
-config(Name, Length, Bytes, SingleActive, DeliveryLimit, InMemoryLength, InMemoryBytes) ->
+config(Name, Length, Bytes, SingleActive, DeliveryLimit,
+ InMemoryLength, InMemoryBytes) ->
#{name => Name,
max_length => map_max(Length),
max_bytes => map_max(Bytes),
+ dead_letter_handler => {?MODULE, banana, []},
single_active_consumer_on => SingleActive,
delivery_limit => map_max(DeliveryLimit),
max_in_memory_length => map_max(InMemoryLength),
@@ -741,8 +762,8 @@ log_gen(Size, _Body) ->
{40, {input_event,
frequency([{10, settle},
{2, return},
- {1, discard},
- {1, requeue}])}},
+ {2, discard},
+ {2, requeue}])}},
{2, checkout_gen(oneof(CPids))},
{1, checkout_cancel_gen(oneof(CPids))},
{1, down_gen(oneof(EPids ++ CPids))},