summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDaniil Fedotov <hairyhum@gmail.com>2019-03-11 11:55:44 -0400
committerLuke Bakken <lbakken@pivotal.io>2019-05-01 13:16:21 -0700
commit622c9d940f37239900d35fe897d517ffc53d2f89 (patch)
tree1f798ccae0b07f67bee98b698bbddab150e0f427
parentcde967d6d42fa646b8eb23522fbb568354b8ce5f (diff)
downloadrabbitmq-server-git-622c9d940f37239900d35fe897d517ffc53d2f89.tar.gz
Startup and recovery with mnevis
-rw-r--r--src/rabbit_mnesia.erl41
-rw-r--r--src/rabbit_table.erl23
2 files changed, 17 insertions, 47 deletions
diff --git a/src/rabbit_mnesia.erl b/src/rabbit_mnesia.erl
index 2d20e2af27..9dac27c95c 100644
--- a/src/rabbit_mnesia.erl
+++ b/src/rabbit_mnesia.erl
@@ -81,14 +81,14 @@ init() ->
mnevis_node:start(),
%% Create schema on all nodes
- ok = create_schema(),
-
-
-
- {ok, _, _} = ra:members(mnevis_node:node_id()),
-
+ case is_virgin_node() of
+ true ->
+ ok = create_schema();
+ false ->
+ ok
+ end,
+
io:format("~nDb nodes ~p~n", [mnevis:db_nodes()]),
-
io:format("~nRunning Db nodes ~p~n", [mnevis:running_db_nodes()]),
io:format("Get cluster status ~n"),
@@ -846,9 +846,13 @@ create_schema() ->
% stop_mnesia(),
% rabbit_misc:ensure_ok(mnesia:create_schema([node()]), cannot_create_schema),
% start_mnesia(),
-
- io:format("Create tables ~n"),
- ok = rabbit_table:create(),
+ case ra:members(mnevis_node:node_id()) of
+ {ok, _, {_, Node}} when Node == node() ->
+ io:format("Create tables ~n"),
+ ok = rabbit_table:create();
+ _ ->
+ wait_for_tables()
+ end,
io:format("Check integrity ~n"),
ensure_schema_integrity(),
io:format("Record version ~n"),
@@ -1027,21 +1031,8 @@ check_rabbit_consistency(RemoteNode, RemoteVersion) ->
%% exception of the cluster status files, which will be there thanks to
%% `rabbit_node_monitor:prepare_cluster_status_file/0'.
is_virgin_node() ->
- case rabbit_file:list_dir(dir()) of
- {error, enoent} ->
- true;
- {ok, []} ->
- true;
- {ok, [File1, File2, File3]} ->
- lists:usort([filename:join(dir(), File1),
- filename:join(dir(), File2),
- filename:join(dir(), File3)]) =:=
- lists:usort([rabbit_node_monitor:cluster_status_filename(),
- rabbit_node_monitor:running_nodes_filename(),
- rabbit_node_monitor:quorum_filename()]);
- {ok, _} ->
- false
- end.
+ {ok, Tables, _} = ra:consistent_query(mnevis_node:node_id(), fun(_) -> mnesia:system_info(tables) end),
+ not lists:member(rabbit_queue, Tables).
find_reachable_peer_to_cluster_with([]) ->
none;
diff --git a/src/rabbit_table.erl b/src/rabbit_table.erl
index dcc5e0b1ef..5b15843415 100644
--- a/src/rabbit_table.erl
+++ b/src/rabbit_table.erl
@@ -271,114 +271,93 @@ names() -> [Tab || {Tab, _} <- definitions()].
definitions(disc) ->
definitions();
definitions(ram) ->
- [{Tab, [{ram_copies, []}, {ram_copies, [node()]} |
- proplists:delete(
- ram_copies, proplists:delete(ram_copies, TabDef))]} ||
- {Tab, TabDef} <- definitions()].
+ definitions().
definitions() ->
[{rabbit_user,
[{record_name, internal_user},
{attributes, record_info(fields, internal_user)},
- {ram_copies, [node()]},
{match, #internal_user{_='_'}}]},
{rabbit_user_permission,
[{record_name, user_permission},
{attributes, record_info(fields, user_permission)},
- {ram_copies, [node()]},
{match, #user_permission{user_vhost = #user_vhost{_='_'},
permission = #permission{_='_'},
_='_'}}]},
{rabbit_topic_permission,
[{record_name, topic_permission},
{attributes, record_info(fields, topic_permission)},
- {ram_copies, [node()]},
{match, #topic_permission{topic_permission_key = #topic_permission_key{_='_'},
permission = #permission{_='_'},
_='_'}}]},
{rabbit_vhost,
[{record_name, vhost},
{attributes, record_info(fields, vhost)},
- {ram_copies, [node()]},
{match, #vhost{_='_'}}]},
{rabbit_listener,
[{record_name, listener},
{attributes, record_info(fields, listener)},
- {ram_copies, [node()]},
{type, bag},
{match, #listener{_='_'}}]},
{rabbit_durable_route,
[{record_name, route},
{attributes, record_info(fields, route)},
- {ram_copies, [node()]},
{match, #route{binding = binding_match(), _='_'}}]},
{rabbit_semi_durable_route,
[{record_name, route},
{attributes, record_info(fields, route)},
- {ram_copies, [node()]},
{type, ordered_set},
{match, #route{binding = binding_match(), _='_'}}]},
{rabbit_route,
[{record_name, route},
{attributes, record_info(fields, route)},
- {ram_copies, [node()]},
{type, ordered_set},
{match, #route{binding = binding_match(), _='_'}}]},
{rabbit_reverse_route,
[{record_name, reverse_route},
{attributes, record_info(fields, reverse_route)},
- {ram_copies, [node()]},
{type, ordered_set},
{match, #reverse_route{reverse_binding = reverse_binding_match(),
_='_'}}]},
{rabbit_topic_trie_node,
[{record_name, topic_trie_node},
{attributes, record_info(fields, topic_trie_node)},
- {ram_copies, [node()]},
{type, ordered_set},
{match, #topic_trie_node{trie_node = trie_node_match(), _='_'}}]},
{rabbit_topic_trie_edge,
[{record_name, topic_trie_edge},
{attributes, record_info(fields, topic_trie_edge)},
- {ram_copies, [node()]},
{type, ordered_set},
{match, #topic_trie_edge{trie_edge = trie_edge_match(), _='_'}}]},
{rabbit_topic_trie_binding,
[{record_name, topic_trie_binding},
{attributes, record_info(fields, topic_trie_binding)},
- {ram_copies, [node()]},
{type, ordered_set},
{match, #topic_trie_binding{trie_binding = trie_binding_match(),
_='_'}}]},
{rabbit_durable_exchange,
[{record_name, exchange},
{attributes, record_info(fields, exchange)},
- {ram_copies, [node()]},
{match, #exchange{name = exchange_name_match(), _='_'}}]},
{rabbit_exchange,
[{record_name, exchange},
{attributes, record_info(fields, exchange)},
- {ram_copies, [node()]},
{match, #exchange{name = exchange_name_match(), _='_'}}]},
{rabbit_exchange_serial,
[{record_name, exchange_serial},
{attributes, record_info(fields, exchange_serial)},
- {ram_copies, [node()]},
{match, #exchange_serial{name = exchange_name_match(), _='_'}}]},
{rabbit_runtime_parameters,
[{record_name, runtime_parameters},
{attributes, record_info(fields, runtime_parameters)},
- {ram_copies, [node()]},
{match, #runtime_parameters{_='_'}}]},
{rabbit_durable_queue,
[{record_name, amqqueue},
{attributes, amqqueue:fields()},
- {ram_copies, [node()]},
{match, amqqueue:pattern_match_on_name(queue_name_match())}]},
{rabbit_queue,
[{record_name, amqqueue},
{attributes, amqqueue:fields()},
- {ram_copies, [node()]},
{match, amqqueue:pattern_match_on_name(queue_name_match())}]}]
++ gm:table_definitions()
++ mirrored_supervisor:table_definitions().