summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSimon MacMullen <simon@rabbitmq.com>2011-01-11 15:25:28 +0000
committerSimon MacMullen <simon@rabbitmq.com>2011-01-11 15:25:28 +0000
commitf657edded754ac464fbc450e731d9409907ac2eb (patch)
treee50ae10a7b7f3146a58a8b9ef54c1583f0ea1f5e
parent566d62432fc5c627e4f413ad5a8ce9ae6f0a0ac7 (diff)
downloadrabbitmq-server-git-f657edded754ac464fbc450e731d9409907ac2eb.tar.gz
Minimise difference with default.
-rw-r--r--src/rabbit_mnesia.erl61
1 files changed, 28 insertions, 33 deletions
diff --git a/src/rabbit_mnesia.erl b/src/rabbit_mnesia.erl
index 26fda4e902..e63e5de220 100644
--- a/src/rabbit_mnesia.erl
+++ b/src/rabbit_mnesia.erl
@@ -387,8 +387,34 @@ init_db(ClusterNodes, Force) ->
{[], false} ->
%% Nothing there at all, start from scratch
ok = create_schema();
- {_, _} ->
- ok = setup_existing_node(ClusterNodes, Nodes)
+ {[], _} ->
+ %% We're the first node up
+ ok = wait_for_tables(),
+ case rabbit_upgrade:maybe_upgrade(local) of
+ ok -> ensure_schema_ok();
+ version_not_available -> schema_ok_or_move()
+ end;
+ {[AnotherNode|_], _} ->
+ %% Subsequent node in cluster, catch up
+ ensure_version_ok(
+ rpc:call(AnotherNode, rabbit_upgrade, read_version, [])),
+ ok = wait_for_tables(),
+ IsDiskNode = ClusterNodes == [] orelse
+ lists:member(node(), ClusterNodes),
+ ok = wait_for_replicated_tables(),
+ ok = create_local_table_copy(schema, disc_copies),
+ ok = create_local_table_copies(case IsDiskNode of
+ true -> disc;
+ false -> ram
+ end),
+ case rabbit_upgrade:maybe_upgrade(local) of
+ ok -> ok;
+ %% If we're just starting up a new node we won't have
+ %% a version
+ version_not_available ->
+ ok = rabbit_upgrade:write_version()
+ end,
+ ensure_schema_ok()
end;
{error, Reason} ->
%% one reason we may end up here is if we try to join
@@ -397,37 +423,6 @@ init_db(ClusterNodes, Force) ->
throw({error, {unable_to_join_cluster, ClusterNodes, Reason}})
end.
-setup_existing_node(ClusterNodes, Nodes) ->
- case Nodes of
- [] ->
- %% We're the first node up
- ok = wait_for_tables(),
- case rabbit_upgrade:maybe_upgrade(local) of
- ok -> ensure_schema_ok();
- version_not_available -> schema_ok_or_move()
- end;
- [AnotherNode|_] ->
- %% Subsequent node in cluster, catch up
- ensure_version_ok(
- rpc:call(AnotherNode, rabbit_upgrade, read_version, [])),
- ok = wait_for_tables(),
- IsDiskNode = ClusterNodes == [] orelse
- lists:member(node(), ClusterNodes),
- ok = wait_for_replicated_tables(),
- ok = create_local_table_copy(schema, disc_copies),
- ok = create_local_table_copies(case IsDiskNode of
- true -> disc;
- false -> ram
- end),
- case rabbit_upgrade:maybe_upgrade(local) of
- ok -> ok;
- %% If we're just starting up a new node we won't have
- %% a version
- version_not_available -> ok = rabbit_upgrade:write_version()
- end,
- ensure_schema_ok()
- end.
-
schema_ok_or_move() ->
case check_schema_integrity() of
ok ->