perfectqueue 0.7.20 → 0.7.21
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 +5 -0
- data/lib/perfectqueue/backend/null.rb +1 -1
- data/lib/perfectqueue/backend/rdb.rb +7 -6
- data/lib/perfectqueue/version.rb +1 -1
- data/test/backend_test.rb +11 -8
- metadata +17 -7
data/ChangeLog
CHANGED
@@ -15,7 +15,7 @@ class RDBBackend < Backend
|
|
15
15
|
# connection test
|
16
16
|
}
|
17
17
|
@sql = <<SQL
|
18
|
-
SELECT id, timeout, data, created_at, resource
|
18
|
+
SELECT id, timeout, data, created_at, resource, max_running-running AS runnable
|
19
19
|
FROM `#{@table}`
|
20
20
|
LEFT JOIN (
|
21
21
|
SELECT resource AS res, COUNT(1) AS running
|
@@ -23,8 +23,9 @@ LEFT JOIN (
|
|
23
23
|
WHERE timeout > ? AND created_at IS NOT NULL AND resource IS NOT NULL
|
24
24
|
GROUP BY resource
|
25
25
|
) AS R ON resource = res
|
26
|
-
WHERE timeout <= ? AND (
|
27
|
-
ORDER BY timeout ASC
|
26
|
+
WHERE timeout <= ? AND (runnable IS NULL OR runnable > 0)
|
27
|
+
ORDER BY runnable IS NOT NULL, runnable DESC, timeout ASC
|
28
|
+
LIMIT #{MAX_SELECT_ROW}
|
28
29
|
SQL
|
29
30
|
# sqlite doesn't support SELECT ... FOR UPDATE but
|
30
31
|
# sqlite doesn't need it because the db is not shared
|
@@ -41,6 +42,7 @@ SQL
|
|
41
42
|
sql << " data BLOB NOT NULL,"
|
42
43
|
sql << " created_at INT,"
|
43
44
|
sql << " resource VARCHAR(256),"
|
45
|
+
sql << " max_running INT,"
|
44
46
|
sql << " PRIMARY KEY (id)"
|
45
47
|
sql << ");"
|
46
48
|
# TODO index
|
@@ -88,7 +90,6 @@ SQL
|
|
88
90
|
end
|
89
91
|
|
90
92
|
MAX_SELECT_ROW = 8
|
91
|
-
MAX_RESOURCE = (ENV['PQ_MAX_RESOURCE'] || 4).to_i
|
92
93
|
#KEEPALIVE = 10
|
93
94
|
MAX_RETRY = 10
|
94
95
|
|
@@ -140,10 +141,10 @@ SQL
|
|
140
141
|
finish(id, delete_timeout, now)
|
141
142
|
end
|
142
143
|
|
143
|
-
def submit(id, data, time=Time.now.to_i, resource=nil)
|
144
|
+
def submit(id, data, time=Time.now.to_i, resource=nil, max_running=nil)
|
144
145
|
connect {
|
145
146
|
begin
|
146
|
-
n = @db["INSERT INTO `#{@table}` (id, timeout, data, created_at, resource) VALUES (?, ?, ?, ?, ?);", id, time, data, time, resource].insert
|
147
|
+
n = @db["INSERT INTO `#{@table}` (id, timeout, data, created_at, resource, max_running) VALUES (?, ?, ?, ?, ?, ?);", id, time, data, time, resource, max_running].insert
|
147
148
|
return true
|
148
149
|
rescue Sequel::DatabaseError
|
149
150
|
return nil
|
data/lib/perfectqueue/version.rb
CHANGED
data/test/backend_test.rb
CHANGED
@@ -223,25 +223,28 @@ class BackendTest < Test::Unit::TestCase
|
|
223
223
|
|
224
224
|
time = Time.now.to_i
|
225
225
|
|
226
|
-
|
227
|
-
ok = db1.submit(@key_prefix+'test'+i.to_s, 'data1', time-i, 'user1')
|
226
|
+
3.times do |i|
|
227
|
+
ok = db1.submit(@key_prefix+'test'+i.to_s, 'data1', time-(i+1), 'user1', 2)
|
228
228
|
assert_equal true, ok
|
229
229
|
end
|
230
|
-
ok = db1.submit(@key_prefix+'test5', 'data2', time, 'user2')
|
230
|
+
ok = db1.submit(@key_prefix+'test5', 'data2', time, 'user2', 2)
|
231
231
|
assert_equal true, ok
|
232
232
|
|
233
233
|
token_1 = nil
|
234
234
|
task_1 = nil
|
235
|
-
|
236
|
-
|
237
|
-
|
238
|
-
|
239
|
-
end
|
235
|
+
|
236
|
+
token_1, task_1 = db1.acquire(time+TIMEOUT, time)
|
237
|
+
assert_not_equal nil, task_1
|
238
|
+
assert_equal "user1", task_1.resource
|
240
239
|
|
241
240
|
token, task = db1.acquire(time+TIMEOUT, time)
|
242
241
|
assert_not_equal nil, task
|
243
242
|
assert_equal "user2", task.resource
|
244
243
|
|
244
|
+
token, task = db1.acquire(time+TIMEOUT, time)
|
245
|
+
assert_not_equal nil, task
|
246
|
+
assert_equal "user1", task.resource
|
247
|
+
|
245
248
|
token, task = db1.acquire(time+TIMEOUT, time)
|
246
249
|
assert_equal nil, task
|
247
250
|
|
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.21
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,11 +9,11 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2012-
|
12
|
+
date: 2012-07-19 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: sequel
|
16
|
-
requirement:
|
16
|
+
requirement: !ruby/object:Gem::Requirement
|
17
17
|
none: false
|
18
18
|
requirements:
|
19
19
|
- - ~>
|
@@ -21,10 +21,15 @@ dependencies:
|
|
21
21
|
version: 3.26.0
|
22
22
|
type: :runtime
|
23
23
|
prerelease: false
|
24
|
-
version_requirements:
|
24
|
+
version_requirements: !ruby/object:Gem::Requirement
|
25
|
+
none: false
|
26
|
+
requirements:
|
27
|
+
- - ~>
|
28
|
+
- !ruby/object:Gem::Version
|
29
|
+
version: 3.26.0
|
25
30
|
- !ruby/object:Gem::Dependency
|
26
31
|
name: aws-sdk
|
27
|
-
requirement:
|
32
|
+
requirement: !ruby/object:Gem::Requirement
|
28
33
|
none: false
|
29
34
|
requirements:
|
30
35
|
- - ~>
|
@@ -32,7 +37,12 @@ dependencies:
|
|
32
37
|
version: 1.1.1
|
33
38
|
type: :runtime
|
34
39
|
prerelease: false
|
35
|
-
version_requirements:
|
40
|
+
version_requirements: !ruby/object:Gem::Requirement
|
41
|
+
none: false
|
42
|
+
requirements:
|
43
|
+
- - ~>
|
44
|
+
- !ruby/object:Gem::Version
|
45
|
+
version: 1.1.1
|
36
46
|
description:
|
37
47
|
email: frsyuki@gmail.com
|
38
48
|
executables:
|
@@ -83,7 +93,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
83
93
|
version: '0'
|
84
94
|
requirements: []
|
85
95
|
rubyforge_project:
|
86
|
-
rubygems_version: 1.8.
|
96
|
+
rubygems_version: 1.8.23
|
87
97
|
signing_key:
|
88
98
|
specification_version: 3
|
89
99
|
summary: Highly available distributed queue built on RDBMS or SimpleDB
|