mirror of
https://github.com/jellyfin/jellyfin.git
synced 2025-12-20 07:45:26 +03:00
Feature/backup on migration (#13754)
* Added generalised backup for migrations * Added backup strategy to MigrateLibraryDb * Added missing namespace * Fix merge issues * Fixed style issue * change fast backup key to timestamp * Update src/Jellyfin.Database/Jellyfin.Database.Providers.Sqlite/SqliteDatabaseProvider.cs * Update Fields * applied review comments
This commit is contained in:
@@ -1,4 +1,5 @@
|
||||
using System;
|
||||
using System.Globalization;
|
||||
using System.IO;
|
||||
using System.Threading;
|
||||
using System.Threading.Tasks;
|
||||
@@ -16,6 +17,7 @@ namespace Jellyfin.Database.Providers.Sqlite;
|
||||
[JellyfinDatabaseProviderKey("Jellyfin-SQLite")]
|
||||
public sealed class SqliteDatabaseProvider : IJellyfinDatabaseProvider
|
||||
{
|
||||
private const string BackupFolderName = "SQLiteBackups";
|
||||
private readonly IApplicationPaths _applicationPaths;
|
||||
private readonly ILogger<SqliteDatabaseProvider> _logger;
|
||||
|
||||
@@ -84,4 +86,36 @@ public sealed class SqliteDatabaseProvider : IJellyfinDatabaseProvider
|
||||
{
|
||||
configurationBuilder.Conventions.Add(_ => new DoNotUseReturningClauseConvention());
|
||||
}
|
||||
|
||||
/// <inheritdoc />
|
||||
public Task<string> MigrationBackupFast(CancellationToken cancellationToken)
|
||||
{
|
||||
var key = DateTime.UtcNow.ToString("yyyyMMddhhmmss", CultureInfo.InvariantCulture);
|
||||
var path = Path.Combine(_applicationPaths.DataPath, "jellyfin.db");
|
||||
var backupFile = Path.Combine(_applicationPaths.DataPath, BackupFolderName);
|
||||
if (!Directory.Exists(backupFile))
|
||||
{
|
||||
Directory.CreateDirectory(backupFile);
|
||||
}
|
||||
|
||||
backupFile = Path.Combine(_applicationPaths.DataPath, $"{key}_jellyfin.db");
|
||||
File.Copy(path, backupFile);
|
||||
return Task.FromResult(key);
|
||||
}
|
||||
|
||||
/// <inheritdoc />
|
||||
public Task RestoreBackupFast(string key, CancellationToken cancellationToken)
|
||||
{
|
||||
var path = Path.Combine(_applicationPaths.DataPath, "jellyfin.db");
|
||||
var backupFile = Path.Combine(_applicationPaths.DataPath, BackupFolderName, $"{key}_jellyfin.db");
|
||||
|
||||
if (!File.Exists(backupFile))
|
||||
{
|
||||
_logger.LogCritical("Tried to restore a backup that does not exist.");
|
||||
return Task.CompletedTask;
|
||||
}
|
||||
|
||||
File.Copy(backupFile, path, true);
|
||||
return Task.CompletedTask;
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user