summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorIgor Drozdov <idrozdov@gitlab.com>2019-07-30 16:08:09 +0300
committerIgor Drozdov <idrozdov@gitlab.com>2019-08-01 15:13:21 +0300
commit69b408a3e109ef193c4a277412a3d3ee84714311 (patch)
tree04684449bc64ed89b6bd83f283d862cec036d98d
parentcab3b77049e70435d7ebf98f1b4b0f634c0219f4 (diff)
downloadgitlab-ce-id-ignore-assignee-id.tar.gz
Ignore and drop MergeRequest#assignee_idid-ignore-assignee-id
-rw-r--r--app/models/concerns/deprecated_assignee.rb61
-rw-r--r--app/models/merge_request.rb3
-rw-r--r--app/models/user.rb2
-rw-r--r--db/post_migrate/20190730152006_remove_assignee_id_from_merge_requests.rb14
-rw-r--r--db/schema.rb5
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