diff options
author | Daniil Fedotov <hairyhum@gmail.com> | 2019-03-11 11:55:44 -0400 |
---|---|---|
committer | Luke Bakken <lbakken@pivotal.io> | 2019-05-01 13:16:21 -0700 |
commit | 622c9d940f37239900d35fe897d517ffc53d2f89 (patch) | |
tree | 1f798ccae0b07f67bee98b698bbddab150e0f427 | |
parent | cde967d6d42fa646b8eb23522fbb568354b8ce5f (diff) | |
download | rabbitmq-server-git-622c9d940f37239900d35fe897d517ffc53d2f89.tar.gz |
Startup and recovery with mnevis
-rw-r--r-- | src/rabbit_mnesia.erl | 41 | ||||
-rw-r--r-- | src/rabbit_table.erl | 23 |
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(). |