diff options
author | Simon MacMullen <simon@rabbitmq.com> | 2011-04-06 17:08:54 +0100 |
---|---|---|
committer | Simon MacMullen <simon@rabbitmq.com> | 2011-04-06 17:08:54 +0100 |
commit | 03677a7ac3c173a83f5e29123d7cafde96cb4ef6 (patch) | |
tree | 01ec01e07ce0b159b7b36271b7bba60335750b1a /src | |
parent | 3aa8f702f49d253526b9571cc2a63bca0a0ee516 (diff) | |
download | rabbitmq-server-03677a7ac3c173a83f5e29123d7cafde96cb4ef6.tar.gz |
table_fold -> table_map
Diffstat (limited to 'src')
-rw-r--r-- | src/rabbit_binding.erl | 21 | ||||
-rw-r--r-- | src/rabbit_exchange.erl | 18 | ||||
-rw-r--r-- | src/rabbit_misc.erl | 27 |
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']}]). |