diff --git a/src/ejabberd_riak_sup.erl b/src/ejabberd_riak_sup.erl index 871af5a06..bb36eb44d 100644 --- a/src/ejabberd_riak_sup.erl +++ b/src/ejabberd_riak_sup.erl @@ -75,7 +75,7 @@ is_riak_configured(Host) -> fun(L) when is_list(L) -> L end, []), ModuleWithRiakDBConfigured = lists:any( fun({_Module, Opts}) -> - gen_mod:db_type(Opts) == riak + gen_mod:db_type(Host, Opts) == riak end, Modules), ServerConfigured or PortConfigured or AuthConfigured or ModuleWithRiakDBConfigured. diff --git a/src/gen_mod.erl b/src/gen_mod.erl index 645e3142d..e628b06ab 100644 --- a/src/gen_mod.erl +++ b/src/gen_mod.erl @@ -33,7 +33,7 @@ get_opt_host/3, db_type/1, db_type/2, get_module_opt/5, get_module_opt_host/3, loaded_modules/1, loaded_modules_with_opts/1, get_hosts/2, - get_module_proc/2, is_loaded/2]). + get_module_proc/2, is_loaded/2, default_db/1]). %%-export([behaviour_info/1]). @@ -212,24 +212,36 @@ get_opt_host(Host, Opts, Default) -> -spec db_type(opts()) -> odbc | mnesia | riak. db_type(Opts) -> - get_opt(db_type, Opts, - fun(odbc) -> odbc; - (internal) -> mnesia; - (mnesia) -> mnesia; - (riak) -> riak - end, - mnesia). + db_type(global, Opts). --spec db_type(binary(), atom()) -> odbc | mnesia | riak. +-spec db_type(binary() | global, atom() | opts()) -> odbc | mnesia | riak. -db_type(Host, Module) -> +db_type(Host, Module) when is_atom(Module) -> get_module_opt(Host, Module, db_type, fun(odbc) -> odbc; (internal) -> mnesia; (mnesia) -> mnesia; (riak) -> riak end, - mnesia). + default_db(Host)); +db_type(Host, Opts) when is_list(Opts) -> + get_opt(db_type, Opts, + fun(odbc) -> odbc; + (internal) -> mnesia; + (mnesia) -> mnesia; + (riak) -> riak + end, + default_db(Host)). + +-spec default_db(binary() | global) -> odbc | mnesia | riak. + +default_db(Host) -> + ejabberd_config:get_option({default_db, Host}, + fun(odbc) -> odbc; + (mnesia) -> mnesia; + (riak) -> riak; + (internal) -> mnesia + end, mnesia). -spec loaded_modules(binary()) -> [atom()]. diff --git a/src/mod_announce.erl b/src/mod_announce.erl index 0e7c9fa32..542417ff3 100644 --- a/src/mod_announce.erl +++ b/src/mod_announce.erl @@ -64,7 +64,7 @@ tokenize(Node) -> str:tokens(Node, <<"/#">>). start(Host, Opts) -> - case gen_mod:db_type(Opts) of + case gen_mod:db_type(Host, Opts) of mnesia -> mnesia:create_table(motd, [{disc_copies, [node()]}, diff --git a/src/mod_caps.erl b/src/mod_caps.erl index a96379e6d..36c8c0eed 100644 --- a/src/mod_caps.erl +++ b/src/mod_caps.erl @@ -321,7 +321,7 @@ init_db(_, _) -> ok. init([Host, Opts]) -> - init_db(gen_mod:db_type(Opts), Host), + init_db(gen_mod:db_type(Host, Opts), Host), MaxSize = gen_mod:get_opt(cache_size, Opts, fun(I) when is_integer(I), I>0 -> I end, 1000), diff --git a/src/mod_irc.erl b/src/mod_irc.erl index 2cc57786c..e96fc4dc1 100644 --- a/src/mod_irc.erl +++ b/src/mod_irc.erl @@ -115,7 +115,7 @@ init([Host, Opts]) -> ejabberd:start_app(p1_iconv), MyHost = gen_mod:get_opt_host(Host, Opts, <<"irc.@HOST@">>), - case gen_mod:db_type(Opts) of + case gen_mod:db_type(Host, Opts) of mnesia -> mnesia:create_table(irc_custom, [{disc_copies, [node()]}, diff --git a/src/mod_last.erl b/src/mod_last.erl index 038378c7b..e079a2d38 100644 --- a/src/mod_last.erl +++ b/src/mod_last.erl @@ -48,7 +48,7 @@ start(Host, Opts) -> IQDisc = gen_mod:get_opt(iqdisc, Opts, fun gen_iq_handler:check_type/1, one_queue), - case gen_mod:db_type(Opts) of + case gen_mod:db_type(Host, Opts) of mnesia -> mnesia:create_table(last_activity, [{disc_copies, [node()]}, diff --git a/src/mod_muc.erl b/src/mod_muc.erl index a0c6c34e6..a3a8a9331 100644 --- a/src/mod_muc.erl +++ b/src/mod_muc.erl @@ -283,7 +283,7 @@ can_use_nick(LServer, Host, JID, Nick, odbc) -> init([Host, Opts]) -> MyHost = gen_mod:get_opt_host(Host, Opts, <<"conference.@HOST@">>), - case gen_mod:db_type(Opts) of + case gen_mod:db_type(Host, Opts) of mnesia -> mnesia:create_table(muc_room, [{disc_copies, [node()]}, diff --git a/src/mod_offline.erl b/src/mod_offline.erl index ba1baaf12..7f9a81a0d 100644 --- a/src/mod_offline.erl +++ b/src/mod_offline.erl @@ -108,7 +108,7 @@ stop(Host) -> %%==================================================================== init([Host, Opts]) -> - case gen_mod:db_type(Opts) of + case gen_mod:db_type(Host, Opts) of mnesia -> mnesia:create_table(offline_msg, [{disc_only_copies, [node()]}, {type, bag}, diff --git a/src/mod_privacy.erl b/src/mod_privacy.erl index 971be9524..fd3f60247 100644 --- a/src/mod_privacy.erl +++ b/src/mod_privacy.erl @@ -58,7 +58,7 @@ privacy_schema() -> start(Host, Opts) -> IQDisc = gen_mod:get_opt(iqdisc, Opts, fun gen_iq_handler:check_type/1, one_queue), - case gen_mod:db_type(Opts) of + case gen_mod:db_type(Host, Opts) of mnesia -> mnesia:create_table(privacy, [{disc_copies, [node()]}, diff --git a/src/mod_private.erl b/src/mod_private.erl index cedcb2787..f09c6100e 100644 --- a/src/mod_private.erl +++ b/src/mod_private.erl @@ -49,7 +49,7 @@ start(Host, Opts) -> IQDisc = gen_mod:get_opt(iqdisc, Opts, fun gen_iq_handler:check_type/1, one_queue), - case gen_mod:db_type(Opts) of + case gen_mod:db_type(Host, Opts) of mnesia -> mnesia:create_table(private_storage, [{disc_only_copies, [node()]}, diff --git a/src/mod_roster.erl b/src/mod_roster.erl index e60337cda..605e8e367 100644 --- a/src/mod_roster.erl +++ b/src/mod_roster.erl @@ -64,7 +64,7 @@ start(Host, Opts) -> IQDisc = gen_mod:get_opt(iqdisc, Opts, fun gen_iq_handler:check_type/1, one_queue), - case gen_mod:db_type(Opts) of + case gen_mod:db_type(Host, Opts) of mnesia -> mnesia:create_table(roster, [{disc_copies, [node()]}, diff --git a/src/mod_shared_roster.erl b/src/mod_shared_roster.erl index 16800ded4..4c3f177ef 100644 --- a/src/mod_shared_roster.erl +++ b/src/mod_shared_roster.erl @@ -58,7 +58,7 @@ group_host = {<<"">>, <<"">>} :: {binary(), binary()}}). start(Host, Opts) -> - case gen_mod:db_type(Opts) of + case gen_mod:db_type(Host, Opts) of mnesia -> mnesia:create_table(sr_group, [{disc_copies, [node()]}, diff --git a/src/mod_vcard.erl b/src/mod_vcard.erl index 7d2860ee6..ba23d0688 100644 --- a/src/mod_vcard.erl +++ b/src/mod_vcard.erl @@ -52,7 +52,7 @@ -define(PROCNAME, ejabberd_mod_vcard). start(Host, Opts) -> - case gen_mod:db_type(Opts) of + case gen_mod:db_type(Host, Opts) of mnesia -> mnesia:create_table(vcard, [{disc_only_copies, [node()]}, diff --git a/src/mod_vcard_xupdate.erl b/src/mod_vcard_xupdate.erl index 97d9abbb4..41a07bbc3 100644 --- a/src/mod_vcard_xupdate.erl +++ b/src/mod_vcard_xupdate.erl @@ -28,7 +28,7 @@ %%==================================================================== start(Host, Opts) -> - case gen_mod:db_type(Opts) of + case gen_mod:db_type(Host, Opts) of mnesia -> mnesia:create_table(vcard_xupdate, [{disc_copies, [node()]},