Skip to content

Migrations bug for upgrade from 1.2 to 1.3 #3155

Closed
@michaelkuhn

Description

@michaelkuhn
  • Gitea version (or commit ref): 1.3.1+1-g8a19c6b9
  • Operating system: Ubuntu 16.04
  • Database (use [x]):
    • PostgreSQL
  • Can you reproduce the bug at https://try.gitea.io:
    • Not relevant

Description

I think I have discovered a serious migrations bug when upgrading from version 1.2.3 to version 1.3.1 today. It seems that several migrations were backported to the 1.2 branch out of order. Our Gitea installation had a database version of 42 before the upgrade and was upgraded to version 49. However, due to the ordering of the migrations, three of them were applied twice and three were not applied at all.

I becomes clearer if looking at the diff of models/migrations/migrations.go from the 1.2 to the 1.3 branch:

@@ -126,12 +126,26 @@ var migrations = []Migration{
        NewMigration("unescape user full names", unescapeUserFullNames),
        // v38 -> v39
        NewMigration("remove commits and settings unit types", removeCommitsUnitType),
-       // v43 -> v44
-       NewMigration("fix protected branch can push value to false", fixProtectedBranchCanPushValue),
+       // v39 -> v40
+       NewMigration("adds time tracking and stopwatches", addTimetracking),
+       // v40 -> v41
+       NewMigration("migrate protected branch struct", migrateProtectedBranchStruct),
+       // v41 -> v42
+       NewMigration("add default value to user prohibit_login", addDefaultValueToUserProhibitLogin),
        // v42 -> v43
        NewMigration("add tags to releases and sync existing repositories", releaseAddColumnIsTagAndSyncTags),
+       // v43 -> v44
+       NewMigration("fix protected branch can push value to false", fixProtectedBranchCanPushValue),
        // v44 -> v45
        NewMigration("remove duplicate unit types", removeDuplicateUnitTypes),
+       // v45 -> v46
+       NewMigration("remove index column from repo_unit table", removeIndexColumnFromRepoUnitTable),
+       // v46 -> v47
+       NewMigration("remove organization watch repositories", removeOrganizationWatchRepo),
+       // v47 -> v48
+       NewMigration("add deleted branches", addDeletedBranch),
+       // v48 -> v49
+       NewMigration("add repo indexer status", addRepoIndexerStatus),
 }
 
 // Migrate database to current version

As can be seen, v43, v42 and v44 were applied (in that order) in the 1.2 branch (but with database versions of 40, 41 and 42). v39, v40 and v41 were then added before the existing migrations in the 1.3 branch. This led to v39, v40 and v41 being skipped, while v42, v43 and v44 have been applied a second time:

2017/12/11 16:13:30 [I] Migration: add tags to releases and sync existing repositories
2017/12/11 16:13:30 [I] Migration: fix protected branch can push value to false
2017/12/11 16:13:31 [I] Migration: remove duplicate unit types
2017/12/11 16:13:31 [I] Migration: remove index column from repo_unit table
2017/12/11 16:13:31 [I] Migration: remove organization watch repositories
2017/12/11 16:13:31 [I] Migration: add deleted branches
2017/12/11 16:13:31 [I] Migration: add repo indexer status

Metadata

Metadata

Assignees

No one assigned

    Labels

    issue/criticalThis issue should be fixed ASAP. If it is a PR, the PR should be merged ASAPtype/bug

    Type

    No type

    Projects

    No projects

    Milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions