Browse Source

Skip invalid database migration (#15212)

Cody Robibero 2 days ago
parent
commit
2966d27c97

+ 17 - 1
Jellyfin.Server/Migrations/Routines/MigrateActivityLogDb.cs

@@ -55,9 +55,25 @@ namespace Jellyfin.Server.Migrations.Routines
             };
 
             var dataPath = _paths.DataPath;
-            using (var connection = new SqliteConnection($"Filename={Path.Combine(dataPath, DbFilename)}"))
+            var activityLogPath = Path.Combine(dataPath, DbFilename);
+            if (!File.Exists(activityLogPath))
+            {
+                _logger.LogWarning("{ActivityLogDb} doesn't exist, nothing to migrate", activityLogPath);
+                return;
+            }
+
+            using (var connection = new SqliteConnection($"Filename={activityLogPath}"))
             {
                 connection.Open();
+                var tableQuery = connection.Query("SELECT count(*) FROM sqlite_master WHERE type='table' AND name='ActivityLog';");
+                foreach (var row in tableQuery)
+                {
+                    if (row.GetInt32(0) == 0)
+                    {
+                        _logger.LogWarning("Table 'ActivityLog' doesn't exist in {ActivityLogPath}, nothing to migrate", activityLogPath);
+                        break;
+                    }
+                }
 
                 using var userDbConnection = new SqliteConnection($"Filename={Path.Combine(dataPath, "users.db")}");
                 userDbConnection.Open();

+ 18 - 1
Jellyfin.Server/Migrations/Routines/MigrateUserDb.cs

@@ -57,11 +57,28 @@ public class MigrateUserDb : IMigrationRoutine
     public void Perform()
     {
         var dataPath = _paths.DataPath;
+        var userDbPath = Path.Combine(dataPath, DbFilename);
+        if (!File.Exists(userDbPath))
+        {
+            _logger.LogWarning("{UserDbPath} doesn't exist, nothing to migrate", userDbPath);
+            return;
+        }
+
         _logger.LogInformation("Migrating the user database may take a while, do not stop Jellyfin.");
 
-        using (var connection = new SqliteConnection($"Filename={Path.Combine(dataPath, DbFilename)}"))
+        using (var connection = new SqliteConnection($"Filename={userDbPath}"))
         {
             connection.Open();
+            var tableQuery = connection.Query("SELECT count(*) FROM sqlite_master WHERE type='table' AND name='LocalUsersv2';");
+            foreach (var row in tableQuery)
+            {
+                if (row.GetInt32(0) == 0)
+                {
+                    _logger.LogWarning("Table 'LocalUsersv2' doesn't exist in {UserDbPath}, nothing to migrate", userDbPath);
+                    break;
+                }
+            }
+
             using var dbContext = _provider.CreateDbContext();
 
             var queryResult = connection.Query("SELECT * FROM LocalUsersv2");