Skip to content

Commit

Permalink
[zomekiv3-sqr:01012] Fix lock for sequence
Browse files Browse the repository at this point in the history
  • Loading branch information
kanety committed May 31, 2018
1 parent af965d8 commit 00d326d
Show file tree
Hide file tree
Showing 2 changed files with 19 additions and 7 deletions.
20 changes: 16 additions & 4 deletions app/models/sys/sequence.rb
Expand Up @@ -5,10 +5,22 @@ class Sys::Sequence < ApplicationRecord
validates :version, uniqueness: { scope: [:site_id, :name] }

def self.next(name, version, site_id)
self.transaction do
seq = self.lock.find_or_create_by(name: name, version: version, site_id: site_id)
seq.increment!(:value)
return seq
try = 0

begin
try += 1
self.transaction do
seq = self.find_or_create_by!(name: name, version: version, site_id: site_id)
seq.lock!
seq.increment!(:value)
return seq
end
rescue ActiveRecord::RecordInvalid => e
if try < 5
retry
else
raise e
end
end
end
end
6 changes: 3 additions & 3 deletions lib/util/sequencer.rb
Expand Up @@ -6,12 +6,12 @@ def self.next_id(name, options = {})
version = options[:version].to_i
site_id = options[:site_id]

lock = Util::File::Lock.lock("#{name}_#{version}_#{site_id}")
raise 'error: sequencer locked' unless lock
#lock = Util::File::Lock.lock("#{name}_#{version}_#{site_id}")
#raise 'error: sequencer locked' unless lock

seq = Sys::Sequence.next(name, version, site_id)

lock.unlock
#lock.unlock

if options[:md5]
Digest::MD5.new.update(seq.value.to_s)
Expand Down

0 comments on commit 00d326d

Please sign in to comment.