Commit 63cde509 authored by Bob Van Landuyt's avatar Bob Van Landuyt

Delete orphaned fork networks in a migration

parent 8166112d
---
title: Clean up empty fork networks
merge_request: 15373
author:
type: other
class RemoveEmptyForkNetworks < ActiveRecord::Migration
include Gitlab::Database::MigrationHelpers
DOWNTIME = false
BATCH_SIZE = 10_000
class MigrationForkNetwork < ActiveRecord::Base
include EachBatch
self.table_name = 'fork_networks'
end
class MigrationForkNetworkMembers < ActiveRecord::Base
self.table_name = 'fork_network_members'
end
disable_ddl_transaction!
def up
say 'Deleting empty ForkNetworks in batches'
has_members = MigrationForkNetworkMembers
.where('fork_network_members.fork_network_id = fork_networks.id')
.select(1)
MigrationForkNetwork.where('NOT EXISTS (?)', has_members)
.each_batch(of: BATCH_SIZE) do |networks|
deleted = networks.delete_all
say "Deleted #{deleted} rows in batch"
end
end
def down
# nothing
end
end
......@@ -11,7 +11,7 @@
#
# It's strongly recommended that you check this file into your version control system.
ActiveRecord::Schema.define(version: 20171107144726) do
ActiveRecord::Schema.define(version: 20171114104051) do
# These are extensions that must be enabled in order to support this database
enable_extension "plpgsql"
......
require 'spec_helper'
require Rails.root.join('db', 'post_migrate', '20171114104051_remove_empty_fork_networks.rb')
describe RemoveEmptyForkNetworks, :migration do
let!(:fork_networks) { table(:fork_networks) }
let(:deleted_project) { create(:project) }
let!(:empty_network) { create(:fork_network, id: 1, root_project_id: deleted_project.id) }
let!(:other_network) { create(:fork_network, id: 2, root_project_id: create(:project).id) }
before do
deleted_project.destroy!
end
it 'deletes only the fork network without members' do
expect(fork_networks.count).to eq(2)
migrate!
expect(fork_networks.find_by(id: empty_network.id)).to be_nil
expect(fork_networks.find_by(id: other_network.id)).not_to be_nil
expect(fork_networks.count).to eq(1)
end
end
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment