summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorSimon MacMullen <simon@rabbitmq.com>2011-01-07 12:07:12 +0000
committerSimon MacMullen <simon@rabbitmq.com>2011-01-07 12:07:12 +0000
commit949ab083dea7d48f7e94811491f6210d0142d315 (patch)
treececf176832836af9ccb835deff0bd12abb7d9728 /src
parentb55447368f48faa608cd04ec389f6731b0fcb8db (diff)
downloadrabbitmq-server-git-949ab083dea7d48f7e94811491f6210d0142d315.tar.gz
Refactor a bit, reinstate ensure_version_ok check.
Diffstat (limited to 'src')
-rw-r--r--src/rabbit_mnesia.erl86
1 files changed, 45 insertions, 41 deletions
diff --git a/src/rabbit_mnesia.erl b/src/rabbit_mnesia.erl
index c536c64f55..9ea1be2890 100644
--- a/src/rabbit_mnesia.erl
+++ b/src/rabbit_mnesia.erl
@@ -393,46 +393,7 @@ init_db(ClusterNodes, Force) ->
%% Nothing there at all, start from scratch
ok = create_schema();
{_, _} ->
- DiscNodes = mnesia:table_info(schema, disc_copies),
- case are_we_upgrader(DiscNodes) of
- true ->
- %% True single disc node, or last disc
- %% node in cluster to shut down, attempt
- %% upgrade
- ok = wait_for_tables(),
- case rabbit_upgrade:maybe_upgrade(
- [mnesia, local],
- fun () -> ok end,
- fun forget_other_nodes/0) of
- ok -> ensure_schema_ok();
- version_not_available -> schema_ok_or_move()
- end;
- false ->
- %% Subsequent node in cluster, catch up
- %% TODO how to do this?
- %% ensure_version_ok(
- %% rpc:call(AnotherNode, rabbit_upgrade, read_version, [])),
- IsDiskNode = ClusterNodes == [] orelse
- lists:member(node(), ClusterNodes),
- case rabbit_upgrade:maybe_upgrade(
- [local],
- ensure_nodes_running_fun(DiscNodes),
- reset_fun(DiscNodes -- [node()])) 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,
- 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),
- ensure_schema_ok()
- end
+ ok = setup_existing_node(ClusterNodes, Nodes)
end;
{error, Reason} ->
%% one reason we may end up here is if we try to join
@@ -441,6 +402,49 @@ init_db(ClusterNodes, Force) ->
throw({error, {unable_to_join_cluster, ClusterNodes, Reason}})
end.
+setup_existing_node(ClusterNodes, Nodes) ->
+ DiscNodes = mnesia:table_info(schema, disc_copies),
+ case are_we_upgrader(DiscNodes) of
+ true ->
+ %% True single disc node, or last disc node in cluster to
+ %% shut down, attempt upgrade
+ ok = wait_for_tables(),
+ case rabbit_upgrade:maybe_upgrade(
+ [mnesia, local], fun () -> ok end,
+ fun forget_other_nodes/0) of
+ ok -> ensure_schema_ok();
+ version_not_available -> schema_ok_or_move()
+ end;
+ false ->
+ %% Subsequent node in cluster, catch up
+ case Nodes of
+ [AnotherNode|_] ->
+ ensure_version_ok(
+ rpc:call(AnotherNode, rabbit_upgrade, read_version, []));
+ [] ->
+ ok
+ end,
+ IsDiskNode = ClusterNodes == [] orelse
+ lists:member(node(), ClusterNodes),
+ case rabbit_upgrade:maybe_upgrade(
+ [local], ensure_nodes_running_fun(DiscNodes),
+ reset_fun(DiscNodes -- [node()])) 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,
+ 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),
+ ensure_schema_ok()
+ end.
+
schema_ok_or_move() ->
case check_schema_integrity() of
ok ->
@@ -476,7 +480,7 @@ ensure_nodes_running_fun(Nodes) ->
case nodes_running(Nodes) of
[] ->
exit("Cluster upgrade needed. The first node you start "
- "should be the last node to be shut down.");
+ "should be the last disc node to be shut down.");
_ ->
ok
end