Remove more orphans when removing stray namespaces
Fixes https://gitlab.com/gitlab-org/gitlab-ce/issues/25146
This commit is contained in:
parent
4a463039ea
commit
63bd49696d
|
@ -0,0 +1,4 @@
|
|||
---
|
||||
title: Remove extra orphaned rows when removing stray namespaces
|
||||
merge_request: 7841
|
||||
author:
|
|
@ -5,47 +5,87 @@ class RemoveUndeletedGroups < ActiveRecord::Migration
|
|||
DOWNTIME = false
|
||||
|
||||
def up
|
||||
is_ee = defined?(Gitlab::License)
|
||||
|
||||
if is_ee
|
||||
execute <<-EOF.strip_heredoc
|
||||
DELETE FROM path_locks
|
||||
WHERE project_id IN (
|
||||
SELECT project_id
|
||||
FROM projects
|
||||
WHERE namespace_id IN (#{namespaces_pending_removal})
|
||||
);
|
||||
EOF
|
||||
|
||||
execute <<-EOF.strip_heredoc
|
||||
DELETE FROM remote_mirrors
|
||||
WHERE project_id IN (
|
||||
SELECT project_id
|
||||
FROM projects
|
||||
WHERE namespace_id IN (#{namespaces_pending_removal})
|
||||
);
|
||||
EOF
|
||||
end
|
||||
|
||||
execute <<-EOF.strip_heredoc
|
||||
DELETE FROM projects
|
||||
WHERE namespace_id IN (
|
||||
SELECT id FROM (
|
||||
SELECT id
|
||||
FROM namespaces
|
||||
WHERE deleted_at IS NOT NULL
|
||||
) namespace_ids
|
||||
DELETE FROM lists
|
||||
WHERE label_id IN (
|
||||
SELECT id
|
||||
FROM labels
|
||||
WHERE group_id IN (#{namespaces_pending_removal})
|
||||
);
|
||||
EOF
|
||||
|
||||
if defined?(Gitlab::License)
|
||||
execute <<-EOF.strip_heredoc
|
||||
DELETE FROM lists
|
||||
WHERE board_id IN (
|
||||
SELECT id
|
||||
FROM boards
|
||||
WHERE project_id IN (
|
||||
SELECT project_id
|
||||
FROM projects
|
||||
WHERE namespace_id IN (#{namespaces_pending_removal})
|
||||
)
|
||||
);
|
||||
EOF
|
||||
|
||||
execute <<-EOF.strip_heredoc
|
||||
DELETE FROM labels
|
||||
WHERE group_id IN (#{namespaces_pending_removal});
|
||||
EOF
|
||||
|
||||
execute <<-EOF.strip_heredoc
|
||||
DELETE FROM boards
|
||||
WHERE project_id IN (
|
||||
SELECT project_id
|
||||
FROM projects
|
||||
WHERE namespace_id IN (#{namespaces_pending_removal})
|
||||
)
|
||||
EOF
|
||||
|
||||
execute <<-EOF.strip_heredoc
|
||||
DELETE FROM projects
|
||||
WHERE namespace_id IN (#{namespaces_pending_removal});
|
||||
EOF
|
||||
|
||||
if is_ee
|
||||
# EE adds these columns but we have to make sure this data is cleaned up
|
||||
# here before we run the DELETE below. An alternative would be patching
|
||||
# this migration in EE but this will only result in a mess and confusing
|
||||
# migrations.
|
||||
execute <<-EOF.strip_heredoc
|
||||
DELETE FROM protected_branch_push_access_levels
|
||||
WHERE group_id IN (
|
||||
SELECT id FROM (
|
||||
SELECT id
|
||||
FROM namespaces
|
||||
WHERE deleted_at IS NOT NULL
|
||||
) namespace_ids
|
||||
);
|
||||
WHERE group_id IN (#{namespaces_pending_removal});
|
||||
EOF
|
||||
|
||||
execute <<-EOF.strip_heredoc
|
||||
DELETE FROM protected_branch_merge_access_levels
|
||||
WHERE group_id IN (
|
||||
SELECT id FROM (
|
||||
SELECT id
|
||||
FROM namespaces
|
||||
WHERE deleted_at IS NOT NULL
|
||||
) namespace_ids
|
||||
);
|
||||
WHERE group_id IN (#{namespaces_pending_removal});
|
||||
EOF
|
||||
end
|
||||
|
||||
# This removes namespaces that were supposed to be soft deleted but still
|
||||
# reside in the database.
|
||||
# This removes namespaces that were supposed to be deleted but still reside
|
||||
# in the database.
|
||||
execute "DELETE FROM namespaces WHERE deleted_at IS NOT NULL;"
|
||||
end
|
||||
|
||||
|
@ -54,4 +94,12 @@ class RemoveUndeletedGroups < ActiveRecord::Migration
|
|||
# If someone is trying to rollback for other reasons, we should not throw an Exception.
|
||||
# raise ActiveRecord::IrreversibleMigration
|
||||
end
|
||||
|
||||
def namespaces_pending_removal
|
||||
"SELECT id FROM (
|
||||
SELECT id
|
||||
FROM namespaces
|
||||
WHERE deleted_at IS NOT NULL
|
||||
) namespace_ids"
|
||||
end
|
||||
end
|
||||
|
|
Loading…
Reference in New Issue