diff options
author | Douwe Maan <douwe@gitlab.com> | 2017-01-12 17:55:54 +0000 |
---|---|---|
committer | Douwe Maan <douwe@gitlab.com> | 2017-01-12 17:55:54 +0000 |
commit | 6688d695ca0b1a2d04fe4e086804469732b4ae29 (patch) | |
tree | 1339d40874c5b254810058ef44e028ec1f714e71 /db | |
parent | 92ec284b2f87db508fee8433d9a69716bf65f9fc (diff) | |
parent | 63bd49696df1520f5d47daa8ffc8e0f5589f737e (diff) | |
download | gitlab-ce-6688d695ca0b1a2d04fe4e086804469732b4ae29.tar.gz |
Merge branch 'fix-more-orphans-remove-undeleted-groups' into 'master'
Remove more orphans when removing stray namespaces
Closes #25146
See merge request !7841
Diffstat (limited to 'db')
-rw-r--r-- | db/migrate/20161117114805_remove_undeleted_groups.rb | 96 |
1 files changed, 72 insertions, 24 deletions
diff --git a/db/migrate/20161117114805_remove_undeleted_groups.rb b/db/migrate/20161117114805_remove_undeleted_groups.rb index 696914f8e4d..29040583aa2 100644 --- a/db/migrate/20161117114805_remove_undeleted_groups.rb +++ b/db/migrate/20161117114805_remove_undeleted_groups.rb @@ -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 + + 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 - if defined?(Gitlab::License) + 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 |