summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGrzegorz Bizon <grzesiek.bizon@gmail.com>2018-05-08 17:12:29 +0200
committerGrzegorz Bizon <grzesiek.bizon@gmail.com>2018-05-08 17:12:29 +0200
commit8624a4eddec214a4092c34202bfc0cc92e72eb19 (patch)
tree904bef4d8fa6820953fb02c56a364a4866520277
parentd8d0067bf5afd555f80e55e0bed20c4161b0a7ee (diff)
downloadgitlab-ce-8624a4eddec214a4092c34202bfc0cc92e72eb19.tar.gz
Remove orphaned builds without project / pipeline reference
-rw-r--r--db/migrate/20180420010016_add_pipeline_build_foreign_key.rb7
-rw-r--r--spec/migrations/add_pipeline_build_foreign_key_spec.rb4
2 files changed, 8 insertions, 3 deletions
diff --git a/db/migrate/20180420010016_add_pipeline_build_foreign_key.rb b/db/migrate/20180420010016_add_pipeline_build_foreign_key.rb
index 385d51b8da6..7fcd3b20d5e 100644
--- a/db/migrate/20180420010016_add_pipeline_build_foreign_key.rb
+++ b/db/migrate/20180420010016_add_pipeline_build_foreign_key.rb
@@ -7,12 +7,15 @@ class AddPipelineBuildForeignKey < ActiveRecord::Migration
def up
execute <<~SQL
+ DELETE FROM ci_builds WHERE project_id IS NULL OR commit_id IS NULL
+ SQL
+
+ execute <<~SQL
DELETE FROM ci_builds WHERE NOT EXISTS
(SELECT true FROM ci_pipelines WHERE ci_pipelines.id = ci_builds.commit_id)
+ AND commit_id IS NOT NULL
SQL
- return if foreign_key_exists?(:ci_builds, :ci_pipelines, column: :commit_id)
-
add_concurrent_foreign_key(:ci_builds, :ci_pipelines, column: :commit_id)
end
diff --git a/spec/migrations/add_pipeline_build_foreign_key_spec.rb b/spec/migrations/add_pipeline_build_foreign_key_spec.rb
index 7358b1d265d..e9413f52f19 100644
--- a/spec/migrations/add_pipeline_build_foreign_key_spec.rb
+++ b/spec/migrations/add_pipeline_build_foreign_key_spec.rb
@@ -16,10 +16,12 @@ describe AddPipelineBuildForeignKey, :migration do
builds.create!(id: 102, commit_id: 222, project_id: 11)
builds.create!(id: 103, commit_id: 333, project_id: 11)
builds.create!(id: 104, commit_id: 12, project_id: 11)
+ builds.create!(id: 106, commit_id: nil, project_id: 11)
+ builds.create!(id: 107, commit_id: 12, project_id: nil)
end
it 'adds foreign key after removing orphans' do
- expect(builds.all.count).to eq 4
+ expect(builds.all.count).to eq 6
expect(foreign_key_exists?(:ci_builds, :ci_pipelines, column: :commit_id)).to be_falsey
migrate!