diff options
| author | Matthew Sackman <matthew@lshift.net> | 2009-06-05 17:10:33 +0100 |
|---|---|---|
| committer | Matthew Sackman <matthew@lshift.net> | 2009-06-05 17:10:33 +0100 |
| commit | f2fd94e983f4f7007a6041576f12b07125722bbb (patch) | |
| tree | 3926d0296dfa94d33d7d6edb477850e953938084 | |
| parent | 8c0cb1225d6ffdee0df6a55cd42242c7536ce2be (diff) | |
| download | rabbitmq-server-git-f2fd94e983f4f7007a6041576f12b07125722bbb.tar.gz | |
All tests pass. Including clustering tests. "ram-nodes" in clustering now have mnesia schemas, but the tables are created as ram tables (other than the disk_queue, which does its own thing and is either disc_copies or disc_only_copies, but that table is also local_content - we don't want to try and duplicate that state across nodes).
| -rw-r--r-- | src/rabbit_mnesia.erl | 42 | ||||
| -rw-r--r-- | src/rabbit_tests.erl | 37 |
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, []), |
