summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/rabbit_mnesia.erl42
-rw-r--r--src/rabbit_tests.erl37
2 files changed, 41 insertions, 38 deletions
diff --git a/src/rabbit_mnesia.erl b/src/rabbit_mnesia.erl
index cddcab643e..77e309fe84 100644
--- a/src/rabbit_mnesia.erl
+++ b/src/rabbit_mnesia.erl
@@ -153,9 +153,17 @@ table_definitions() ->
{disc_only_copies, [node()]}]}
].
+replicated_table_definitions() ->
+ [{Tab, Attrs} || {Tab, Attrs} <- table_definitions(),
+ not lists:member({local_content, true}, Attrs)
+ ].
+
table_names() ->
[Tab || {Tab, _} <- table_definitions()].
+replicated_table_names() ->
+ [Tab || {Tab, _} <- replicated_table_definitions()].
+
dir() -> mnesia:system_info(directory).
ensure_mnesia_dir() ->
@@ -180,7 +188,7 @@ ensure_mnesia_not_running() ->
check_schema_integrity() ->
%%TODO: more thorough checks
- case catch [mnesia:table_info(Tab, version) || Tab <- table_names()] of
+ case catch [mnesia:table_info(Tab, version) || Tab <- replicated_table_names()] of
{'EXIT', Reason} -> {error, Reason};
_ -> ok
end.
@@ -260,9 +268,10 @@ init_db(ClusterNodes) ->
WasDiskNode = mnesia:system_info(use_dir),
IsDiskNode = ClusterNodes == [] orelse
lists:member(node(), ClusterNodes),
- case mnesia:change_config(extra_db_nodes, ClusterNodes -- [node()]) of
+ ExtraNodes = ClusterNodes -- [node()],
+ case mnesia:change_config(extra_db_nodes, ExtraNodes) of
{ok, []} ->
- if WasDiskNode and IsDiskNode ->
+ if WasDiskNode ->
case check_schema_integrity() of
ok ->
ok;
@@ -277,14 +286,8 @@ init_db(ClusterNodes) ->
ok = move_db(),
ok = create_schema()
end;
- WasDiskNode ->
- throw({error, {cannot_convert_disk_node_to_ram_node,
- ClusterNodes}});
- IsDiskNode ->
- ok = create_schema();
true ->
- throw({error, {unable_to_contact_cluster_nodes,
- ClusterNodes}})
+ ok = create_schema()
end;
{ok, [_|_]} ->
ok = wait_for_tables(),
@@ -344,15 +347,19 @@ create_tables() ->
ok.
create_local_table_copies(Type) ->
- ok = if Type /= ram -> create_local_table_copy(schema, disc_copies);
- true -> ok
- end,
+ ok = create_local_table_copy(schema, disc_copies),
lists:foreach(
fun({Tab, TabDef}) ->
HasDiscCopies =
- lists:keymember(disc_copies, 1, TabDef),
+ case lists:keysearch(disc_copies, 1, TabDef) of
+ false -> false;
+ {value, {disc_copies, List1}} -> lists:member(node(), List1)
+ end,
HasDiscOnlyCopies =
- lists:keymember(disc_only_copies, 1, TabDef),
+ case lists:keysearch(disc_only_copies, 1, TabDef) of
+ false -> false;
+ {value, {disc_only_copies, List2}} -> lists:member(node(), List2)
+ end,
StorageType =
case Type of
disc ->
@@ -374,9 +381,6 @@ create_local_table_copies(Type) ->
ok = create_local_table_copy(Tab, StorageType)
end,
table_definitions()),
- ok = if Type == ram -> create_local_table_copy(schema, ram_copies);
- true -> ok
- end,
ok.
create_local_table_copy(Tab, Type) ->
@@ -394,7 +398,7 @@ create_local_table_copy(Tab, Type) ->
wait_for_tables() ->
case check_schema_integrity() of
ok ->
- case mnesia:wait_for_tables(table_names(), 30000) of
+ case mnesia:wait_for_tables(replicated_table_names(), 30000) of
ok -> ok;
{timeout, BadTabs} ->
throw({error, {timeout_waiting_for_tables, BadTabs}});
diff --git a/src/rabbit_tests.erl b/src/rabbit_tests.erl
index 70fc45e099..849f8c2ad7 100644
--- a/src/rabbit_tests.erl
+++ b/src/rabbit_tests.erl
@@ -407,19 +407,17 @@ test_cluster_management() ->
end,
ClusteringSequence),
- %% attempt to convert a disk node into a ram node
+ %% convert a disk node into a ram node
ok = control_action(reset, []),
ok = control_action(start_app, []),
ok = control_action(stop_app, []),
- {error, {cannot_convert_disk_node_to_ram_node, _}} =
- control_action(cluster, ["invalid1@invalid",
- "invalid2@invalid"]),
+ ok = control_action(cluster, ["invalid1@invalid",
+ "invalid2@invalid"]),
- %% attempt to join a non-existing cluster as a ram node
+ %% join a non-existing cluster as a ram node
ok = control_action(reset, []),
- {error, {unable_to_contact_cluster_nodes, _}} =
- control_action(cluster, ["invalid1@invalid",
- "invalid2@invalid"]),
+ ok = control_action(cluster, ["invalid1@invalid",
+ "invalid2@invalid"]),
SecondaryNode = rabbit_misc:localnode(hare),
case net_adm:ping(SecondaryNode) of
@@ -435,11 +433,12 @@ test_cluster_management2(SecondaryNode) ->
NodeS = atom_to_list(node()),
SecondaryNodeS = atom_to_list(SecondaryNode),
- %% attempt to convert a disk node into a ram node
+ %% make a disk node
ok = control_action(reset, []),
ok = control_action(cluster, [NodeS]),
- {error, {unable_to_join_cluster, _, _}} =
- control_action(cluster, [SecondaryNodeS]),
+ %% make a ram node
+ ok = control_action(reset, []),
+ ok = control_action(cluster, [SecondaryNodeS]),
%% join cluster as a ram node
ok = control_action(reset, []),
@@ -452,21 +451,21 @@ test_cluster_management2(SecondaryNode) ->
ok = control_action(start_app, []),
ok = control_action(stop_app, []),
- %% attempt to join non-existing cluster as a ram node
- {error, _} = control_action(cluster, ["invalid1@invalid",
- "invalid2@invalid"]),
-
+ %% join non-existing cluster as a ram node
+ ok = control_action(cluster, ["invalid1@invalid",
+ "invalid2@invalid"]),
%% turn ram node into disk node
+ ok = control_action(reset, []),
ok = control_action(cluster, [SecondaryNodeS, NodeS]),
ok = control_action(start_app, []),
ok = control_action(stop_app, []),
- %% attempt to convert a disk node into a ram node
- {error, {cannot_convert_disk_node_to_ram_node, _}} =
- control_action(cluster, ["invalid1@invalid",
- "invalid2@invalid"]),
+ %% convert a disk node into a ram node
+ ok = control_action(cluster, ["invalid1@invalid",
+ "invalid2@invalid"]),
%% turn a disk node into a ram node
+ ok = control_action(reset, []),
ok = control_action(cluster, [SecondaryNodeS]),
ok = control_action(start_app, []),
ok = control_action(stop_app, []),