diff options
| -rw-r--r-- | rabbitmq-components.mk | 2 | ||||
| -rw-r--r-- | src/rabbit_mirror_queue_sync.erl | 12 | ||||
| -rw-r--r-- | test/health_check_SUITE.erl | 4 | ||||
| -rw-r--r-- | test/partitions_SUITE.erl | 16 |
4 files changed, 24 insertions, 10 deletions
diff --git a/rabbitmq-components.mk b/rabbitmq-components.mk index e0f4c91287..05986d82ce 100644 --- a/rabbitmq-components.mk +++ b/rabbitmq-components.mk @@ -50,6 +50,7 @@ dep_rabbitmq_objc_client = git_rmq rabbitmq-objc-client $(current_r dep_rabbitmq_recent_history_exchange = git_rmq rabbitmq-recent-history-exchange $(current_rmq_ref) $(base_rmq_ref) master dep_rabbitmq_routing_node_stamp = git_rmq rabbitmq-routing-node-stamp $(current_rmq_ref) $(base_rmq_ref) master dep_rabbitmq_rtopic_exchange = git_rmq rabbitmq-rtopic-exchange $(current_rmq_ref) $(base_rmq_ref) master +dep_rabbitmq_server_release = git_rmq rabbitmq-server-release $(current_rmq_ref) $(base_rmq_ref) master dep_rabbitmq_sharding = git_rmq rabbitmq-sharding $(current_rmq_ref) $(base_rmq_ref) master dep_rabbitmq_shovel = git_rmq rabbitmq-shovel $(current_rmq_ref) $(base_rmq_ref) master dep_rabbitmq_shovel_management = git_rmq rabbitmq-shovel-management $(current_rmq_ref) $(base_rmq_ref) master @@ -111,6 +112,7 @@ RABBITMQ_COMPONENTS = amqp_client \ rabbitmq_recent_history_exchange \ rabbitmq_routing_node_stamp \ rabbitmq_rtopic_exchange \ + rabbitmq_server_release \ rabbitmq_sharding \ rabbitmq_shovel \ rabbitmq_shovel_management \ diff --git a/src/rabbit_mirror_queue_sync.erl b/src/rabbit_mirror_queue_sync.erl index 54f0855fce..c438e91a3f 100644 --- a/src/rabbit_mirror_queue_sync.erl +++ b/src/rabbit_mirror_queue_sync.erl @@ -248,9 +248,15 @@ syncer_loop(Ref, MPid, SPids) -> syncer_loop(Ref, MPid, SPids); {msgs, Ref, Msgs} -> SPids1 = wait_for_credit(SPids), - broadcast(SPids1, {sync_msgs, Ref, Msgs}), - MPid ! {next, Ref}, - syncer_loop(Ref, MPid, SPids1); + case SPids1 of + [] -> + % Die silently because there are no slaves left. + ok; + _ -> + broadcast(SPids1, {sync_msgs, Ref, Msgs}), + MPid ! {next, Ref}, + syncer_loop(Ref, MPid, SPids1) + end; {cancel, Ref} -> %% We don't tell the slaves we will die - so when we do %% they interpret that as a failure, which is what we diff --git a/test/health_check_SUITE.erl b/test/health_check_SUITE.erl index 50abc97a02..44d42134ce 100644 --- a/test/health_check_SUITE.erl +++ b/test/health_check_SUITE.erl @@ -148,8 +148,8 @@ honors_timeout_argument(Config) -> case timer:tc(rabbit_ct_broker_helpers, rabbitmqctl, [Config, A, ["-t", "5", "node_health_check"]]) of {TimeSpent, {error, 75, _}} -> - if TimeSpent < 5000000 -> exit({too_fast, TimeSpent}); - TimeSpent > 7000000 -> exit({too_slow, TimeSpent}); %% +2 seconds for rabbitmqctl overhead + if TimeSpent < 5000000 -> exit({too_fast, TimeSpent}); + TimeSpent > 10000000 -> exit({too_slow, TimeSpent}); %% +5 seconds for rabbitmqctl overhead true -> ok end; {_, Unexpected} -> diff --git a/test/partitions_SUITE.erl b/test/partitions_SUITE.erl index aa1c1df24f..e00c015d02 100644 --- a/test/partitions_SUITE.erl +++ b/test/partitions_SUITE.erl @@ -29,6 +29,10 @@ %% passes... -define(DELAY, 8000). +%% We wait for 5 minutes for nodes to be running/blocked. +%% It's a lot, but still better than timetrap_timeout +-define(AWAIT_TIMEOUT, 300000). + all() -> [ {group, net_ticktime_1}, @@ -415,15 +419,17 @@ block(X, Y) -> allow(X, Y) -> rabbit_ct_broker_helpers:allow_traffic_between(X, Y). -await_running (Node, Bool) -> await(Node, Bool, fun is_running/1). -await_listening (Node, Bool) -> await(Node, Bool, fun is_listening/1). -await_partitions(Node, Parts) -> await(Node, Parts, fun partitions/1). +await_running (Node, Bool) -> await(Node, Bool, fun is_running/1, ?AWAIT_TIMEOUT). +await_listening (Node, Bool) -> await(Node, Bool, fun is_listening/1, ?AWAIT_TIMEOUT). +await_partitions(Node, Parts) -> await(Node, Parts, fun partitions/1, ?AWAIT_TIMEOUT). -await(Node, Res, Fun) -> +await(Node, Res, Fun, Timeout) when Timeout =< 0 -> + error({await_timeout, Node, Res, Fun}); +await(Node, Res, Fun, Timeout) -> case Fun(Node) of Res -> ok; _ -> timer:sleep(100), - await(Node, Res, Fun) + await(Node, Res, Fun, Timeout - 100) end. is_running(Node) -> rpc:call(Node, rabbit, is_running, []). |
