Fix null source_project_id in pool_repositories
Due to a bug, some pool_repositories in production have a null source_project_id column. This migration aims to fix those rows.
This commit is contained in:
parent
2e1c7573d5
commit
5c828f39d8
3 changed files with 53 additions and 0 deletions
|
@ -0,0 +1,5 @@
|
|||
---
|
||||
title: Fix null source_project_id in pool_repositories
|
||||
merge_request: 29157
|
||||
author:
|
||||
type: other
|
|
@ -0,0 +1,19 @@
|
|||
# frozen_string_literal: true
|
||||
|
||||
# See http://doc.gitlab.com/ce/development/migration_style_guide.html
|
||||
# for more information on how to write migrations for GitLab.
|
||||
|
||||
class FixPoolRepositorySourceProjectId < ActiveRecord::Migration[5.1]
|
||||
include Gitlab::Database::MigrationHelpers
|
||||
|
||||
# Set this constant to true if this migration requires downtime.
|
||||
DOWNTIME = false
|
||||
|
||||
def up
|
||||
execute "UPDATE pool_repositories SET source_project_id = (SELECT MIN(id) FROM projects WHERE pool_repository_id = pool_repositories.id) WHERE pool_repositories.source_project_id IS NULL"
|
||||
end
|
||||
|
||||
def down
|
||||
# nothing to do her
|
||||
end
|
||||
end
|
|
@ -0,0 +1,29 @@
|
|||
# frozen_string_literal: true
|
||||
|
||||
require 'spec_helper'
|
||||
require Rails.root.join('db', 'migrate', '20190604184643_fix_pool_repository_source_project_id.rb')
|
||||
|
||||
describe FixPoolRepositorySourceProjectId, :migration do
|
||||
let(:projects) { table(:projects) }
|
||||
let(:pool_repositories) { table(:pool_repositories) }
|
||||
let(:shards) { table(:shards) }
|
||||
|
||||
it 'fills in source_project_ids' do
|
||||
shard = shards.create!(name: 'default')
|
||||
|
||||
# gitaly is a project with a pool repository that has a source_project_id
|
||||
gitaly = projects.create!(name: 'gitaly', path: 'gitlab-org/gitaly', namespace_id: 1)
|
||||
pool_repository = pool_repositories.create(shard_id: shard.id, source_project_id: gitaly.id)
|
||||
gitaly.update_column(:pool_repository_id, pool_repository.id)
|
||||
|
||||
# gitlab is a project with a pool repository that's missing a source_project_id
|
||||
pool_repository_without_source_project = pool_repositories.create(shard_id: shard.id, source_project_id: nil)
|
||||
gitlab = projects.create!(name: 'gitlab', path: 'gitlab-org/gitlab-ce', namespace_id: 1, pool_repository_id: pool_repository_without_source_project.id)
|
||||
projects.create!(name: 'gitlab-fork-1', path: 'my-org-1/gitlab-ce', namespace_id: 1, pool_repository_id: pool_repository_without_source_project.id)
|
||||
|
||||
migrate!
|
||||
|
||||
expect(pool_repositories.find(pool_repository_without_source_project.id).source_project_id).to eq(gitlab.id)
|
||||
expect(pool_repositories.find(pool_repository.id).source_project_id).to eq(gitaly.id)
|
||||
end
|
||||
end
|
Loading…
Reference in a new issue