optimistic_locking.rb 416 字节
Newer Older
G
gfyoung 已提交
1 2
# frozen_string_literal: true

K
Kamil Trzcinski 已提交
3
module Gitlab
4
  module OptimisticLocking
5
    module_function
6 7

    def retry_lock(subject, retries = 100, &block)
8 9
      ActiveRecord::Base.transaction do
        yield(subject)
K
Kamil Trzcinski 已提交
10
      end
11 12 13 14 15 16
    rescue ActiveRecord::StaleObjectError
      retries -= 1
      raise unless retries >= 0

      subject.reload
      retry
K
Kamil Trzcinski 已提交
17
    end
18

19
    alias_method :retry_optimistic_lock, :retry_lock
K
Kamil Trzcinski 已提交
20 21
  end
end