diff options
author | Francesco Mazzoli <francesco@rabbitmq.com> | 2012-09-21 11:15:00 +0100 |
---|---|---|
committer | Francesco Mazzoli <francesco@rabbitmq.com> | 2012-09-21 11:15:00 +0100 |
commit | 3b6fdaa7a21900a85a43c6f2fb6854fb5a9927eb (patch) | |
tree | fd2502d57092a2754e190fb3d7ac9dfcdb030349 | |
parent | 65d20fdc8c31f2cd263a48699bbf7806b580c57a (diff) | |
download | rabbitmq-server-3b6fdaa7a21900a85a43c6f2fb6854fb5a9927eb.tar.gz |
revert all the ordsets operations to lists
-rw-r--r-- | src/rabbit_mnesia.erl | 124 | ||||
-rw-r--r-- | src/rabbit_node_monitor.erl | 35 | ||||
-rw-r--r-- | src/rabbit_upgrade.erl | 16 |
3 files changed, 82 insertions, 93 deletions
diff --git a/src/rabbit_mnesia.erl b/src/rabbit_mnesia.erl index 3ffa75b0..324c5653 100644 --- a/src/rabbit_mnesia.erl +++ b/src/rabbit_mnesia.erl @@ -67,8 +67,7 @@ -export_type([node_type/0, cluster_status/0]). -type(node_type() :: disc | ram). --type(node_set() :: ordsets:ordset(node())). --type(cluster_status() :: {node_set(), node_set(), node_set()}). +-type(cluster_status() :: {[node()], [node()], [node()]}). %% Main interface -spec(init/0 :: () -> 'ok'). @@ -80,13 +79,13 @@ -spec(forget_cluster_node/2 :: (node(), boolean()) -> 'ok'). %% Various queries to get the status of the db --spec(status/0 :: () -> [{'nodes', [{node_type(), node_set()}]} | - {'running_nodes', node_set()}]). +-spec(status/0 :: () -> [{'nodes', [{node_type(), [node()]}]} | + {'running_nodes', [node()]}]). -spec(is_db_empty/0 :: () -> boolean()). -spec(is_clustered/0 :: () -> boolean()). --spec(all_clustered_nodes/0 :: () -> node_set()). --spec(clustered_disc_nodes/0 :: () -> node_set()). --spec(running_clustered_nodes/0 :: () -> node_set()). +-spec(all_clustered_nodes/0 :: () -> [node()]). +-spec(clustered_disc_nodes/0 :: () -> [node()]). +-spec(running_clustered_nodes/0 :: () -> [node()]). -spec(node_type/0 :: () -> node_type()). -spec(dir/0 :: () -> file:filename()). -spec(table_names/0 :: () -> [atom()]). @@ -94,7 +93,7 @@ cluster_status(), any())). %% Operations on the db and utils, mainly used in `rabbit_upgrade' and `rabbit' --spec(init_db_unchecked/2 :: (node_set(), node_type()) -> 'ok'). +-spec(init_db_unchecked/2 :: ([node()], node_type()) -> 'ok'). -spec(empty_ram_only_tables/0 :: () -> 'ok'). -spec(create_tables/0 :: () -> 'ok'). -spec(copy_db/1 :: (file:filename()) -> rabbit_types:ok_or_error(any())). @@ -148,7 +147,7 @@ init_from_config() -> rabbit_log:warning("Could not find any suitable node amongst the " "ones provided in the configuration: ~p~n", [TryNodes]), - init(disc, ordsets:from_list([node()])) + init(disc, [node()]) end. %% Make the node join a cluster. The node will be reset automatically @@ -255,7 +254,7 @@ change_cluster_node_type(Type) -> {ok, Status} -> Status; {error, _Reason} -> e(cannot_connect_to_cluster) end, - Node = case ordsets:to_list(RunningNodes) of + Node = case RunningNodes of [] -> e(no_online_cluster_nodes); [Node0|_] -> Node0 end, @@ -292,7 +291,7 @@ update_cluster_nodes(DiscoveryNode) -> %% the last or second to last after the node we're removing to go %% down forget_cluster_node(Node, RemoveWhenOffline) -> - case ordsets:is_element(Node, all_clustered_nodes()) of + case lists:member(Node, all_clustered_nodes()) of true -> ok; false -> e(not_a_cluster_node) end, @@ -312,10 +311,8 @@ forget_cluster_node(Node, RemoveWhenOffline) -> end. remove_node_offline_node(Node) -> - case {empty_set( - ordsets:del_element(Node, running_nodes(all_clustered_nodes()))), - node_type()} of - {true, disc} -> + case {running_nodes(all_clustered_nodes()) -- [Node], node_type()} of + {[], disc} -> %% Note that while we check if the nodes was the last to %% go down, apart from the node we're removing from, this %% is still unsafe. Consider the situation in which A and @@ -324,20 +321,19 @@ remove_node_offline_node(Node) -> %% and B goes down. In this case, C is the second-to-last, %% but we don't know that and we'll remove B from A %% anyway, even if that will lead to bad things. - case empty_set(ordsets:subtract(running_clustered_nodes(), - ordsets:from_list([node(), Node]))) - of true -> start_mnesia(), - try - [mnesia:force_load_table(T) || - T <- rabbit_mnesia:table_names()], - forget_cluster_node(Node, false), - ensure_mnesia_running() - after + case running_clustered_nodes() -- [node(), Node] of + [] -> start_mnesia(), + try + [mnesia:force_load_table(T) || + T <- rabbit_mnesia:table_names()], + forget_cluster_node(Node, false), + ensure_mnesia_running() + after stop_mnesia() - end; - false -> e(not_last_node_to_go_down) + end; + _ -> e(not_last_node_to_go_down) end; - {false, _} -> + {_, _} -> e(removing_node_from_offline_node) end. @@ -347,11 +343,8 @@ remove_node_offline_node(Node) -> %%---------------------------------------------------------------------------- status() -> - IfNonEmpty = fun (Type, Nodes) -> - case empty_set(Nodes) of - true -> []; - false -> [{Type, ordsets:to_list(Nodes)}] - end + IfNonEmpty = fun (_, []) -> []; + (Type, Nodes) -> [{Type, Nodes}] end, [{nodes, (IfNonEmpty(disc, clustered_disc_nodes()) ++ IfNonEmpty(ram, clustered_ram_nodes()))}] ++ @@ -366,7 +359,7 @@ is_db_empty() -> is_clustered() -> AllNodes = all_clustered_nodes(), - not is_only_node(AllNodes) andalso not empty_set(AllNodes). + not is_only_node(AllNodes) andalso AllNodes =/= []. is_disc_and_clustered() -> node_type() =:= disc andalso is_clustered(). @@ -377,14 +370,14 @@ all_clustered_nodes() -> cluster_status(all). clustered_disc_nodes() -> cluster_status(disc). -clustered_ram_nodes() -> ordsets:subtract(cluster_status(all), - cluster_status(disc)). +clustered_ram_nodes() -> cluster_status(all) -- cluster_status(disc). running_clustered_nodes() -> cluster_status(running). running_clustered_disc_nodes() -> {_AllNodes, DiscNodes, RunningNodes} = cluster_status(status), - ordsets:intersection(DiscNodes, RunningNodes). + ordsets:intersection(ordsets:from_list(DiscNodes), + ordsets:from_list(RunningNodes)). %% This function is the actual source of information, since it gets %% the data from mnesia. Obviously it'll work only when mnesia is @@ -406,15 +399,12 @@ mnesia_nodes() -> [{Table, _} | _] = table_definitions(NodeType), case lists:member(Table, Tables) of true -> - AllNodes = - ordsets:from_list(mnesia:system_info(db_nodes)), - DiscCopies = ordsets:from_list( - mnesia:table_info(schema, disc_copies)), - DiscNodes = - case NodeType of - disc -> nodes_incl_me(DiscCopies); - ram -> DiscCopies - end, + AllNodes = mnesia:system_info(db_nodes), + DiscCopies = mnesia:table_info(schema, disc_copies), + DiscNodes = case NodeType of + disc -> nodes_incl_me(DiscCopies); + ram -> DiscCopies + end, {ok, {AllNodes, DiscNodes}}; false -> {error, tables_not_present} @@ -457,7 +447,7 @@ node_info() -> node_type() -> DiscNodes = clustered_disc_nodes(), - case empty_set(DiscNodes) orelse me_in_nodes(DiscNodes) of + case DiscNodes =:= [] orelse me_in_nodes(DiscNodes) of true -> disc; false -> ram end. @@ -647,7 +637,8 @@ check_cluster_consistency() -> end, {error, not_found}, nodes_excl_me(all_clustered_nodes())) of {ok, Status = {RemoteAllNodes, _, _}} -> - case ordsets:is_subset(all_clustered_nodes(), RemoteAllNodes) of + case ordsets:is_subset(ordsets:from_list(all_clustered_nodes()), + ordsets:from_list(RemoteAllNodes)) of true -> ok; false -> @@ -695,9 +686,9 @@ on_node_up(Node) -> end. on_node_down(_Node) -> - case empty_set(running_clustered_disc_nodes()) of - true -> rabbit_log:info("only running disc node went down~n"); - false -> ok + case running_clustered_disc_nodes() of + [] -> rabbit_log:info("only running disc node went down~n"); + _ -> ok end. %%-------------------------------------------------------------------- @@ -995,15 +986,12 @@ remove_node_if_mnesia_running(Node) -> leave_cluster() -> RunningNodes = running_nodes(nodes_excl_me(all_clustered_nodes())), - case not is_clustered() andalso empty_set(RunningNodes) of - true -> - ok; - false -> - case lists:any(fun leave_cluster/1, - ordsets:to_list(RunningNodes)) of - true -> ok; - false -> e(no_running_cluster_nodes) - end + case not is_clustered() andalso RunningNodes =:= [] of + true -> ok; + false -> case lists:any(fun leave_cluster/1, RunningNodes) of + true -> ok; + false -> e(no_running_cluster_nodes) + end end. leave_cluster(Node) -> @@ -1035,7 +1023,7 @@ stop_mnesia() -> ensure_mnesia_not_running(). change_extra_db_nodes(ClusterNodes0, CheckOtherNodes) -> - ClusterNodes = ordsets:to_list(nodes_excl_me(ClusterNodes0)), + ClusterNodes = nodes_excl_me(ClusterNodes0), case {mnesia:change_config(extra_db_nodes, ClusterNodes), ClusterNodes} of {{ok, []}, [_|_]} when CheckOtherNodes -> throw({error, {failed_to_cluster_with, ClusterNodes, @@ -1049,9 +1037,9 @@ change_extra_db_nodes(ClusterNodes0, CheckOtherNodes) -> %% return false positives when we are actually just doing cluster %% operations (e.g. joining the cluster). running_nodes(Nodes) -> - {Replies, _BadNodes} = rpc:multicall(ordsets:to_list(Nodes), rabbit_mnesia, - is_running_remote, []), - ordsets:from_list([Node || {Running, Node} <- Replies, Running]). + {Replies, _BadNodes} = + rpc:multicall(Nodes, rabbit_mnesia, is_running_remote, []), + [Node || {Running, Node} <- Replies, Running]. is_running_remote() -> {proplists:is_defined(rabbit, application:which_applications(infinity)), @@ -1119,19 +1107,17 @@ find_good_node([Node | Nodes]) -> end end. -is_only_node(Node, Nodes) -> ordsets:to_list(Nodes) == [Node]. +is_only_node(Node, Nodes) -> Nodes =:= [Node]. is_only_node(Nodes) -> is_only_node(node(), Nodes). is_only_disc_node() -> is_only_node(clustered_disc_nodes()). -me_in_nodes(Nodes) -> ordsets:is_element(node(), Nodes). - -nodes_incl_me(Nodes) -> ordsets:add_element(node(), Nodes). +me_in_nodes(Nodes) -> lists:member(node(), Nodes). -nodes_excl_me(Nodes) -> ordsets:del_element(node(), Nodes). +nodes_incl_me(Nodes) -> lists:usort([node()|Nodes]). -empty_set(Set) -> ordsets:size(Set) =:= 0. +nodes_excl_me(Nodes) -> Nodes -- [node()]. e(Tag) -> throw({error, {Tag, error_description(Tag)}}). diff --git a/src/rabbit_node_monitor.erl b/src/rabbit_node_monitor.erl index 288f3e42..f5877c9b 100644 --- a/src/rabbit_node_monitor.erl +++ b/src/rabbit_node_monitor.erl @@ -96,11 +96,11 @@ prepare_cluster_status_files() -> ThisNode = [node()], %% The running nodes file might contain a set or a list, in case of the %% legacy file - RunningNodes2 = ordsets:from_list(ThisNode ++ RunningNodes1), + RunningNodes2 = lists:usort(ThisNode ++ RunningNodes1), {AllNodes1, WantDiscNode} = case try_read_file(cluster_status_filename()) of {ok, [{AllNodes, DiscNodes0}]} -> - {AllNodes, ordsets:is_element(node(), DiscNodes0)}; + {AllNodes, lists:member(node(), DiscNodes0)}; {ok, [AllNodes0]} when is_list(AllNodes0) -> {legacy_cluster_nodes(AllNodes0), legacy_should_be_disc_node(AllNodes0)}; @@ -109,7 +109,7 @@ prepare_cluster_status_files() -> {error, enoent} -> {legacy_cluster_nodes([]), true} end, - AllNodes2 = ordsets:union(AllNodes1, RunningNodes2), + AllNodes2 = lists:usort(AllNodes1 ++ RunningNodes2), DiscNodes = case WantDiscNode of true -> ThisNode; false -> [] @@ -179,7 +179,7 @@ node_up(Node, IsDiscNode) -> notify_node_up() -> Nodes = cluster_multicall(node_up, [node(), rabbit_mnesia:node_type()]), %% register other active rabbits with this rabbit - [ node_up(N, ordsets:is_element(N, rabbit_mnesia:clustered_disc_nodes())) || + [ node_up(N, lists:member(N, rabbit_mnesia:clustered_disc_nodes())) || N <- Nodes ], ok. @@ -203,31 +203,29 @@ handle_cast({node_up, Node, NodeType}, State) -> true -> {noreply, State}; false -> rabbit_log:info("rabbit on node ~p up~n", [Node]), {AllNodes, DiscNodes, RunningNodes} = read_cluster_status(), - write_cluster_status({ordsets:add_element(Node, AllNodes), + write_cluster_status({add_node(Node, AllNodes), case NodeType of - disc -> ordsets:add_element( - Node, DiscNodes); + disc -> add_node(Node, DiscNodes); ram -> DiscNodes end, - ordsets:add_element(Node, RunningNodes)}), + add_node(Node, RunningNodes)}), erlang:monitor(process, {rabbit, Node}), ok = handle_live_rabbit(Node), {noreply, State} end; handle_cast({joined_cluster, Node, NodeType}, State) -> {AllNodes, DiscNodes, RunningNodes} = read_cluster_status(), - write_cluster_status({ordsets:add_element(Node, AllNodes), + write_cluster_status({add_node(Node, AllNodes), case NodeType of - disc -> ordsets:add_element(Node, DiscNodes); + disc -> add_node(Node, DiscNodes); ram -> DiscNodes end, RunningNodes}), {noreply, State}; handle_cast({left_cluster, Node}, State) -> {AllNodes, DiscNodes, RunningNodes} = read_cluster_status(), - write_cluster_status({ordsets:del_element(Node, AllNodes), - ordsets:del_element(Node, DiscNodes), - ordsets:del_element(Node, RunningNodes)}), + write_cluster_status({del_node(Node, AllNodes), del_node(Node, DiscNodes), + del_node(Node, RunningNodes)}), {noreply, State}; handle_cast(_Msg, State) -> {noreply, State}. @@ -235,8 +233,7 @@ handle_cast(_Msg, State) -> handle_info({'DOWN', _MRef, process, {rabbit, Node}, _Reason}, State) -> rabbit_log:info("rabbit on node ~p down~n", [Node]), {AllNodes, DiscNodes, RunningNodes} = read_cluster_status(), - write_cluster_status({AllNodes, DiscNodes, - ordsets:del_element(Node, RunningNodes)}), + write_cluster_status({AllNodes, DiscNodes, del_node(Node, RunningNodes)}), ok = handle_dead_rabbit(Node), {noreply, State}; handle_info(_Info, State) -> @@ -289,7 +286,13 @@ is_already_monitored(Item) -> legacy_cluster_nodes(Nodes) -> %% We get all the info that we can, including the nodes from mnesia, which %% will be there if the node is a disc node (empty list otherwise) - ordsets:from_list(Nodes ++ mnesia:system_info(db_nodes)). + lists:usort(Nodes ++ mnesia:system_info(db_nodes)). legacy_should_be_disc_node(DiscNodes) -> DiscNodes == [] orelse lists:member(node(), DiscNodes). + +add_node(Node, Nodes) -> + lists:usort([Node|Nodes]). + +del_node(Node, Nodes) -> + Nodes -- [Node]. diff --git a/src/rabbit_upgrade.erl b/src/rabbit_upgrade.erl index 4f34504e..bfc3e006 100644 --- a/src/rabbit_upgrade.erl +++ b/src/rabbit_upgrade.erl @@ -126,11 +126,11 @@ maybe_upgrade_mnesia() -> {error, starting_from_scratch} -> ok; {error, version_not_available} -> - case ordsets:size(AllNodes) of - 0 -> die("Cluster upgrade needed but upgrading from " - "< 2.1.1.~nUnfortunately you will need to " - "rebuild the cluster.", []); - _ -> ok + case AllNodes of + [] -> die("Cluster upgrade needed but upgrading from " + "< 2.1.1.~nUnfortunately you will need to " + "rebuild the cluster.", []); + _ -> ok end; {error, _} = Err -> throw(Err); @@ -145,7 +145,7 @@ maybe_upgrade_mnesia() -> end. upgrade_mode(AllNodes) -> - case nodes_running(ordsets:to_list(AllNodes)) of + case nodes_running(AllNodes) of [] -> AfterUs = rabbit_mnesia:running_clustered_nodes() -- [node()], case {node_type_legacy(), AfterUs} of @@ -196,7 +196,7 @@ die(Msg, Args) -> halt(1). primary_upgrade(Upgrades, Nodes) -> - Others = ordsets:del_element(node(), Nodes), + Others = Nodes -- [node()], ok = apply_upgrades( mnesia, Upgrades, @@ -206,7 +206,7 @@ primary_upgrade(Upgrades, Nodes) -> [] -> ok; _ -> info("mnesia upgrades: Breaking cluster~n", []), [{atomic, ok} = mnesia:del_table_copy(schema, Node) - || Node <- ordsets:to_list(Others)] + || Node <- Others] end end), ok. |