summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDmitriy Zaporozhets <dzaporozhets@gitlab.com>2014-12-05 14:52:19 +0000
committerDmitriy Zaporozhets <dzaporozhets@gitlab.com>2014-12-05 14:52:19 +0000
commiteb12e3ab56eecb05ea2847b414554266cfb2947c (patch)
tree461bf224d03b1d52d73f6dad4dc1e5a9a48cdb47
parent805e61cee57e23f0e7b91e866a6ad807c19a5413 (diff)
parent6487419364fa9c179e24028d85b2be10d574067f (diff)
downloadgitlab-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.rb5
-rw-r--r--app/models/merge_request.rb14
-rw-r--r--app/views/projects/merge_requests/show/_state_widget.html.haml6
-rw-r--r--db/migrate/20141205134006_add_locked_at_to_merge_request.rb5
-rw-r--r--db/schema.rb3
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