Skip to content
Snippets Groups Projects
optimistic_locking.rb 399 B
Newer Older
  • Learn to ignore specific revisions
  • Kamil Trzcinski's avatar
    Kamil Trzcinski committed
    module Gitlab
    
      module OptimisticLocking
        extend self
    
        def retry_lock(subject, retries = 100, &block)
    
    Kamil Trzcinski's avatar
    Kamil Trzcinski committed
            begin
    
              ActiveRecord::Base.transaction do
    
                return yield(subject)
    
              end
            rescue ActiveRecord::StaleObjectError
    
              retries -= 1
              raise unless retries >= 0
    
    Kamil Trzcinski's avatar
    Kamil Trzcinski committed
              subject.reload
            end
          end
        end
      end
    end