perfectqueue 0.7.15 → 0.7.16

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
data/ChangeLog CHANGED
@@ -1,4 +1,10 @@
1
1
 
2
+ == 2012-01-10 version 0.7.16
3
+
4
+ * RDBBackend: sleep 0.5 before retrying failed transaction by deadlock
5
+ * RDBBackend: release the row lock acquired by SELECT .. FOR UPDATE before retrying it
6
+
7
+
2
8
  == 2012-01-10 version 0.7.15
3
9
 
4
10
  * RDBBackend: Fixed locking routines to work with possibility of deadlocks
@@ -62,14 +62,15 @@ SQL
62
62
  block.call
63
63
  rescue
64
64
  # workaround for "Mysql2::Error: Deadlock found when trying to get lock; try restarting transaction" error
65
- err = ([$!] + $!.backtrace.map {|bt| " #{bt}" }).join("\n")
66
65
  if $!.to_s.include?('try restarting transaction')
66
+ err = ([$!] + $!.backtrace.map {|bt| " #{bt}" }).join("\n")
67
67
  retry_count += 1
68
68
  if retry_count < MAX_RETRY
69
- STDERR.puts err + "\nretrying"
69
+ STDERR.puts err + "\n retrying."
70
+ sleep 0.5
70
71
  retry
71
72
  else
72
- STDERR.puts err + "\nabort"
73
+ STDERR.puts err + "\n abort."
73
74
  end
74
75
  end
75
76
  raise
@@ -91,9 +92,9 @@ SQL
91
92
 
92
93
  def acquire(timeout, now=Time.now.to_i)
93
94
  connect {
94
- @db.transaction do
95
- while true
96
- rows = 0
95
+ while true
96
+ rows = 0
97
+ @db.transaction do
97
98
  @db.fetch(@sql, now, now) {|row|
98
99
  unless row[:created_at]
99
100
  # finished/canceled task
@@ -110,8 +111,8 @@ SQL
110
111
 
111
112
  rows += 1
112
113
  }
113
- break nil if rows < MAX_SELECT_ROW
114
114
  end
115
+ break nil if rows < MAX_SELECT_ROW
115
116
  end
116
117
  }
117
118
  end
@@ -1,5 +1,5 @@
1
1
  module PerfectQueue
2
2
 
3
- VERSION = '0.7.15'
3
+ VERSION = '0.7.16'
4
4
 
5
5
  end
@@ -14,24 +14,24 @@ class StressTest
14
14
  end
15
15
 
16
16
  class ThreadMain < Thread
17
- def initialize(key_prefix, db, num, now)
17
+ def initialize(key_prefix, db, num)
18
18
  @key_prefix = key_prefix
19
19
  @db = db
20
20
  @num = num
21
- @now = now
22
21
  super(&method(:run))
23
22
  end
24
23
 
25
24
  def run
26
25
  @num.times {|i|
27
- @db.submit("#{@key_prefix}-#{i}", "data", @now)
28
- token, task = @db.acquire(@now+60)
26
+ now = Time.now.to_i
27
+ @db.submit("#{@key_prefix}-#{i}", "data", now)
28
+ token, task = @db.acquire(now+60)
29
29
  if token == nil
30
30
  puts "acquire failed"
31
31
  next
32
32
  end
33
- @db.update(token, @now+70)
34
- @db.finish(token, @now+80)
33
+ @db.update(token, now+70)
34
+ @db.finish(token, now+80)
35
35
  }
36
36
  end
37
37
  end
@@ -41,7 +41,7 @@ class StressTest
41
41
  key_prefix = "stress-#{'%08x'%rand(2**32)}"
42
42
  now = Time.now
43
43
  @thread.times {|i|
44
- threads << ThreadMain.new("#{key_prefix}-#{i}", @db_proc.call, @npt, now.to_i)
44
+ threads << ThreadMain.new("#{key_prefix}-#{i}", @db_proc.call, @npt)
45
45
  }
46
46
  threads.each {|t|
47
47
  t.join
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: perfectqueue
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.7.15
4
+ version: 0.7.16
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -13,7 +13,7 @@ date: 2012-01-11 00:00:00.000000000Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: sequel
16
- requirement: &13147240 !ruby/object:Gem::Requirement
16
+ requirement: &13164680 !ruby/object:Gem::Requirement
17
17
  none: false
18
18
  requirements:
19
19
  - - ~>
@@ -21,10 +21,10 @@ dependencies:
21
21
  version: 3.26.0
22
22
  type: :runtime
23
23
  prerelease: false
24
- version_requirements: *13147240
24
+ version_requirements: *13164680
25
25
  - !ruby/object:Gem::Dependency
26
26
  name: aws-sdk
27
- requirement: &13146400 !ruby/object:Gem::Requirement
27
+ requirement: &13164120 !ruby/object:Gem::Requirement
28
28
  none: false
29
29
  requirements:
30
30
  - - ~>
@@ -32,7 +32,7 @@ dependencies:
32
32
  version: 1.1.1
33
33
  type: :runtime
34
34
  prerelease: false
35
- version_requirements: *13146400
35
+ version_requirements: *13164120
36
36
  description:
37
37
  email: frsyuki@gmail.com
38
38
  executables: