From 03677a7ac3c173a83f5e29123d7cafde96cb4ef6 Mon Sep 17 00:00:00 2001 From: Simon MacMullen Date: Wed, 6 Apr 2011 17:08:54 +0100 Subject: table_fold -> table_map --- src/rabbit_binding.erl | 21 +++++++++++---------- src/rabbit_exchange.erl | 18 ++++++++---------- src/rabbit_misc.erl | 27 +++++++++++++++------------ 3 files changed, 34 insertions(+), 32 deletions(-) (limited to 'src') 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']}]). -- cgit v1.2.1