diff options
author | Simon MacMullen <simon@rabbitmq.com> | 2010-11-02 14:23:58 +0000 |
---|---|---|
committer | Simon MacMullen <simon@rabbitmq.com> | 2010-11-02 14:23:58 +0000 |
commit | 2ca0fae3877eeab9b068e83fb014c62937458cc2 (patch) | |
tree | afb914fa8a517749d822249d95d2213da0027b7e | |
parent | 7a9b982521d4e60938d3fb296d0e08c2ce8b174a (diff) | |
download | rabbitmq-server-2ca0fae3877eeab9b068e83fb014c62937458cc2.tar.gz |
Blow up if the upgrade does not leave us with a valid schema. Refactor several nested case expressions into one big one.
-rw-r--r-- | src/rabbit_mnesia.erl | 56 |
1 files changed, 31 insertions, 25 deletions
diff --git a/src/rabbit_mnesia.erl b/src/rabbit_mnesia.erl index bd48e75a..daa78c36 100644 --- a/src/rabbit_mnesia.erl +++ b/src/rabbit_mnesia.erl @@ -372,33 +372,39 @@ init_db(ClusterNodes, Force) -> end; _ -> ok end, - case Nodes of - [] -> - case mnesia:system_info(use_dir) of - true -> - case mnesia:system_info(db_nodes) of - [_] -> wait_for_tables(), - rabbit_upgrade:maybe_upgrade(dir()); - _ -> ok - end, - case check_schema_integrity() of - ok -> - ok; - {error, 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; - false -> + case {Nodes, mnesia:system_info(use_dir), + mnesia:system_info(db_nodes)} of + {[], true, [_]} -> + %% True single disc node, attempt upgrade + wait_for_tables(), + rabbit_upgrade:maybe_upgrade(dir()), + case check_schema_integrity() of + ok -> + ok; + {error, Reason} -> + throw({schema_invalid_after_upgrade, Reason}) + end; + {[], true, _} -> + %% First disc node in cluster, verify schema + case check_schema_integrity() of + ok -> + ok; + {error, 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; - [_|_] -> + {[], false, _} -> + %% First RAM node in cluster, start from scratch + ok = create_schema(); + {[_|_], _, _} -> + %% Subsequent node in cluster, catch up IsDiskNode = ClusterNodes == [] orelse lists:member(node(), ClusterNodes), ok = wait_for_replicated_tables(), |