Fixed: Backup fails on certain platforms

pull/6/head
Qstick 7 years ago
parent 272adfcef7
commit 64d58a2248

@ -30,6 +30,8 @@ namespace NzbDrone.Core.Backup
var backupConnectionStringBuilder = new SQLiteConnectionStringBuilder(sourceConnectionString); var backupConnectionStringBuilder = new SQLiteConnectionStringBuilder(sourceConnectionString);
backupConnectionStringBuilder.DataSource = Path.Combine(targetDirectory, Path.GetFileName(backupConnectionStringBuilder.DataSource)); backupConnectionStringBuilder.DataSource = Path.Combine(targetDirectory, Path.GetFileName(backupConnectionStringBuilder.DataSource));
// We MUST use journal mode instead of WAL coz WAL has issues when page sizes change. This should also automatically deal with the -journal and -wal files during restore.
backupConnectionStringBuilder.JournalMode = SQLiteJournalModeEnum.Truncate;
using (var sourceConnection = (SQLiteConnection)SQLiteFactory.Instance.CreateConnection()) using (var sourceConnection = (SQLiteConnection)SQLiteFactory.Instance.CreateConnection())
using (var backupConnection = (SQLiteConnection)SQLiteFactory.Instance.CreateConnection()) using (var backupConnection = (SQLiteConnection)SQLiteFactory.Instance.CreateConnection())
@ -42,22 +44,15 @@ namespace NzbDrone.Core.Backup
sourceConnection.BackupDatabase(backupConnection, "main", "main", -1, null, 500); sourceConnection.BackupDatabase(backupConnection, "main", "main", -1, null, 500);
// Make sure there are no lingering connections so the wal gets truncated. // The backup changes the journal_mode, force it to truncate again.
SQLiteConnection.ClearAllPools(); using (var command = backupConnection.CreateCommand())
} {
command.CommandText = "pragma journal_mode=truncate";
command.ExecuteNonQuery();
}
var backupWalPath = backupConnectionStringBuilder.DataSource + "-wal"; // Make sure there are no lingering connections.
if (backupConnectionStringBuilder.JournalMode == SQLiteJournalModeEnum.Wal && !File.Exists(backupWalPath)) SQLiteConnection.ClearAllPools();
{
// Make sure the wal gets created in the backup so users are less likely to make an error during restore.
File.WriteAllBytes(backupWalPath, new byte[0]);
}
var backupJournalPath = backupConnectionStringBuilder.DataSource + "-journal";
if (backupConnectionStringBuilder.JournalMode != SQLiteJournalModeEnum.Wal && !File.Exists(backupJournalPath))
{
// Make sure the journal gets created in the backup so users are less likely to make an error during restore.
File.WriteAllBytes(backupJournalPath, new byte[0]);
} }
} }
} }

Loading…
Cancel
Save