diff options
author | Matthew Sackman <matthew@rabbitmq.com> | 2010-11-24 13:15:05 +0000 |
---|---|---|
committer | Matthew Sackman <matthew@rabbitmq.com> | 2010-11-24 13:15:05 +0000 |
commit | 89e810694694c470eeb49ae30ad96d1063677db5 (patch) | |
tree | d353647ed2825cf7e29cb7d6ed18851f7dd069c0 | |
parent | e7a7de3479960cc68f8549a7d517203d6f46f5d4 (diff) | |
download | rabbitmq-server-89e810694694c470eeb49ae30ad96d1063677db5.tar.gz |
Refactoring
-rw-r--r-- | src/rabbit_mnesia.erl | 18 | ||||
-rw-r--r-- | src/rabbit_upgrade.erl | 22 |
2 files changed, 23 insertions, 17 deletions
diff --git a/src/rabbit_mnesia.erl b/src/rabbit_mnesia.erl index e8547041..8c7e30f9 100644 --- a/src/rabbit_mnesia.erl +++ b/src/rabbit_mnesia.erl @@ -34,7 +34,7 @@ -export([ensure_mnesia_dir/0, dir/0, status/0, init/0, is_db_empty/0, cluster/1, force_cluster/1, reset/0, force_reset/0, - is_clustered/0, empty_ram_only_tables/0, wait_for_tables/0]). + is_clustered/0, empty_ram_only_tables/0, copy_db/1]). -export([table_names/0]). @@ -65,7 +65,7 @@ -spec(is_clustered/0 :: () -> boolean()). -spec(empty_ram_only_tables/0 :: () -> 'ok'). -spec(create_tables/0 :: () -> 'ok'). --spec(wait_for_tables/0 :: () -> 'ok'). +-spec(copy_db/1 :: (file:filename()) -> rabbit_types:ok_or_error(any())). -endif. @@ -376,7 +376,7 @@ init_db(ClusterNodes, Force) -> mnesia:system_info(db_nodes)} of {[], true, [_]} -> %% True single disc node, attempt upgrade - wait_for_tables(), + ok = wait_for_tables(), case rabbit_upgrade:maybe_upgrade() of ok -> schema_ok_or_exit(); @@ -386,7 +386,7 @@ init_db(ClusterNodes, Force) -> {[], true, _} -> %% "Master" (i.e. without config) disc node in cluster, %% verify schema - wait_for_tables(), + ok = wait_for_tables(), version_ok_or_exit(rabbit_upgrade:read_version()), schema_ok_or_exit(); {[], false, _} -> @@ -480,6 +480,16 @@ move_db() -> rabbit_misc:ensure_ok(mnesia:start(), cannot_start_mnesia), ok. +copy_db(Destination) -> + mnesia:stop(), + case rabbit_misc:recursive_copy(dir(), Destination) of + ok -> + rabbit_misc:ensure_ok(mnesia:start(), cannot_start_mnesia), + ok = wait_for_tables(); + {error, E} -> + {error, E} + end. + create_tables() -> lists:foreach(fun ({Tab, TabDef}) -> TabDef1 = proplists:delete(match, TabDef), diff --git a/src/rabbit_upgrade.erl b/src/rabbit_upgrade.erl index 83ab2595..27f18588 100644 --- a/src/rabbit_upgrade.erl +++ b/src/rabbit_upgrade.erl @@ -126,31 +126,27 @@ apply_upgrades(Upgrades) -> ok = file:close(Lock), BackupDir = dir() ++ "-upgrade-backup", info("Upgrades: ~w to apply~n", [length(Upgrades)]), - mnesia:stop(), - case rabbit_misc:recursive_copy(dir(), BackupDir) of + case rabbit_mnesia:copy_db(BackupDir) of ok -> %% We need to make the backup after creating the lock file %% so that it protects us from trying to overwrite the %% backup. Unfortunately this means the lock file exists in %% the backup too, which is not intuitive. Remove it. ok = file:delete(lock_filename(BackupDir)), - ok; + info("Upgrades: Mnesia dir backed up to ~p~n", [BackupDir]), + [apply_upgrade(Upgrade) || Upgrade <- Upgrades], + info("Upgrades: All upgrades applied successfully~n", []), + ok = write_version(), + ok = rabbit_misc:recursive_delete([BackupDir]), + info("Upgrades: Mnesia backup removed~n", []), + ok = file:delete(LockFile); {error, E} -> %% If we can't backup, the upgrade hasn't started hence we %% don't need the lockfile since the real mnesia dir is the %% good one. ok = file:delete(LockFile), exit({could_not_back_up_mnesia_dir, E}) - end, - rabbit_misc:ensure_ok(mnesia:start(), cannot_start_mnesia), - rabbit_mnesia:wait_for_tables(), - info("Upgrades: Mnesia dir backed up to ~p~n", [BackupDir]), - [apply_upgrade(Upgrade) || Upgrade <- Upgrades], - info("Upgrades: All upgrades applied successfully~n", []), - ok = write_version(), - ok = rabbit_misc:recursive_delete([BackupDir]), - info("Upgrades: Mnesia backup removed~n", []), - ok = file:delete(LockFile); + end; {error, eexist} -> exit(previous_upgrade_failed); {error, _} = Error -> |