summaryrefslogtreecommitdiff
path: root/lib/gitlab/optimistic_locking.rb
diff options
context:
space:
mode:
authorKamil Trzcinski <ayufan@ayufan.eu>2016-10-21 15:12:11 +0200
committerKamil Trzcinski <ayufan@ayufan.eu>2016-10-26 11:37:23 +0200
commit47b2add4f62d64d1a46109910c86805728e548c4 (patch)
tree58bee6cd9dbd1f4b7be7761578b9a18486998b36 /lib/gitlab/optimistic_locking.rb
parent5d7ee7a1b6c818dd0ccba6a393875072dabd7eba (diff)
downloadgitlab-ce-47b2add4f62d64d1a46109910c86805728e548c4.tar.gz
Add tests for optimistic locking
Diffstat (limited to 'lib/gitlab/optimistic_locking.rb')
-rw-r--r--lib/gitlab/optimistic_locking.rb12
1 files changed, 7 insertions, 5 deletions
diff --git a/lib/gitlab/optimistic_locking.rb b/lib/gitlab/optimistic_locking.rb
index 7668c518bc5..17010d73c57 100644
--- a/lib/gitlab/optimistic_locking.rb
+++ b/lib/gitlab/optimistic_locking.rb
@@ -1,10 +1,12 @@
module Gitlab
- module OptimisticLocking
- def retry_lock(subject, &block)
- while true do
+ class OptimisticLocking
+ def self.retry_lock(subject, &block)
+ loop do
begin
- return yield subject
- rescue StaleObjectError
+ subject.transaction do
+ return block.call(subject)
+ end
+ rescue ActiveRecord::StaleObjectError
subject.reload
end
end