diff options
author | Dmitriy Zaporozhets <dzaporozhets@gitlab.com> | 2014-12-05 14:52:19 +0000 |
---|---|---|
committer | Dmitriy Zaporozhets <dzaporozhets@gitlab.com> | 2014-12-05 14:52:19 +0000 |
commit | eb12e3ab56eecb05ea2847b414554266cfb2947c (patch) | |
tree | 461bf224d03b1d52d73f6dad4dc1e5a9a48cdb47 | |
parent | 805e61cee57e23f0e7b91e866a6ad807c19a5413 (diff) | |
parent | 6487419364fa9c179e24028d85b2be10d574067f (diff) | |
download | gitlab-ce-eb12e3ab56eecb05ea2847b414554266cfb2947c.tar.gz |
Merge branch 'mr-lock-problem' into 'master'
Fix merge request lock problem
Merge Request lock problem
MR can be stuck in lock state if satelitte timeout >= unicorn timeout.
Issue explanation:
* Person press Accept button
* unicorn worker starts, lock MR and trigger satellite
* satellite does merge but very long (30 seconds)
* unicorn timeout reaches earlier then satellite timeout
* unicorn kills worker because of timeout leaving MR in lock state.
Fix:
* set locked_at date
* if MR was locked for too long - close it automatically
- - -
Fixes #1674
See merge request !1306
-rw-r--r-- | app/controllers/projects/merge_requests_controller.rb | 5 | ||||
-rw-r--r-- | app/models/merge_request.rb | 14 | ||||
-rw-r--r-- | app/views/projects/merge_requests/show/_state_widget.html.haml | 6 | ||||
-rw-r--r-- | db/migrate/20141205134006_add_locked_at_to_merge_request.rb | 5 | ||||
-rw-r--r-- | db/schema.rb | 3 |
5 files changed, 30 insertions, 3 deletions
diff --git a/app/controllers/projects/merge_requests_controller.rb b/app/controllers/projects/merge_requests_controller.rb index 20a733b10e1..bd43d15984d 100644 --- a/app/controllers/projects/merge_requests_controller.rb +++ b/app/controllers/projects/merge_requests_controller.rb @@ -225,6 +225,11 @@ class Projects::MergeRequestsController < Projects::ApplicationController @allowed_to_merge = allowed_to_merge? @show_merge_controls = @merge_request.open? && @commits.any? && @allowed_to_merge @source_branch = @merge_request.source_project.repository.find_branch(@merge_request.source_branch).try(:name) + + if @merge_request.locked_long_ago? + @merge_request.unlock_mr + @merge_request.close + end end def allowed_to_merge? diff --git a/app/models/merge_request.rb b/app/models/merge_request.rb index 7c525b02f48..2cc427d35c2 100644 --- a/app/models/merge_request.rb +++ b/app/models/merge_request.rb @@ -70,6 +70,16 @@ class MergeRequest < ActiveRecord::Base transition locked: :reopened end + after_transition any => :locked do |merge_request, transition| + merge_request.locked_at = Time.now + merge_request.save + end + + after_transition :locked => (any - :locked) do |merge_request, transition| + merge_request.locked_at = nil + merge_request.save + end + state :opened state :reopened state :closed @@ -336,4 +346,8 @@ class MergeRequest < ActiveRecord::Base source_project.repository.branch_names end end + + def locked_long_ago? + locked_at && locked_at < (Time.now - 1.day) + end end diff --git a/app/views/projects/merge_requests/show/_state_widget.html.haml b/app/views/projects/merge_requests/show/_state_widget.html.haml index 87dad6140be..f909948995c 100644 --- a/app/views/projects/merge_requests/show/_state_widget.html.haml +++ b/app/views/projects/merge_requests/show/_state_widget.html.haml @@ -11,8 +11,10 @@ - if @merge_request.closed? %h4 - Closed by #{link_to_member(@project, @merge_request.closed_event.author, avatar: false)} - #{time_ago_with_tooltip(@merge_request.closed_event.created_at)} + Closed + - if @merge_request.closed_event + by #{link_to_member(@project, @merge_request.closed_event.author, avatar: false)} + #{time_ago_with_tooltip(@merge_request.closed_event.created_at)} %p Changes were not merged into target branch - if @merge_request.merged? diff --git a/db/migrate/20141205134006_add_locked_at_to_merge_request.rb b/db/migrate/20141205134006_add_locked_at_to_merge_request.rb new file mode 100644 index 00000000000..49651c44a82 --- /dev/null +++ b/db/migrate/20141205134006_add_locked_at_to_merge_request.rb @@ -0,0 +1,5 @@ +class AddLockedAtToMergeRequest < ActiveRecord::Migration + def change + add_column :merge_requests, :locked_at, :datetime + end +end diff --git a/db/schema.rb b/db/schema.rb index ec211901e42..b8335c5841b 100644 --- a/db/schema.rb +++ b/db/schema.rb @@ -11,7 +11,7 @@ # # It's strongly recommended that you check this file into your version control system. -ActiveRecord::Schema.define(version: 20141121161704) do +ActiveRecord::Schema.define(version: 20141205134006) do # These are extensions that must be enabled in order to support this database enable_extension "plpgsql" @@ -181,6 +181,7 @@ ActiveRecord::Schema.define(version: 20141121161704) do t.integer "iid" t.text "description" t.integer "position", default: 0 + t.datetime "locked_at" end add_index "merge_requests", ["assignee_id"], name: "index_merge_requests_on_assignee_id", using: :btree |