From d1c761b3e93ec09ba3f77ba7f4b2f229c425bd3c Mon Sep 17 00:00:00 2001 From: Sean McGivern Date: Wed, 4 Sep 2019 13:06:06 +0100 Subject: Make epic_issues relative_position migration more robust If someone installed EE, then downgraded to CE before this column was added, upgrading to the latest version of CE will fail: 1. We have a backport migration for the entire EE schema but the table `epic_issues` exists, just not the `relative_position` column. 2. The migration that changes the default (quite reasonably) didn't check if the column exists. If the column doesn't exist, we can just create it with the correct default. --- ..._remove_epic_issues_default_relative_position.rb | 21 ++++++++++++++++++--- 1 file changed, 18 insertions(+), 3 deletions(-) diff --git a/db/migrate/20190806071559_remove_epic_issues_default_relative_position.rb b/db/migrate/20190806071559_remove_epic_issues_default_relative_position.rb index f6db90f6637..3037f2ea106 100644 --- a/db/migrate/20190806071559_remove_epic_issues_default_relative_position.rb +++ b/db/migrate/20190806071559_remove_epic_issues_default_relative_position.rb @@ -3,8 +3,23 @@ class RemoveEpicIssuesDefaultRelativePosition < ActiveRecord::Migration[5.2] DOWNTIME = false - def change - change_column_null :epic_issues, :relative_position, true - change_column_default :epic_issues, :relative_position, from: 1073741823, to: nil + include Gitlab::Database::MigrationHelpers + + disable_ddl_transaction! + + def up + # The column won't exist if someone installed EE, downgraded to CE + # before it was added in EE, then tries to upgrade CE. + if column_exists?(:epic_issues, :relative_position) + change_column_null :epic_issues, :relative_position, true + change_column_default :epic_issues, :relative_position, from: 1073741823, to: nil + else + add_column_with_default(:epic_issues, :relative_position, :integer, default: nil, allow_null: true) + end + end + + def down + change_column_default :epic_issues, :relative_position, from: nil, to: 1073741823 + change_column_null :epic_issues, :relative_position, false end end -- cgit v1.2.1