diff options
| author | JPVenson <github@jpb.email> | 2025-04-07 16:59:00 +0200 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2025-04-07 08:59:00 -0600 |
| commit | 04ca27ad075bdab1eae49c43fde1ed6d45c050e4 (patch) | |
| tree | 449abee43629682b15d280bb0578db0e397a667b /Jellyfin.Server | |
| parent | e1ef4290afd7dddf5fa2f01ef2d6a4093a7898be (diff) | |
Fix backup not written to correct directory (#13853)
* Fix backup not written to correct directory
* Improve restore handling and only restore on actual error
* Fix first failed migration not causing a rollback
Diffstat (limited to 'Jellyfin.Server')
| -rw-r--r-- | Jellyfin.Server/Migrations/MigrationRunner.cs | 33 |
1 files changed, 27 insertions, 6 deletions
diff --git a/Jellyfin.Server/Migrations/MigrationRunner.cs b/Jellyfin.Server/Migrations/MigrationRunner.cs index c3a2e1bc4..c223576da 100644 --- a/Jellyfin.Server/Migrations/MigrationRunner.cs +++ b/Jellyfin.Server/Migrations/MigrationRunner.cs @@ -149,11 +149,18 @@ namespace Jellyfin.Server.Migrations } } + List<IMigrationRoutine> databaseMigrations = []; try { foreach (var migrationRoutine in migrationsToBeApplied) { logger.LogInformation("Applying migration '{Name}'", migrationRoutine.Name); + var isDbMigration = migrationRoutine is IDatabaseMigrationRoutine; + + if (isDbMigration) + { + databaseMigrations.Add(migrationRoutine); + } try { @@ -167,17 +174,31 @@ namespace Jellyfin.Server.Migrations // Mark the migration as completed logger.LogInformation("Migration '{Name}' applied successfully", migrationRoutine.Name); - migrationOptions.Applied.Add((migrationRoutine.Id, migrationRoutine.Name)); - saveConfiguration(migrationOptions); - logger.LogDebug("Migration '{Name}' marked as applied in configuration.", migrationRoutine.Name); + if (!isDbMigration) + { + migrationOptions.Applied.Add((migrationRoutine.Id, migrationRoutine.Name)); + saveConfiguration(migrationOptions); + logger.LogDebug("Migration '{Name}' marked as applied in configuration.", migrationRoutine.Name); + } } } - catch (System.Exception) when (migrationKey is not null && jellyfinDatabaseProvider is not null) + catch (Exception) when (migrationKey is not null && jellyfinDatabaseProvider is not null) { - logger.LogInformation("Rollback on database as migration reported failure."); - await jellyfinDatabaseProvider.RestoreBackupFast(migrationKey, CancellationToken.None).ConfigureAwait(false); + if (databaseMigrations.Count != 0) + { + logger.LogInformation("Rolling back database as migrations reported failure."); + await jellyfinDatabaseProvider.RestoreBackupFast(migrationKey, CancellationToken.None).ConfigureAwait(false); + } + throw; } + + foreach (var migrationRoutine in databaseMigrations) + { + migrationOptions.Applied.Add((migrationRoutine.Id, migrationRoutine.Name)); + saveConfiguration(migrationOptions); + logger.LogDebug("Migration '{Name}' marked as applied in configuration.", migrationRoutine.Name); + } } } } |
