+2006-05-07 Mickael Remond <mickael.remond@process-one.net>
+
+ * src/mod_configure.erl: Unknown tables or tables from now unused
+ modules are ignored during restore. The restore can now be performed in
+ such case.
+ * src/web/ejabberd_web_admin.er: Likewise.
+ * src/ejabberd_admin.erl: Code refactoring. Common Mnesia database
+ restore function.
+
2006-05-01 Mickael Remond <mickael.remond@process-one.net>
* src/ejabberd_ctl.erl: Unknown tables or tables from now unused
-module(ejabberd_ctl).
-author('alexey@sevcom.net').
+-vsn('$Revision$ ').
-export([start/0,
init/0,
end;
process(["restore", Path]) ->
- case mnesia:restore(Path, [{keep_tables,keep_tables()},
- {default_op, skip_tables}]) of
+ case ejabberd_admin:restore(Path) of
{atomic, _} ->
?STATUS_SUCCESS;
{error, Reason} ->
fun() -> mnesia:match_object(T, W, read) end),
lists:foreach(
fun(Term) -> io:format(F,"~p.~n", [setelement(1, Term, T)]) end, All).
-
-%% This function return a list of tables that should be kept from a previous
-%% version backup.
-%% Obsolete tables or tables created by module who are no longer used are not
-%% restored and are ignored.
-keep_tables() ->
- lists:flatten([acl, passwd, config, local_config, disco_publish,
- keep_modules_tables()]).
-
-%% Return the list of modules tables in use, according to the list of actually
-%% loaded modules
-keep_modules_tables() ->
- lists:map(fun(Module) ->
- module_tables(Module)
- end,
- gen_mod:loaded_modules(?MYNAME)).
-
-%% TODO: This mapping should probably be moved to a callback function in each
-%% module.
-%% Mapping between modules and their tables
-module_tables(mod_announce) -> [motd, motd_users];
-module_tables(mod_irc) -> [irc_custom];
-module_tables(mod_last) -> [last_activity];
-module_tables(mod_muc) -> [muc_room, muc_registered];
-module_tables(mod_offline) -> [offline_msg];
-module_tables(mod_privacy) -> [privacy];
-module_tables(mod_private) -> [private_storage];
-module_tables(mod_pubsub) -> [pubsub_node];
-module_tables(mod_roster) -> [roster];
-module_tables(mod_shared_roster) -> [sr_group, sr_user];
-module_tables(mod_vcard) -> [vcard, vcard_search];
-module_tables(_Other) -> [].
false ->
{error, ?ERR_BAD_REQUEST};
{value, {_, [String]}} ->
- case rpc:call(Node, mnesia, restore,
- [String, [{default_op, keep_tables}]]) of
+ case rpc:call(Node, ejabberd_admin, restore, [String]) of
{badrpc, _Reason} ->
{error, ?ERR_INTERNAL_SERVER_ERROR};
{error, _Reason} ->
%%% Created : 9 Apr 2004 by Alexey Shchepin <alexey@sevcom.net>
%%% Id : $Id$
%%%----------------------------------------------------------------------
-%%% Copyright (c) 2004-2005 Alexey Shchepin
-%%% Copyright (c) 2004-2005 Process One
+%%% Copyright (c) 2004-2006 Alexey Shchepin
+%%% Copyright (c) 2004-2006 Process One
%%%----------------------------------------------------------------------
-module(ejabberd_web_admin).
rpc:call(Node, mnesia,
backup, [Path]);
"restore" ->
- rpc:call(Node, mnesia,
- restore,
- [Path, [{default_op,
- keep_tables}]]);
+ rpc:call(Node, ejabberd_admin,
+ restore, [Path]);
"fallback" ->
rpc:call(Node, mnesia,
install_fallback, [Path]);