speed up quorum_queues_SUITE
AFTER: gmake -C deps/rabbit ct-quorum_queue 6.15s user 4.25s system 2% cpu 6:25.29 total
This commit is contained in:
parent
3551309baf
commit
f919fee7f1
|
|
@ -25,6 +25,8 @@
|
|||
|
||||
-compile([nowarn_export_all, export_all]).
|
||||
|
||||
|
||||
-define(NET_TICKTIME_S, 5).
|
||||
-define(DEFAULT_AWAIT, 10_000).
|
||||
|
||||
suite() ->
|
||||
|
|
@ -206,7 +208,8 @@ init_per_group(clustered_with_partitions, Config0) ->
|
|||
Config1 = rabbit_ct_helpers:run_setup_steps(
|
||||
Config0,
|
||||
[fun rabbit_ct_broker_helpers:configure_dist_proxy/1]),
|
||||
Config2 = rabbit_ct_helpers:set_config(Config1, [{net_ticktime, 10}]),
|
||||
Config2 = rabbit_ct_helpers:set_config(Config1,
|
||||
[{net_ticktime, ?NET_TICKTIME_S}]),
|
||||
Config2
|
||||
end;
|
||||
init_per_group(Group, Config) ->
|
||||
|
|
@ -225,10 +228,10 @@ init_per_group(Group, Config) ->
|
|||
Config1 = rabbit_ct_helpers:set_config(Config,
|
||||
[{rmq_nodes_count, ClusterSize},
|
||||
{rmq_nodename_suffix, Group},
|
||||
{tcp_ports_base, {skip_n_nodes, ClusterSize}}
|
||||
{tcp_ports_base, {skip_n_nodes, ClusterSize}},
|
||||
{net_ticktime, ?NET_TICKTIME_S}
|
||||
]),
|
||||
Config1b = rabbit_ct_helpers:set_config(Config1, [{net_ticktime, 10}]),
|
||||
Ret = rabbit_ct_helpers:run_steps(Config1b,
|
||||
Ret = rabbit_ct_helpers:run_steps(Config1,
|
||||
[fun merge_app_env/1 ] ++
|
||||
rabbit_ct_broker_helpers:setup_steps()),
|
||||
case Ret of
|
||||
|
|
@ -238,10 +241,6 @@ init_per_group(Group, Config) ->
|
|||
ok = rabbit_ct_broker_helpers:rpc(
|
||||
Config2, 0, application, set_env,
|
||||
[rabbit, channel_tick_interval, 100]),
|
||||
%% HACK: the larger cluster sizes benefit for a bit
|
||||
%% more time after clustering before running the
|
||||
%% tests.
|
||||
timer:sleep(ClusterSize * 1000),
|
||||
Config2
|
||||
end
|
||||
end.
|
||||
|
|
@ -580,7 +579,7 @@ start_queue_concurrent(Config) ->
|
|||
[{<<"x-queue-type">>,
|
||||
longstr,
|
||||
<<"quorum">>}])),
|
||||
timer:sleep(500),
|
||||
timer:sleep(100),
|
||||
rabbit_ct_client_helpers:close_connection_and_channel(Conn, Ch),
|
||||
Self ! {done, Server}
|
||||
end)
|
||||
|
|
@ -740,7 +739,10 @@ server_system_recover(Config) ->
|
|||
%% validate quorum queue is still functional
|
||||
?awaitMatch({ok, _, _},
|
||||
begin
|
||||
ra:members({RaName, Server})
|
||||
%% there is a small chance that a quorum queue process will crash
|
||||
%% due to missing ETS table, in this case we need to keep
|
||||
%% retrying awaiting the restart
|
||||
catch ra:members({RaName, Server})
|
||||
end, ?DEFAULT_AWAIT),
|
||||
ok.
|
||||
|
||||
|
|
@ -978,17 +980,15 @@ consume_in_minority(Config) ->
|
|||
?assertEqual({'queue.declare_ok', QQ, 0, 0},
|
||||
declare(Ch, QQ, [{<<"x-queue-type">>, longstr, <<"quorum">>}])),
|
||||
|
||||
ok = rabbit_ct_broker_helpers:stop_node(Config, Server1),
|
||||
ok = rabbit_ct_broker_helpers:stop_node(Config, Server2),
|
||||
ok = rabbit_control_helper:command(stop_app, Server1),
|
||||
ok = rabbit_control_helper:command(stop_app, Server2),
|
||||
|
||||
?assertExit({{shutdown, {connection_closing, {server_initiated_close, 541, _}}}, _},
|
||||
amqp_channel:call(Ch, #'basic.get'{queue = QQ,
|
||||
no_ack = false})),
|
||||
|
||||
ok = rabbit_ct_broker_helpers:async_start_node(Config, Server1),
|
||||
ok = rabbit_ct_broker_helpers:async_start_node(Config, Server2),
|
||||
ok = rabbit_ct_broker_helpers:wait_for_async_start_node(Server1),
|
||||
ok = rabbit_ct_broker_helpers:wait_for_async_start_node(Server2),
|
||||
ok = rabbit_control_helper:command(start_app, Server1),
|
||||
ok = rabbit_control_helper:command(start_app, Server2),
|
||||
ok.
|
||||
|
||||
reject_after_leader_transfer(Config) ->
|
||||
|
|
@ -1427,17 +1427,19 @@ recover_from_multiple_failures(Config) ->
|
|||
wait_for_messages_pending_ack(Servers, RaName, 0).
|
||||
|
||||
publishing_to_unavailable_queue(Config) ->
|
||||
%% publishing to an unavialable queue but with a reachable member should result
|
||||
%% in the initial enqueuer session timing out and the message being nacked
|
||||
[Server, Server1, Server2] = Servers = rabbit_ct_broker_helpers:get_node_configs(Config, nodename),
|
||||
%% publishing to an unavailable queue but with a reachable member should result
|
||||
%% in the initial enqueuer command that is send syncronously to set up
|
||||
%% the enqueuer session timing out and the message being nacked
|
||||
[Server, Server1, Server2] = Servers =
|
||||
rabbit_ct_broker_helpers:get_node_configs(Config, nodename),
|
||||
|
||||
TCh = rabbit_ct_client_helpers:open_channel(Config, Server),
|
||||
QQ = ?config(queue_name, Config),
|
||||
?assertEqual({'queue.declare_ok', QQ, 0, 0},
|
||||
declare(TCh, QQ, [{<<"x-queue-type">>, longstr, <<"quorum">>}])),
|
||||
|
||||
ok = rabbit_ct_broker_helpers:stop_node(Config, Server1),
|
||||
ok = rabbit_ct_broker_helpers:stop_node(Config, Server2),
|
||||
ok = rabbit_control_helper:command(stop_app, Server1),
|
||||
ok = rabbit_control_helper:command(stop_app, Server2),
|
||||
assert_cluster_status({Servers, Servers, [Server]}, [Server]),
|
||||
|
||||
ct:pal("opening channel to ~w", [Server]),
|
||||
|
|
@ -1452,31 +1454,33 @@ publishing_to_unavailable_queue(Config) ->
|
|||
after 90000 ->
|
||||
exit(confirm_timeout)
|
||||
end,
|
||||
ok = rabbit_ct_broker_helpers:start_node(Config, Server1),
|
||||
ok = rabbit_control_helper:command(start_app, Server1),
|
||||
?awaitMatch(2, count_online_nodes(Server, <<"/">>, QQ), ?DEFAULT_AWAIT),
|
||||
publish_many(Ch, QQ, 1),
|
||||
%% this should now be acked
|
||||
%% check we get at least on ack
|
||||
ok = receive
|
||||
#'basic.ack'{} -> ok;
|
||||
#'basic.nack'{} -> fail
|
||||
after 90000 ->
|
||||
exit(confirm_timeout)
|
||||
end,
|
||||
%% check we get at least on ack
|
||||
ok = rabbit_ct_broker_helpers:start_node(Config, Server2),
|
||||
flush(1),
|
||||
ok = rabbit_control_helper:command(start_app, Server2),
|
||||
ok.
|
||||
|
||||
leadership_takeover(Config) ->
|
||||
%% Kill nodes in succession forcing the takeover of leadership, and all messages that
|
||||
%% are in the queue.
|
||||
[Server, Server1, Server2] = Servers = rabbit_ct_broker_helpers:get_node_configs(Config, nodename),
|
||||
[Server, Server1, Server2] = Servers =
|
||||
rabbit_ct_broker_helpers:get_node_configs(Config, nodename),
|
||||
|
||||
Ch = rabbit_ct_client_helpers:open_channel(Config, Server),
|
||||
QQ = ?config(queue_name, Config),
|
||||
?assertEqual({'queue.declare_ok', QQ, 0, 0},
|
||||
declare(Ch, QQ, [{<<"x-queue-type">>, longstr, <<"quorum">>}])),
|
||||
|
||||
ok = rabbit_ct_broker_helpers:stop_node(Config, Server1),
|
||||
ok = rabbit_control_helper:command(stop_app, Server1),
|
||||
Running = Servers -- [Server1],
|
||||
assert_cluster_status({Servers, Servers, Running}, Running),
|
||||
|
||||
|
|
@ -1489,18 +1493,17 @@ leadership_takeover(Config) ->
|
|||
wait_for_messages_ready([Server], RaName, 3),
|
||||
wait_for_messages_pending_ack([Server], RaName, 0),
|
||||
|
||||
ok = rabbit_ct_broker_helpers:stop_node(Config, Server2),
|
||||
|
||||
ok = rabbit_ct_broker_helpers:start_node(Config, Server1),
|
||||
ok = rabbit_ct_broker_helpers:stop_node(Config, Server),
|
||||
ok = rabbit_ct_broker_helpers:start_node(Config, Server2),
|
||||
ok = rabbit_ct_broker_helpers:stop_node(Config, Server1),
|
||||
ok = rabbit_ct_broker_helpers:start_node(Config, Server),
|
||||
ok = rabbit_control_helper:command(stop_app, Server2),
|
||||
ok = rabbit_control_helper:command(start_app, Server1),
|
||||
ok = rabbit_control_helper:command(stop_app, Server),
|
||||
ok = rabbit_control_helper:command(start_app, Server2),
|
||||
ok = rabbit_control_helper:command(stop_app, Server1),
|
||||
ok = rabbit_control_helper:command(start_app, Server),
|
||||
|
||||
wait_for_messages_ready([Server2, Server], RaName, 3),
|
||||
wait_for_messages_pending_ack([Server2, Server], RaName, 0),
|
||||
|
||||
ok = rabbit_ct_broker_helpers:start_node(Config, Server1),
|
||||
ok = rabbit_control_helper:command(start_app, Server1),
|
||||
wait_for_messages_ready(Servers, RaName, 3),
|
||||
wait_for_messages_pending_ack(Servers, RaName, 0).
|
||||
|
||||
|
|
@ -2268,7 +2271,6 @@ reconnect_consumer_and_wait_channel_down(Config) ->
|
|||
%% Let's give it a few seconds to ensure it doesn't attempt to
|
||||
%% deliver to the down channel - it shouldn't be monitored
|
||||
%% at this time!
|
||||
timer:sleep(5000),
|
||||
wait_for_messages_ready(Servers, RaName, 1),
|
||||
wait_for_messages_pending_ack(Servers, RaName, 0).
|
||||
|
||||
|
|
@ -3067,11 +3069,10 @@ per_message_ttl(Config) ->
|
|||
ok = amqp_channel:cast(Ch,
|
||||
#'basic.publish'{routing_key = QQ},
|
||||
#amqp_msg{props = #'P_basic'{delivery_mode = 2,
|
||||
expiration = <<"2000">>},
|
||||
expiration = <<"1000">>},
|
||||
payload = Msg1}),
|
||||
amqp_channel:wait_for_confirms(Ch, 5),
|
||||
%% we know the message got to the queue in 2s it should be gone
|
||||
timer:sleep(2000),
|
||||
wait_for_messages(Config, [[QQ, <<"0">>, <<"0">>, <<"0">>]]),
|
||||
ok.
|
||||
|
||||
|
|
@ -3099,8 +3100,6 @@ per_message_ttl_mixed_expiry(Config) ->
|
|||
payload = Msg2}),
|
||||
|
||||
|
||||
wait_for_messages(Config, [[QQ, <<"2">>, <<"2">>, <<"0">>]]),
|
||||
timer:sleep(1000),
|
||||
wait_for_messages(Config, [[QQ, <<"2">>, <<"2">>, <<"0">>]]),
|
||||
subscribe(Ch, QQ, false),
|
||||
receive
|
||||
|
|
@ -3593,7 +3592,6 @@ select_nodes_with_least_replicas_node_down(Config) ->
|
|||
Qs = [?config(queue_name, Config),
|
||||
?config(alt_queue_name, Config)],
|
||||
|
||||
timer:sleep(1000),
|
||||
Members = [begin
|
||||
?assertMatch({'queue.declare_ok', Q, 0, 0},
|
||||
declare(Ch, Q,
|
||||
|
|
@ -3710,7 +3708,7 @@ nack(Ch, Multiple, Requeue) ->
|
|||
end.
|
||||
|
||||
wait_for_cleanup(Server, Channel, Number) ->
|
||||
wait_for_cleanup(Server, Channel, Number, 60).
|
||||
wait_for_cleanup(Server, Channel, Number, 120).
|
||||
|
||||
wait_for_cleanup(Server, Channel, Number, 0) ->
|
||||
?assertEqual(length(rpc:call(Server, rabbit_channel, list_queue_states, [Channel])),
|
||||
|
|
@ -3720,7 +3718,7 @@ wait_for_cleanup(Server, Channel, Number, N) ->
|
|||
Length when Number == Length ->
|
||||
ok;
|
||||
_ ->
|
||||
timer:sleep(500),
|
||||
timer:sleep(250),
|
||||
wait_for_cleanup(Server, Channel, Number, N - 1)
|
||||
end.
|
||||
|
||||
|
|
|
|||
Loading…
Reference in New Issue