summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorSimon MacMullen <simon@rabbitmq.com>2011-04-06 17:08:54 +0100
committerSimon MacMullen <simon@rabbitmq.com>2011-04-06 17:08:54 +0100
commit03677a7ac3c173a83f5e29123d7cafde96cb4ef6 (patch)
tree01ec01e07ce0b159b7b36271b7bba60335750b1a /src
parent3aa8f702f49d253526b9571cc2a63bca0a0ee516 (diff)
downloadrabbitmq-server-03677a7ac3c173a83f5e29123d7cafde96cb4ef6.tar.gz
table_fold -> table_map
Diffstat (limited to 'src')
-rw-r--r--src/rabbit_binding.erl21
-rw-r--r--src/rabbit_exchange.erl18
-rw-r--r--src/rabbit_misc.erl27
3 files changed, 34 insertions, 32 deletions
diff --git a/src/rabbit_binding.erl b/src/rabbit_binding.erl
index b7bebc39..b2d84143 100644
--- a/src/rabbit_binding.erl
+++ b/src/rabbit_binding.erl
@@ -97,17 +97,17 @@
recover(XNames, QNames) ->
XNameSet = sets:from_list(XNames),
QNameSet = sets:from_list(QNames),
- rabbit_misc:table_fold(
+ rabbit_misc:table_map(
fun (Route = #route{binding = B =
#binding{destination = Dst =
- #resource{kind = Kind}}}, _Acc) ->
+ #resource{kind = Kind}}}) ->
%% The check against rabbit_durable_route is in case it
%% disappeared between getting the list and here
- case (not (mnesia:read({rabbit_durable_route, B}) =:= []) andalso
- sets:is_element(Dst, case Kind of
- exchange -> XNameSet;
- queue -> QNameSet
- end)) of
+ case mnesia:read({rabbit_durable_route, B}) =/= [] andalso
+ sets:is_element(Dst, case Kind of
+ exchange -> XNameSet;
+ queue -> QNameSet
+ end) of
true -> ok = sync_transient_binding(
Route, fun mnesia:write/3),
B;
@@ -115,12 +115,13 @@ recover(XNames, QNames) ->
end
end,
fun (none, _Tx) ->
- ok;
+ none;
(B = #binding{source = Src}, Tx) ->
{ok, X} = rabbit_exchange:lookup(Src),
- rabbit_exchange:callback(X, add_bindings, [Tx, X, [B]])
+ rabbit_exchange:callback(X, add_bindings, [Tx, X, [B]]),
+ B
end,
- none, rabbit_durable_route),
+ rabbit_durable_route),
ok.
exists(Binding) ->
diff --git a/src/rabbit_exchange.erl b/src/rabbit_exchange.erl
index a2684782..2fe98e4b 100644
--- a/src/rabbit_exchange.erl
+++ b/src/rabbit_exchange.erl
@@ -83,21 +83,19 @@
-define(INFO_KEYS, [name, type, durable, auto_delete, internal, arguments]).
recover() ->
- Xs = rabbit_misc:table_fold(
- fun (X = #exchange{name = XName}, Acc) ->
+ Xs = rabbit_misc:table_map(
+ fun (X = #exchange{name = XName}) ->
case mnesia:read({rabbit_exchange, XName}) of
[] -> ok = mnesia:write(rabbit_exchange, X, write),
- [X | Acc];
- [_] -> Acc
+ X;
+ [_] -> none
end
end,
- fun ([], _Tx) ->
- [];
- (Acc = [X | _], Tx) ->
- rabbit_exchange:callback(X, create, [Tx, X]),
- Acc
+ fun (none, _Tx) -> none;
+ (X, Tx) -> rabbit_exchange:callback(X, create, [Tx, X]),
+ X
end,
- [], rabbit_durable_exchange),
+ rabbit_durable_exchange),
[XName || #exchange{name = XName} <- Xs].
callback(#exchange{type = XType}, Fun, Args) ->
diff --git a/src/rabbit_misc.erl b/src/rabbit_misc.erl
index 324ec534..6bebf005 100644
--- a/src/rabbit_misc.erl
+++ b/src/rabbit_misc.erl
@@ -38,7 +38,7 @@
-export([ensure_ok/2]).
-export([makenode/1, nodeparts/1, cookie_hash/0, tcp_name/3]).
-export([upmap/2, map_in_order/2]).
--export([table_fold/4]).
+-export([table_map/3]).
-export([dirty_read_all/1, dirty_foreach_key/2, dirty_dump_log/1]).
-export([read_term_file/1, write_term_file/2]).
-export([append_file/2, ensure_parent_dirs_exist/1]).
@@ -146,8 +146,7 @@
-> atom()).
-spec(upmap/2 :: (fun ((A) -> B), [A]) -> [B]).
-spec(map_in_order/2 :: (fun ((A) -> B), [A]) -> [B]).
--spec(table_fold/4 :: (fun ((any(), A) -> A), fun ((A, boolean()) -> A), A,
- atom()) -> A).
+-spec(table_map/3 :: (fun ((A) -> A), fun ((A, boolean()) -> A), atom()) -> A).
-spec(dirty_read_all/1 :: (atom()) -> [any()]).
-spec(dirty_foreach_key/2 :: (fun ((any()) -> any()), atom())
-> 'ok' | 'aborted').
@@ -467,16 +466,20 @@ map_in_order(F, L) ->
%% around the lot.
%%
%% We ignore entries that have been modified or removed.
-table_fold(Fun, PrePostCommitFun, Acc0, TableName) ->
+table_map(Fun, PrePostCommitFun, TableName) ->
lists:foldl(
- fun (E, Acc) -> execute_mnesia_transaction(
- fun () -> case mnesia:match_object(TableName, E, read) of
- [] -> Acc;
- _ -> Fun(E, Acc)
- end
- end,
- PrePostCommitFun)
- end, Acc0, dirty_read_all(TableName)).
+ fun (E, Acc) -> case execute_mnesia_transaction(
+ fun () -> case mnesia:match_object(TableName, E,
+ read) of
+ [] -> Acc;
+ _ -> Fun(E)
+ end
+ end,
+ PrePostCommitFun) of
+ none -> Acc;
+ Res -> [Res | Acc]
+ end
+ end, [], dirty_read_all(TableName)).
dirty_read_all(TableName) ->
mnesia:dirty_select(TableName, [{'$1',[],['$1']}]).