From 8624a4eddec214a4092c34202bfc0cc92e72eb19 Mon Sep 17 00:00:00 2001 From: Grzegorz Bizon Date: Tue, 8 May 2018 17:12:29 +0200 Subject: Remove orphaned builds without project / pipeline reference --- db/migrate/20180420010016_add_pipeline_build_foreign_key.rb | 7 +++++-- spec/migrations/add_pipeline_build_foreign_key_spec.rb | 4 +++- 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 @@ -6,13 +6,16 @@ class AddPipelineBuildForeignKey < ActiveRecord::Migration disable_ddl_transaction! 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! -- cgit v1.2.3