New: Backup database before updating

This commit is contained in:
Mark McDowall
2014-02-06 18:13:24 -08:00
parent be9b7284b5
commit 85b211738b
6 changed files with 67 additions and 7 deletions

View File

@@ -7,7 +7,7 @@ namespace NzbDrone.Update.UpdateEngine
{
public interface IBackupAndRestore
{
void BackUp(string source);
void Backup(string source);
void Restore(string target);
}
@@ -24,7 +24,7 @@ namespace NzbDrone.Update.UpdateEngine
_logger = logger;
}
public void BackUp(string source)
public void Backup(string source)
{
_logger.Info("Creating backup of existing installation");
_diskProvider.CopyFolder(source, _appFolderInfo.GetUpdateBackUpFolder());

View File

@@ -0,0 +1,44 @@
using System.IO;
using NLog;
using NzbDrone.Common;
using NzbDrone.Common.Disk;
using NzbDrone.Common.EnvironmentInfo;
namespace NzbDrone.Update.UpdateEngine
{
public interface IBackupAppData
{
void Backup();
}
public class BackupAppData : IBackupAppData
{
private readonly IAppFolderInfo _appFolderInfo;
private readonly IDiskProvider _diskProvider;
private readonly Logger _logger;
public BackupAppData(IAppFolderInfo appFolderInfo, IDiskProvider diskProvider, Logger logger)
{
_appFolderInfo = appFolderInfo;
_diskProvider = diskProvider;
_logger = logger;
}
public void Backup()
{
_logger.Info("Backing up appdata (database/config)");
var appDataPath = _appFolderInfo.GetAppDataPath();
var backupFolderAppData = _appFolderInfo.GetUpdateBackUpAppDataFolder();
var binFolder = Path.Combine(backupFolderAppData, "bin");
_diskProvider.CreateFolder(backupFolderAppData);
_diskProvider.CopyFolder(appDataPath, backupFolderAppData);
if (_diskProvider.FolderExists(binFolder))
{
_logger.Info("Deleting bin folder from appdata");
_diskProvider.DeleteFolder(binFolder, true);
}
}
}
}

View File

@@ -19,17 +19,25 @@ namespace NzbDrone.Update.UpdateEngine
private readonly ITerminateNzbDrone _terminateNzbDrone;
private readonly IAppFolderInfo _appFolderInfo;
private readonly IBackupAndRestore _backupAndRestore;
private readonly IBackupAppData _backupAppData;
private readonly IStartNzbDrone _startNzbDrone;
private readonly Logger _logger;
public InstallUpdateService(IDiskProvider diskProvider, IDetectApplicationType detectApplicationType, ITerminateNzbDrone terminateNzbDrone,
IAppFolderInfo appFolderInfo, IBackupAndRestore backupAndRestore, IStartNzbDrone startNzbDrone, Logger logger)
public InstallUpdateService(IDiskProvider diskProvider,
IDetectApplicationType detectApplicationType,
ITerminateNzbDrone terminateNzbDrone,
IAppFolderInfo appFolderInfo,
IBackupAndRestore backupAndRestore,
IBackupAppData backupAppData,
IStartNzbDrone startNzbDrone,
Logger logger)
{
_diskProvider = diskProvider;
_detectApplicationType = detectApplicationType;
_terminateNzbDrone = terminateNzbDrone;
_appFolderInfo = appFolderInfo;
_backupAndRestore = backupAndRestore;
_backupAppData = backupAppData;
_startNzbDrone = startNzbDrone;
_logger = logger;
}
@@ -59,7 +67,8 @@ namespace NzbDrone.Update.UpdateEngine
{
_terminateNzbDrone.Terminate();
_backupAndRestore.BackUp(installationFolder);
_backupAndRestore.Backup(installationFolder);
_backupAppData.Backup();
_logger.Info("Moving update package to target");