Remove orphaned builds without project / pipeline reference
This commit is contained in:
parent
d8d0067bf5
commit
8624a4edde
|
@ -7,11 +7,14 @@ class AddPipelineBuildForeignKey < ActiveRecord::Migration
|
|||
|
||||
def up
|
||||
execute <<~SQL
|
||||
DELETE FROM ci_builds WHERE NOT EXISTS
|
||||
(SELECT true FROM ci_pipelines WHERE ci_pipelines.id = ci_builds.commit_id)
|
||||
DELETE FROM ci_builds WHERE project_id IS NULL OR commit_id IS NULL
|
||||
SQL
|
||||
|
||||
return if foreign_key_exists?(:ci_builds, :ci_pipelines, column: :commit_id)
|
||||
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
|
||||
|
||||
add_concurrent_foreign_key(:ci_builds, :ci_pipelines, column: :commit_id)
|
||||
end
|
||||
|
|
|
@ -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!
|
||||
|
|
Loading…
Reference in New Issue