perfectqueue 0.7.15 → 0.7.16

Sign up to get free protection for your applications and to get access to all the features.
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: