summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDaniil Fedotov <dfedotov@pivotal.io>2016-04-11 18:53:36 +0100
committerDaniil Fedotov <dfedotov@pivotal.io>2016-04-11 18:53:36 +0100
commit21c57385ade0f43cd3f47488e2985cda758e79db (patch)
tree5c24aea53922656073f18e07bf06c503d5e8a731
parent7d55ad5ac0f5c5700d6f24daf8da0df08e6cc899 (diff)
downloadrabbitmq-server-git-21c57385ade0f43cd3f47488e2985cda758e79db.tar.gz
Compatibility with 3.6.x
-rw-r--r--src/rabbit_mnesia.erl41
1 files changed, 25 insertions, 16 deletions
diff --git a/src/rabbit_mnesia.erl b/src/rabbit_mnesia.erl
index 92424481d7..31f8e6a16c 100644
--- a/src/rabbit_mnesia.erl
+++ b/src/rabbit_mnesia.erl
@@ -423,7 +423,6 @@ cluster_status(WhichNodes) ->
node_info() ->
{rabbit_misc:otp_release(), rabbit_misc:version(),
- mnesia:system_info(protocol_version),
cluster_status_from_mnesia()}.
node_type() ->
@@ -601,15 +600,15 @@ check_cluster_consistency(Node, CheckNodesConsistency) ->
%% when a delegate module .beam file hash is present
%% in the tuple, we are dealing with an old version
rabbit_version:version_error("Rabbit", rabbit_misc:version(), Rabbit);
- {_OTP, _Rabbit, _Protocol, {error, _}} ->
+ {_OTP, _Rabbit, {error, _}} ->
{error, not_found};
- {_OTP, Rabbit, Protocol, {ok, Status}} when CheckNodesConsistency ->
- case check_consistency(Node, Rabbit, Protocol, Status) of
+ {_OTP, Rabbit, {ok, Status}} when CheckNodesConsistency ->
+ case check_consistency(Node, Rabbit, Status) of
{error, _} = E -> E;
{ok, Res} -> {ok, Res}
end;
- {_OTP, Rabbit, Protocol, {ok, Status}} ->
- case check_consistency(Node, Rabbit, Protocol) of
+ {_OTP, Rabbit, {ok, Status}} ->
+ case check_consistency(Node, Rabbit) of
{error, _} = E -> E;
ok -> {ok, Status}
end
@@ -765,14 +764,14 @@ change_extra_db_nodes(ClusterNodes0, CheckOtherNodes) ->
Nodes
end.
-check_consistency(Node, Rabbit, ProtocolVersion) ->
+check_consistency(Node, Rabbit) ->
rabbit_misc:sequence_error(
- [check_mnesia_consistency(Node, ProtocolVersion),
+ [check_mnesia_consistency(Node),
check_rabbit_consistency(Rabbit)]).
-check_consistency(Node, Rabbit, ProtocolVersion, Status) ->
+check_consistency(Node, Rabbit, Status) ->
rabbit_misc:sequence_error(
- [check_mnesia_consistency(Node, ProtocolVersion),
+ [check_mnesia_consistency(Node),
check_rabbit_consistency(Rabbit),
check_nodes_consistency(Node, Status)]).
@@ -787,7 +786,7 @@ check_nodes_consistency(Node, RemoteStatus = {RemoteAllNodes, _, _}) ->
[node(), Node, Node])}}
end.
-check_mnesia_consistency(Node, ProtocolVersion) ->
+check_mnesia_consistency(Node) ->
% If mnesia is running we will just check protocol version
% If it's not running, we don't want it to join cluster until all checks pass
% so we start it without `dir` env variable to prevent
@@ -796,15 +795,25 @@ check_mnesia_consistency(Node, ProtocolVersion) ->
case negotiate_protocol([Node]) of
[Node] -> ok;
[] ->
- LocalVersion = mnesia:system_info(protocol_version),
+ LocalVersion = protocol_version(),
+ RemoteVersion = protocol_version(Node),
{error, {inconsistent_cluster,
rabbit_misc:format("Mnesia protocol negotiation failed."
" Local version: ~p."
" Remote version ~p",
- [LocalVersion, ProtocolVersion])}}
+ [LocalVersion, RemoteVersion])}}
end
end).
+protocol_version() ->
+ mnesia:system_info(protocol_version).
+
+protocol_version(Node) when is_atom(Node) ->
+ case rpc:call(Node, mnesia, system_info, [protocol_version]) of
+ {badrpc, _} = Err -> {unknown, Err};
+ Val -> Val
+ end.
+
negotiate_protocol([Node]) ->
mnesia_monitor:negotiate_protocol([Node]).
@@ -871,10 +880,10 @@ find_auto_cluster_node([Node | Nodes]) ->
%% old delegate hash check
{_OTP, RMQ, Hash, _} when is_binary(Hash) ->
Fail("version ~s~n", [RMQ]);
- {_OTP, _RMQ, _Protocol, {error, _} = E} ->
+ {_OTP, _RMQ, {error, _} = E} ->
Fail("~p~n", [E]);
- {OTP, RMQ, Protocol, _} ->
- case check_consistency(Node, RMQ, Protocol) of
+ {OTP, RMQ, _} ->
+ case check_consistency(Node, RMQ) of
{error, _} -> Fail("versions ~p~n",
[{OTP, RMQ}]);
ok -> {ok, Node}