diff options
author | Francisco Javier López <fjlopez@gitlab.com> | 2018-01-02 15:06:44 +0000 |
---|---|---|
committer | Douwe Maan <douwe@gitlab.com> | 2018-01-02 15:06:44 +0000 |
commit | 2665aea6275cc82888ed3e3ab3dbe384028d663c (patch) | |
tree | c293f8e3033667aa992b53f38d2e135093529242 /db | |
parent | 3f44c4cedbbd9b72fdf28e83caaec345934e1d8d (diff) | |
download | gitlab-ce-2665aea6275cc82888ed3e3ab3dbe384028d663c.tar.gz |
Fix user membership destroy relation
Diffstat (limited to 'db')
-rw-r--r-- | db/migrate/20171216111734_clean_up_for_members.rb | 31 | ||||
-rw-r--r-- | db/migrate/20171216112339_add_foreign_key_for_members.rb | 21 | ||||
-rw-r--r-- | db/schema.rb | 1 |
3 files changed, 53 insertions, 0 deletions
diff --git a/db/migrate/20171216111734_clean_up_for_members.rb b/db/migrate/20171216111734_clean_up_for_members.rb new file mode 100644 index 00000000000..22e0997dce6 --- /dev/null +++ b/db/migrate/20171216111734_clean_up_for_members.rb @@ -0,0 +1,31 @@ +# See http://doc.gitlab.com/ce/development/migration_style_guide.html +# for more information on how to write migrations for GitLab. + +class CleanUpForMembers < ActiveRecord::Migration + include Gitlab::Database::MigrationHelpers + + # Set this constant to true if this migration requires downtime. + DOWNTIME = false + + disable_ddl_transaction! + + class Member < ActiveRecord::Base + include EachBatch + + self.table_name = 'members' + end + + def up + condition = <<~EOF.squish + invite_token IS NULL AND + NOT EXISTS (SELECT 1 FROM users WHERE users.id = members.user_id) + EOF + + Member.each_batch(of: 10_000) do |batch| + batch.where(condition).delete_all + end + end + + def down + end +end diff --git a/db/migrate/20171216112339_add_foreign_key_for_members.rb b/db/migrate/20171216112339_add_foreign_key_for_members.rb new file mode 100644 index 00000000000..be17769be6a --- /dev/null +++ b/db/migrate/20171216112339_add_foreign_key_for_members.rb @@ -0,0 +1,21 @@ +# See http://doc.gitlab.com/ce/development/migration_style_guide.html +# for more information on how to write migrations for GitLab. + +class AddForeignKeyForMembers < ActiveRecord::Migration + include Gitlab::Database::MigrationHelpers + + # Set this constant to true if this migration requires downtime. + DOWNTIME = false + + disable_ddl_transaction! + + def up + add_concurrent_foreign_key(:members, + :users, + column: :user_id) + end + + def down + remove_foreign_key(:members, column: :user_id) + end +end diff --git a/db/schema.rb b/db/schema.rb index 88885f706b7..42715d5e1e8 100644 --- a/db/schema.rb +++ b/db/schema.rb @@ -1989,6 +1989,7 @@ ActiveRecord::Schema.define(version: 20171220191323) do add_foreign_key "labels", "projects", name: "fk_7de4989a69", on_delete: :cascade add_foreign_key "lists", "boards", name: "fk_0d3f677137", on_delete: :cascade add_foreign_key "lists", "labels", name: "fk_7a5553d60f", on_delete: :cascade + add_foreign_key "members", "users", name: "fk_2e88fb7ce9", on_delete: :cascade add_foreign_key "merge_request_diff_commits", "merge_request_diffs", on_delete: :cascade add_foreign_key "merge_request_diff_files", "merge_request_diffs", on_delete: :cascade add_foreign_key "merge_request_diffs", "merge_requests", name: "fk_8483f3258f", on_delete: :cascade |