summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSimon MacMullen <simon@rabbitmq.com>2010-11-08 11:50:58 +0000
committerSimon MacMullen <simon@rabbitmq.com>2010-11-08 11:50:58 +0000
commit0cd23736f28817385eba70dfea045567da0e6194 (patch)
tree32794b15dc2c2b48debff0105659576d6cfb4a64
parent82ca678a98181071e4c72fd51b0d943e6771d004 (diff)
downloadrabbitmq-server-0cd23736f28817385eba70dfea045567da0e6194.tar.gz
Refactor a bit, have the first cluster node fail if version is wrong
-rw-r--r--src/rabbit_mnesia.erl81
1 files changed, 38 insertions, 43 deletions
diff --git a/src/rabbit_mnesia.erl b/src/rabbit_mnesia.erl
index 4cce2fb6..9bb70143 100644
--- a/src/rabbit_mnesia.erl
+++ b/src/rabbit_mnesia.erl
@@ -379,48 +379,23 @@ init_db(ClusterNodes, Force) ->
wait_for_tables(),
case rabbit_upgrade:maybe_upgrade() of
ok ->
- case check_schema_integrity() of
- ok ->
- ok;
- {error, Reason} ->
- throw({schema_invalid_after_upgrade,
- Reason})
- end;
+ schema_ok_or_exit();
version_not_available ->
schema_ok_or_move()
end;
{[], true, _} ->
- %% First disc node in cluster, verify schema
- DesiredVersion = rabbit_upgrade:desired_version(),
- case rabbit_upgrade:read_version() of
- {ok, DiscVersion} ->
- case DesiredVersion of
- DiscVersion ->
- ok;
- _ ->
- recreate_schema({DesiredVersion,
- DiscVersion})
- end,
- ok = check_schema_integrity();
- {error, _} ->
- schema_ok_or_move()
- end;
+ %% "Master" (i.e. without config) disc node in cluster,
+ %% verify schema
+ wait_for_tables(),
+ version_ok_or_exit(rabbit_upgrade:read_version()),
+ schema_ok_or_exit();
{[], false, _} ->
%% First RAM node in cluster, start from scratch
ok = create_schema();
{[AnotherNode|_], _, _} ->
%% Subsequent node in cluster, catch up
- DesiredVersion = rabbit_upgrade:desired_version(),
- {ok, DiscVersion} = rpc:call(
- AnotherNode,
- rabbit_upgrade, read_version, []),
- case DesiredVersion of
- DiscVersion ->
- ok;
- _ ->
- exit({schema_mismatch, DesiredVersion, DiscVersion})
- end,
- ok = rabbit_upgrade:write_version(),
+ version_ok_or_exit(
+ rpc:call(AnotherNode, rabbit_upgrade, read_version, [])),
IsDiskNode = ClusterNodes == [] orelse
lists:member(node(), ClusterNodes),
ok = wait_for_replicated_tables(),
@@ -429,7 +404,7 @@ init_db(ClusterNodes, Force) ->
true -> disc;
false -> ram
end),
- ok = ensure_schema_integrity()
+ schema_ok_or_exit()
end;
{error, Reason} ->
%% one reason we may end up here is if we try to join
@@ -444,17 +419,37 @@ schema_ok_or_move() ->
ok ->
ok;
{error, Reason} ->
- recreate_schema(Reason)
+ %% NB: we cannot use rabbit_log here since it may not have been
+ %% started yet
+ error_logger:warning_msg("schema integrity check failed: ~p~n"
+ "moving database to backup location "
+ "and recreating schema from scratch~n",
+ [Reason]),
+ ok = move_db(),
+ ok = create_schema()
+ end.
+
+version_ok_or_exit(V) ->
+ DesiredVersion = rabbit_upgrade:desired_version(),
+ case V of
+ {ok, DiscVersion} ->
+ case DesiredVersion of
+ DiscVersion ->
+ ok;
+ _ ->
+ exit({schema_mismatch, DesiredVersion, DiscVersion})
+ end;
+ {error, _} ->
+ ok = rabbit_upgrade:write_version()
end.
-recreate_schema(Reason) ->
- %% NB: we cannot use rabbit_log here since it may not have been
- %% started yet
- error_logger:warning_msg("schema integrity check failed: ~p~n"
- "moving database to backup location "
- "and recreating schema from scratch~n", [Reason]),
- ok = move_db(),
- ok = create_schema().
+schema_ok_or_exit() ->
+ case check_schema_integrity() of
+ ok ->
+ ok;
+ {error, Reason} ->
+ exit({schema_invalid, Reason})
+ end.
create_schema() ->
mnesia:stop(),