aboutsummaryrefslogtreecommitdiff
path: root/Jellyfin.Server/Migrations/MigrationRunner.cs
diff options
context:
space:
mode:
Diffstat (limited to 'Jellyfin.Server/Migrations/MigrationRunner.cs')
-rw-r--r--Jellyfin.Server/Migrations/MigrationRunner.cs42
1 files changed, 33 insertions, 9 deletions
diff --git a/Jellyfin.Server/Migrations/MigrationRunner.cs b/Jellyfin.Server/Migrations/MigrationRunner.cs
index fd540c9c0..c223576da 100644
--- a/Jellyfin.Server/Migrations/MigrationRunner.cs
+++ b/Jellyfin.Server/Migrations/MigrationRunner.cs
@@ -29,7 +29,8 @@ namespace Jellyfin.Server.Migrations
typeof(PreStartupRoutines.CreateNetworkConfiguration),
typeof(PreStartupRoutines.MigrateMusicBrainzTimeout),
typeof(PreStartupRoutines.MigrateNetworkConfiguration),
- typeof(PreStartupRoutines.MigrateEncodingOptions)
+ typeof(PreStartupRoutines.MigrateEncodingOptions),
+ typeof(PreStartupRoutines.RenameEnableGroupingIntoCollections)
};
/// <summary>
@@ -48,13 +49,15 @@ namespace Jellyfin.Server.Migrations
typeof(Routines.RemoveDownloadImagesInAdvance),
typeof(Routines.MigrateAuthenticationDb),
typeof(Routines.FixPlaylistOwner),
- typeof(Routines.MigrateRatingLevels),
typeof(Routines.AddDefaultCastReceivers),
typeof(Routines.UpdateDefaultPluginRepository),
typeof(Routines.FixAudioData),
- typeof(Routines.MoveTrickplayFiles),
typeof(Routines.RemoveDuplicatePlaylistChildren),
typeof(Routines.MigrateLibraryDb),
+ typeof(Routines.MoveExtractedFiles),
+ typeof(Routines.MigrateRatingLevels),
+ typeof(Routines.MoveTrickplayFiles),
+ typeof(Routines.MigrateKeyframeData),
};
/// <summary>
@@ -146,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
{
@@ -164,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);
+ }
}
}
}