From ba556653810c565619f4bb48733c2298124ecbca Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Micka=C3=ABl=20R=C3=A9mond?= Date: Sun, 7 May 2006 16:52:21 +0000 Subject: [PATCH] * 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 (EJAB-80). * src/web/ejabberd_web_admin.er: Likewise. * src/ejabberd_admin.erl: Likewise. Code refactoring. Common Mnesia database restore function. SVN Revision: 562 --- ChangeLog | 9 +++++++++ src/ejabberd_ctl.erl | 36 ++-------------------------------- src/mod_configure.erl | 3 +-- src/web/ejabberd_web_admin.erl | 10 ++++------ 4 files changed, 16 insertions(+), 42 deletions(-) diff --git a/ChangeLog b/ChangeLog index dc3dfebc6..5e09f916e 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,12 @@ +2006-05-07 Mickael Remond + + * 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 * src/ejabberd_ctl.erl: Unknown tables or tables from now unused diff --git a/src/ejabberd_ctl.erl b/src/ejabberd_ctl.erl index e1bafa2c0..80d66f4cc 100644 --- a/src/ejabberd_ctl.erl +++ b/src/ejabberd_ctl.erl @@ -8,6 +8,7 @@ -module(ejabberd_ctl). -author('alexey@sevcom.net'). +-vsn('$Revision$ '). -export([start/0, init/0, @@ -123,8 +124,7 @@ process(["load", Path]) -> 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} -> @@ -328,35 +328,3 @@ dump_tab(F, T) -> 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) -> []. diff --git a/src/mod_configure.erl b/src/mod_configure.erl index da2b82cfe..541b50318 100644 --- a/src/mod_configure.erl +++ b/src/mod_configure.erl @@ -1126,8 +1126,7 @@ set_form(_Host, ["running nodes", ENode, "backup", "restore"], _Lang, XData) -> 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} -> diff --git a/src/web/ejabberd_web_admin.erl b/src/web/ejabberd_web_admin.erl index fc3f2bff6..da04d20c0 100644 --- a/src/web/ejabberd_web_admin.erl +++ b/src/web/ejabberd_web_admin.erl @@ -5,8 +5,8 @@ %%% Created : 9 Apr 2004 by Alexey Shchepin %%% 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). @@ -2179,10 +2179,8 @@ node_backup_parse_query(Node, Query) -> 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]);