diff options
author | Igor Drozdov <idrozdov@gitlab.com> | 2019-07-30 16:08:09 +0300 |
---|---|---|
committer | Igor Drozdov <idrozdov@gitlab.com> | 2019-08-01 15:13:21 +0300 |
commit | 69b408a3e109ef193c4a277412a3d3ee84714311 (patch) | |
tree | 04684449bc64ed89b6bd83f283d862cec036d98d | |
parent | cab3b77049e70435d7ebf98f1b4b0f634c0219f4 (diff) | |
download | gitlab-ce-id-ignore-assignee-id.tar.gz |
Ignore and drop MergeRequest#assignee_idid-ignore-assignee-id
-rw-r--r-- | app/models/concerns/deprecated_assignee.rb | 61 | ||||
-rw-r--r-- | app/models/merge_request.rb | 3 | ||||
-rw-r--r-- | app/models/user.rb | 2 | ||||
-rw-r--r-- | db/post_migrate/20190730152006_remove_assignee_id_from_merge_requests.rb | 14 | ||||
-rw-r--r-- | db/schema.rb | 5 |
5 files changed, 19 insertions, 66 deletions
diff --git a/app/models/concerns/deprecated_assignee.rb b/app/models/concerns/deprecated_assignee.rb index 7f12ce39c96..1128f87ea2c 100644 --- a/app/models/concerns/deprecated_assignee.rb +++ b/app/models/concerns/deprecated_assignee.rb @@ -7,16 +7,6 @@ module DeprecatedAssignee extend ActiveSupport::Concern - def assignee_ids=(ids) - nullify_deprecated_assignee - super - end - - def assignees=(users) - nullify_deprecated_assignee - super - end - def assignee_id=(id) self.assignee_ids = Array(id) end @@ -32,55 +22,4 @@ module DeprecatedAssignee def assignee_id assignee_ids.first end - - def assignee_ids - if Gitlab::Database.read_only? && pending_assignees_population? - return Array(deprecated_assignee_id) - end - - update_assignees_relation - super - end - - def assignees - if Gitlab::Database.read_only? && pending_assignees_population? - return User.where(id: deprecated_assignee_id) - end - - update_assignees_relation - super - end - - private - - # This will make the background migration process quicker (#26496) as it'll have less - # assignee_id rows to look through. - def nullify_deprecated_assignee - return unless persisted? && Gitlab::Database.read_only? - - update_column(:assignee_id, nil) - end - - # This code should be removed in the clean-up phase of the - # background migration (#59457). - def pending_assignees_population? - persisted? && deprecated_assignee_id && merge_request_assignees.empty? - end - - # If there's an assignee_id and no relation, it means the background - # migration at #26496 didn't reach this merge request yet. - # This code should be removed in the clean-up phase of the - # background migration (#59457). - def update_assignees_relation - if pending_assignees_population? - transaction do - merge_request_assignees.create!(user_id: deprecated_assignee_id, merge_request_id: id) - update_column(:assignee_id, nil) - end - end - end - - def deprecated_assignee_id - read_attribute(:assignee_id) - end end diff --git a/app/models/merge_request.rb b/app/models/merge_request.rb index 8ade91933a4..113eeeefa5b 100644 --- a/app/models/merge_request.rb +++ b/app/models/merge_request.rb @@ -16,6 +16,9 @@ class MergeRequest < ApplicationRecord include ReactiveCaching include FromUnion include DeprecatedAssignee + include IgnorableColumn + + ignore_column :assignee_id self.reactive_cache_key = ->(model) { [model.project.id, model.iid] } self.reactive_cache_refresh_interval = 10.minutes diff --git a/app/models/user.rb b/app/models/user.rb index b439d1c0c16..0e211276bfa 100644 --- a/app/models/user.rb +++ b/app/models/user.rb @@ -146,7 +146,7 @@ class User < ApplicationRecord has_many :issue_assignees has_many :assigned_issues, class_name: "Issue", through: :issue_assignees, source: :issue - has_many :assigned_merge_requests, dependent: :nullify, foreign_key: :assignee_id, class_name: "MergeRequest" # rubocop:disable Cop/ActiveRecordDependent + has_many :assigned_merge_requests, dependent: :destroy, class_name: "MergeRequestAssignee" # rubocop:disable Cop/ActiveRecordDependent has_many :custom_attributes, class_name: 'UserCustomAttribute' has_many :callouts, class_name: 'UserCallout' diff --git a/db/post_migrate/20190730152006_remove_assignee_id_from_merge_requests.rb b/db/post_migrate/20190730152006_remove_assignee_id_from_merge_requests.rb new file mode 100644 index 00000000000..f444f5623fe --- /dev/null +++ b/db/post_migrate/20190730152006_remove_assignee_id_from_merge_requests.rb @@ -0,0 +1,14 @@ +# frozen_string_literal: true + +# See http://doc.gitlab.com/ce/development/migration_style_guide.html +# for more information on how to write migrations for GitLab. + +class RemoveAssigneeIdFromMergeRequests < ActiveRecord::Migration[5.2] + include Gitlab::Database::MigrationHelpers + + DOWNTIME = false + + def change + remove_reference :merge_requests, :assignee, index: true, foreign_key: { to_table: :users } + end +end diff --git a/db/schema.rb b/db/schema.rb index f6b7e22fe09..d2a40a4bac7 100644 --- a/db/schema.rb +++ b/db/schema.rb @@ -10,7 +10,7 @@ # # It's strongly recommended that you check this file into your version control system. -ActiveRecord::Schema.define(version: 2019_07_29_090456) do +ActiveRecord::Schema.define(version: 2019_07_30_152006) do # These are extensions that must be enabled in order to support this database enable_extension "pg_trgm" @@ -1983,7 +1983,6 @@ ActiveRecord::Schema.define(version: 2019_07_29_090456) do t.string "source_branch", null: false t.integer "source_project_id" t.integer "author_id" - t.integer "assignee_id" t.string "title" t.datetime "created_at" t.datetime "updated_at" @@ -2017,7 +2016,6 @@ ActiveRecord::Schema.define(version: 2019_07_29_090456) do t.integer "state_id", limit: 2 t.integer "approvals_before_merge" t.string "rebase_jid" - t.index ["assignee_id"], name: "index_merge_requests_on_assignee_id" t.index ["author_id"], name: "index_merge_requests_on_author_id" t.index ["created_at"], name: "index_merge_requests_on_created_at" t.index ["description"], name: "index_merge_requests_on_description_trigram", opclass: :gin_trgm_ops, using: :gin @@ -3808,7 +3806,6 @@ ActiveRecord::Schema.define(version: 2019_07_29_090456) do add_foreign_key "merge_requests", "milestones", name: "fk_6a5165a692", on_delete: :nullify add_foreign_key "merge_requests", "projects", column: "source_project_id", name: "fk_3308fe130c", on_delete: :nullify add_foreign_key "merge_requests", "projects", column: "target_project_id", name: "fk_a6963e8447", on_delete: :cascade - add_foreign_key "merge_requests", "users", column: "assignee_id", name: "fk_6149611a04", on_delete: :nullify add_foreign_key "merge_requests", "users", column: "author_id", name: "fk_e719a85f8a", on_delete: :nullify add_foreign_key "merge_requests", "users", column: "merge_user_id", name: "fk_ad525e1f87", on_delete: :nullify add_foreign_key "merge_requests", "users", column: "updated_by_id", name: "fk_641731faff", on_delete: :nullify |