From: Badlop Date: Fri, 15 Jul 2011 00:49:35 +0000 (+0200) Subject: Try first to get table of the specific Host, otherwise try 'global' X-Git-Tag: v3.0.0-alpha-4~58 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=86859e52344b0f831a8ef85030dc787bac663779;p=ejabberd Try first to get table of the specific Host, otherwise try 'global' --- diff --git a/src/gen_storage.erl b/src/gen_storage.erl index 654a39850..033a14561 100644 --- a/src/gen_storage.erl +++ b/src/gen_storage.erl @@ -118,9 +118,6 @@ table_info(Host, Tab, InfoKey) -> -spec create_table(atom(), storage_host(), storage_table(), list()) -> tuple(). -create_table(Backend, global, Tab, Def) -> - [create_table(Backend, list_to_binary(Host), Tab, Def) || Host <- ejabberd_hosts:get_hosts(ejabberd)]; - create_table(mnesia, Host, Tab, Def) -> MDef = filter_mnesia_tabdef(Def), define_table(mnesia, Host, Tab, #mnesia_def{table = Tab, @@ -600,14 +597,16 @@ async_dirty(Host, Tab, Fun) -> get_table(Host, Tab) when is_list(Host) -> get_table(list_to_binary(Host), Tab); get_table(Host, Tab) -> - case mnesia:dirty_read(table, {Host, Tab}) of - [T] -> + case {mnesia:dirty_read(table, {Host, Tab}), Host} of + {[T], _} -> T; - _ -> + {_, global} -> catch throw(error123), Stacktrace = erlang:get_stacktrace(), error_logger:error_msg("gen_storage: Table ~p not found on ~p~nStacktrace: ~p", [Tab, Host, Stacktrace]), - exit(table_not_found) + exit(table_not_found); + {_, _} -> + get_table(global, Tab) end. backend_apply(F, Host, Tab) ->