diff options
author | Douwe Maan <douwe@gitlab.com> | 2018-01-18 18:10:38 +0000 |
---|---|---|
committer | Luke Bennett <lbennett@gitlab.com> | 2018-01-19 10:25:07 +0000 |
commit | 3541a259327061d10c04a5b287aca9349e0c7860 (patch) | |
tree | 93c7184ea4111354c01f1fad513c2e4f41e35a62 | |
parent | a3923a0cabacba60395d975efdfa11e9253d29b2 (diff) | |
download | gitlab-ce-3541a259327061d10c04a5b287aca9349e0c7860.tar.gz |
Merge branch 'background-migration-fix' into 'master'
Reduce UPDATEs for background column type changes
Closes #42158
See merge request gitlab-org/gitlab-ce!16551
(cherry picked from commit 792e9ed7fa46d236c01fb14c8ad7f9b4ea4dee59)
0054d383 Reduce UPDATEs for background column type changes
-rw-r--r-- | lib/gitlab/background_migration/copy_column.rb | 2 | ||||
-rw-r--r-- | lib/gitlab/database/migration_helpers.rb | 5 | ||||
-rw-r--r-- | spec/lib/gitlab/database/migration_helpers_spec.rb | 2 |
3 files changed, 6 insertions, 3 deletions
diff --git a/lib/gitlab/background_migration/copy_column.rb b/lib/gitlab/background_migration/copy_column.rb index a2cb215c230..ef70f37d5eb 100644 --- a/lib/gitlab/background_migration/copy_column.rb +++ b/lib/gitlab/background_migration/copy_column.rb @@ -28,6 +28,8 @@ module Gitlab UPDATE #{quoted_table} SET #{quoted_copy_to} = #{quoted_copy_from} WHERE id BETWEEN #{start_id} AND #{end_id} + AND #{quoted_copy_from} IS NOT NULL + AND #{quoted_copy_to} IS NULL SQL end diff --git a/lib/gitlab/database/migration_helpers.rb b/lib/gitlab/database/migration_helpers.rb index 7b35c24d153..98de29f12a3 100644 --- a/lib/gitlab/database/migration_helpers.rb +++ b/lib/gitlab/database/migration_helpers.rb @@ -524,8 +524,9 @@ module Gitlab install_rename_triggers(table, column, temp_column) # Schedule the jobs that will copy the data from the old column to the - # new one. - relation.each_batch(of: batch_size) do |batch, index| + # new one. Rows with NULL values in our source column are skipped since + # the target column is already NULL at this point. + relation.where.not(column => nil).each_batch(of: batch_size) do |batch, index| start_id, end_id = batch.pluck('MIN(id), MAX(id)').first max_index = index diff --git a/spec/lib/gitlab/database/migration_helpers_spec.rb b/spec/lib/gitlab/database/migration_helpers_spec.rb index 43761c2fe0c..1de3a14b809 100644 --- a/spec/lib/gitlab/database/migration_helpers_spec.rb +++ b/spec/lib/gitlab/database/migration_helpers_spec.rb @@ -1038,7 +1038,7 @@ describe Gitlab::Database::MigrationHelpers do end describe '#change_column_type_using_background_migration' do - let!(:issue) { create(:issue) } + let!(:issue) { create(:issue, :closed, closed_at: Time.zone.now) } let(:issue_model) do Class.new(ActiveRecord::Base) do |