summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--docs/rabbitmq.config.example2
-rw-r--r--packaging/RPMS/Fedora/rabbitmq-server.spec3
-rw-r--r--packaging/debs/Debian/debian/changelog6
-rwxr-xr-xscripts/rabbitmq-env2
-rw-r--r--scripts/rabbitmq-env.bat2
-rw-r--r--src/rabbit_control_main.erl9
-rw-r--r--src/rabbit_mnesia.erl2
-rw-r--r--src/rabbit_queue_location_validator.erl4
-rw-r--r--test/dynamic_ha_SUITE.erl40
9 files changed, 45 insertions, 25 deletions
diff --git a/docs/rabbitmq.config.example b/docs/rabbitmq.config.example
index 42280cc0f5..08fc42a71d 100644
--- a/docs/rabbitmq.config.example
+++ b/docs/rabbitmq.config.example
@@ -659,7 +659,7 @@
%% See https://github.com/basho/lager for more documentation
{lager, [
%%
- %% Log direcrory, taken from the RABBITMQ_LOG_BASE env variable by default.
+ %% Log directory, taken from the RABBITMQ_LOG_BASE env variable by default.
%% {log_root, "/var/log/rabbitmq"},
%%
%% All log messages go to the default "sink" configured with
diff --git a/packaging/RPMS/Fedora/rabbitmq-server.spec b/packaging/RPMS/Fedora/rabbitmq-server.spec
index 49b91618b3..7010b444d0 100644
--- a/packaging/RPMS/Fedora/rabbitmq-server.spec
+++ b/packaging/RPMS/Fedora/rabbitmq-server.spec
@@ -126,6 +126,9 @@ done
rm -rf %{buildroot}
%changelog
+* Fri Jul 29 2016 michael@rabbitmq.com 3.6.4-1
+- New Upstream Release
+
* Wed Jul 6 2016 michael@rabbitmq.com 3.6.3-1
- New Upstream Release
diff --git a/packaging/debs/Debian/debian/changelog b/packaging/debs/Debian/debian/changelog
index 72f7116e66..8a5f136bf0 100644
--- a/packaging/debs/Debian/debian/changelog
+++ b/packaging/debs/Debian/debian/changelog
@@ -1,3 +1,9 @@
+rabbitmq-server (3.6.4-1) unstable; urgency=low
+
+ * New Upstream Release
+
+ -- Michael Klishin <michael@rabbitmq.com> Fri, 29 Jul 2016 11:40:53 +0100
+
rabbitmq-server (3.6.3-1) unstable; urgency=low
* New Upstream Release
diff --git a/scripts/rabbitmq-env b/scripts/rabbitmq-env
index 6a7b2f91f0..1b9c6df4b3 100755
--- a/scripts/rabbitmq-env
+++ b/scripts/rabbitmq-env
@@ -66,7 +66,7 @@ DEFAULT_SCHEDULER_BIND_TYPE="db"
[ "x" = "x$RABBITMQ_SCHEDULER_BIND_TYPE" ] && RABBITMQ_SCHEDULER_BIND_TYPE=${DEFAULT_SCHEDULER_BIND_TYPE}
## Common defaults
-SERVER_ERL_ARGS="+P 1048576 +stbt $RABBITMQ_SCHEDULER_BIND_TYPE "
+SERVER_ERL_ARGS="+P 1048576 +t 5000000 +stbt $RABBITMQ_SCHEDULER_BIND_TYPE "
# We save the current value of $RABBITMQ_PID_FILE in case it was set by
# an init script. If $CONF_ENV_FILE overrides it again, we must ignore
diff --git a/scripts/rabbitmq-env.bat b/scripts/rabbitmq-env.bat
index a4a5c9dc19..a1576e9b27 100644
--- a/scripts/rabbitmq-env.bat
+++ b/scripts/rabbitmq-env.bat
@@ -46,7 +46,7 @@ REM echo "location has moved to ${CONF_ENV_FILE}"
REM fi
REM Common defaults
-set SERVER_ERL_ARGS=+P 1048576 +stbt !RABBITMQ_SCHEDULER_BIND_TYPE!
+set SERVER_ERL_ARGS=+P 1048576 +t 5000000 +stbt !RABBITMQ_SCHEDULER_BIND_TYPE!
REM ## Get configuration variables from the configure environment file
REM [ -f ${CONF_ENV_FILE} ] && . ${CONF_ENV_FILE} || true
diff --git a/src/rabbit_control_main.erl b/src/rabbit_control_main.erl
index c56e519fe5..0e377b7c3c 100644
--- a/src/rabbit_control_main.erl
+++ b/src/rabbit_control_main.erl
@@ -1003,6 +1003,9 @@ nodes_in_cluster(Node, Timeout) ->
unsafe_rpc(Node, rabbit_mnesia, cluster_nodes, [running], Timeout).
alarms_by_node(Name) ->
- Status = unsafe_rpc(Name, rabbit, status, []),
- {_, As} = lists:keyfind(alarms, 1, Status),
- {Name, As}.
+ case rpc_call(Name, rabbit, status, []) of
+ {badrpc,nodedown} -> {Name, [nodedown]};
+ Status ->
+ {_, As} = lists:keyfind(alarms, 1, Status),
+ {Name, As}
+ end.
diff --git a/src/rabbit_mnesia.erl b/src/rabbit_mnesia.erl
index 88ea3a80f5..0c46193ca3 100644
--- a/src/rabbit_mnesia.erl
+++ b/src/rabbit_mnesia.erl
@@ -58,7 +58,7 @@
%% Main interface
-spec init() -> 'ok'.
-spec join_cluster(node(), node_type())
- -> 'ok' | {'ok', 'already_member'}.
+ -> ok | {ok, already_member} | {error, {inconsistent_cluster, string()}}.
-spec reset() -> 'ok'.
-spec force_reset() -> 'ok'.
-spec update_cluster_nodes(node()) -> 'ok'.
diff --git a/src/rabbit_queue_location_validator.erl b/src/rabbit_queue_location_validator.erl
index 44394a962c..c5aad50e64 100644
--- a/src/rabbit_queue_location_validator.erl
+++ b/src/rabbit_queue_location_validator.erl
@@ -26,7 +26,9 @@
{mfa, {rabbit_registry, register,
[policy_validator,
<<"queue-master-locator">>,
- ?MODULE]}}]}).
+ ?MODULE]}},
+ {requires, rabbit_registry},
+ {enables, recovery}]}).
validate_policy(KeyList) ->
case proplists:lookup(<<"queue-master-locator">> , KeyList) of
diff --git a/test/dynamic_ha_SUITE.erl b/test/dynamic_ha_SUITE.erl
index b2c98f8ca4..bba7fad707 100644
--- a/test/dynamic_ha_SUITE.erl
+++ b/test/dynamic_ha_SUITE.erl
@@ -61,9 +61,11 @@ groups() ->
]},
{cluster_size_3, [], [
change_policy,
- rapid_change,
- failing_random_policies,
- random_policy
+ rapid_change
+ % FIXME: Re-enable those tests when the know issues are
+ % fixed.
+ %failing_random_policies,
+ %random_policy
]}
]}
].
@@ -265,10 +267,13 @@ failing_random_policies(Config) ->
%% Those set of policies were found as failing by PropEr in the
%% `random_policy` test above. We add them explicitely here to make
%% sure they get tested.
- true = test_random_policy(Config, Nodes,
- [{nodes, [A, B]}, {nodes, [A]}]),
- true = test_random_policy(Config, Nodes,
- [{exactly, 3}, undefined, all, {nodes, [B]}]).
+ ?assertEqual(true, test_random_policy(Config, Nodes,
+ [{nodes, [A, B]}, {nodes, [A]}])),
+ ?assertEqual(true, test_random_policy(Config, Nodes,
+ [{exactly, 3}, undefined, all, {nodes, [B]}])),
+ ?assertEqual(true, test_random_policy(Config, Nodes,
+ [all, undefined, {exactly, 2}, all, {exactly, 3}, {exactly, 3},
+ undefined, {exactly, 3}, all])).
%%----------------------------------------------------------------------------
@@ -367,12 +372,10 @@ test_random_policy(Config, Nodes, Policies) ->
rabbit_ct_client_helpers:publish(Ch, ?QNAME, 100000),
%% Apply policies in parallel on all nodes
apply_in_parallel(Config, Nodes, Policies),
- %% The last policy is the final state
- Last = lists:last(Policies),
%% Give it some time to generate all internal notifications
timer:sleep(2000),
%% Check the result
- Result = wait_for_last_policy(?QNAME, NodeA, Last, 30),
+ Result = wait_for_last_policy(?QNAME, NodeA, Policies, 30),
%% Cleanup
amqp_channel:call(Ch, #'queue.delete'{queue = ?QNAME}),
_ = rabbit_ct_broker_helpers:clear_policy(Config, NodeA, ?POLICY),
@@ -405,7 +408,7 @@ nodes_gen(Nodes) ->
sets:to_list(sets:from_list(List))).
%% Checks
-wait_for_last_policy(QueueName, NodeA, LastPolicy, Tries) ->
+wait_for_last_policy(QueueName, NodeA, TestedPolicies, Tries) ->
%% Ensure the owner/master is able to process a call request,
%% which means that all pending casts have been processed.
%% Use the information returned by owner/master to verify the
@@ -419,8 +422,10 @@ wait_for_last_policy(QueueName, NodeA, LastPolicy, Tries) ->
%% The queue is probably being migrated to another node.
%% Let's wait a bit longer.
timer:sleep(1000),
- wait_for_last_policy(QueueName, NodeA, LastPolicy, Tries - 1);
+ wait_for_last_policy(QueueName, NodeA, TestedPolicies, Tries - 1);
FinalInfo ->
+ %% The last policy is the final state
+ LastPolicy = lists:last(TestedPolicies),
case verify_policy(LastPolicy, FinalInfo) of
true ->
true;
@@ -428,14 +433,15 @@ wait_for_last_policy(QueueName, NodeA, LastPolicy, Tries) ->
Policies = rpc:call(Node, rabbit_policy, list, [], 5000),
ct:pal(
"Last policy not applied:~n"
- " Queue node: ~s (~p)~n"
- " Queue info: ~p~n"
- " Policies: ~p",
- [Node, Pid, FinalInfo, Policies]),
+ " Queue node: ~s (~p)~n"
+ " Queue info: ~p~n"
+ " Configured policies: ~p~n"
+ " Tested policies: ~p",
+ [Node, Pid, FinalInfo, Policies, TestedPolicies]),
false;
false ->
timer:sleep(1000),
- wait_for_last_policy(QueueName, NodeA, LastPolicy,
+ wait_for_last_policy(QueueName, NodeA, TestedPolicies,
Tries - 1)
end
end.