diff options
| -rw-r--r-- | src/rabbit_mnesia.erl | 61 |
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 -> |
