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 +6 -0
- data/lib/perfectqueue/backend/rdb.rb +8 -7
- data/lib/perfectqueue/version.rb +1 -1
- data/test/stress.rb +7 -7
- metadata +5 -5
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 + "\
|
69
|
+
STDERR.puts err + "\n retrying."
|
70
|
+
sleep 0.5
|
70
71
|
retry
|
71
72
|
else
|
72
|
-
STDERR.puts err + "\
|
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
|
-
|
95
|
-
|
96
|
-
|
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
|
data/lib/perfectqueue/version.rb
CHANGED
data/test/stress.rb
CHANGED
@@ -14,24 +14,24 @@ class StressTest
|
|
14
14
|
end
|
15
15
|
|
16
16
|
class ThreadMain < Thread
|
17
|
-
def initialize(key_prefix, db, num
|
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
|
-
|
28
|
-
|
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,
|
34
|
-
@db.finish(token,
|
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
|
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.
|
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: &
|
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: *
|
24
|
+
version_requirements: *13164680
|
25
25
|
- !ruby/object:Gem::Dependency
|
26
26
|
name: aws-sdk
|
27
|
-
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: *
|
35
|
+
version_requirements: *13164120
|
36
36
|
description:
|
37
37
|
email: frsyuki@gmail.com
|
38
38
|
executables:
|