perfectqueue 0.9.2 → 0.10.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +5 -5
- data/.travis.yml +4 -3
- data/ChangeLog +6 -0
- data/lib/perfectqueue/backend/rdb_compat.rb +7 -1
- data/lib/perfectqueue/version.rb +1 -1
- data/perfectqueue.gemspec +2 -2
- data/spec/rdb_backend_spec.rb +1 -9
- data/spec/rdb_compat_backend_spec.rb +1 -6
- data/spec/spec_helper.rb +1 -0
- metadata +7 -9
- data/circle.yml +0 -7
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
|
-
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
2
|
+
SHA256:
|
3
|
+
metadata.gz: 7b8b427559de5e5d2d190fd34f8e5405c1285ceb8f4aaddb2f4fc8c255936774
|
4
|
+
data.tar.gz: 9931930b7abaaf9899d717badb51dd624ddf579e21c1cdd8f38efbe9fbe9adca
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 82c3b26e8343f994e1464d185a7a1daa52cf183a299ffbf6a095cf0463d7760dce5dba31a5029905a3a364e3e3d4a1e0ee0141e6175d93c82638fcc933d0caf1
|
7
|
+
data.tar.gz: e3901f63fcb95ac368fece8f8f277cc0e95cbc960f2b5d7ab24312a4afa618ad5b032fcb4decc23c330623d7821d3d4aa72f733a8d3250a68666534ea634ad0c
|
data/.travis.yml
CHANGED
data/ChangeLog
CHANGED
@@ -1,3 +1,9 @@
|
|
1
|
+
== 2019-07-10 version 0.10.0
|
2
|
+
|
3
|
+
* Relax sequel version constraint (#62)
|
4
|
+
* Using sequel 4+ raises `Sequel::DatabaseConnectionError` on
|
5
|
+
`Backend::RDBBackend.new` instead of its `#connect`.
|
6
|
+
|
1
7
|
== 2016-10-07 version 0.9.2
|
2
8
|
|
3
9
|
* Use v08's strategy if resource limit is used (#55)
|
@@ -33,6 +33,9 @@ module PerfectQueue
|
|
33
33
|
DELETE_OFFSET = 10_0000_0000
|
34
34
|
EVENT_HORIZON = 13_0000_0000 # 2011-03-13 07:06:40 UTC
|
35
35
|
|
36
|
+
LOCK_RETRY_INITIAL_INTERVAL = 0.5
|
37
|
+
LOCK_RETRY_MAX_INTERVAL = 30
|
38
|
+
|
36
39
|
class Token < Struct.new(:key)
|
37
40
|
end
|
38
41
|
|
@@ -57,11 +60,14 @@ module PerfectQueue
|
|
57
60
|
end
|
58
61
|
@table_lock = lambda {
|
59
62
|
locked = nil
|
63
|
+
interval = LOCK_RETRY_INITIAL_INTERVAL
|
60
64
|
loop do
|
61
65
|
@db.fetch("SELECT GET_LOCK('#{@table}', #{LOCK_WAIT_TIMEOUT}) locked") do |row|
|
62
66
|
locked = true if row[:locked] == 1
|
63
67
|
end
|
64
68
|
break if locked
|
69
|
+
sleep interval
|
70
|
+
interval = [interval * 2, LOCK_RETRY_MAX_INTERVAL].min
|
65
71
|
end
|
66
72
|
}
|
67
73
|
@table_unlock = lambda {
|
@@ -90,7 +96,7 @@ module PerfectQueue
|
|
90
96
|
|
91
97
|
KEEPALIVE = 10
|
92
98
|
MAX_RETRY = 10
|
93
|
-
LOCK_WAIT_TIMEOUT =
|
99
|
+
LOCK_WAIT_TIMEOUT = 10
|
94
100
|
DEFAULT_DELETE_INTERVAL = 20
|
95
101
|
|
96
102
|
def init_database(options)
|
data/lib/perfectqueue/version.rb
CHANGED
data/perfectqueue.gemspec
CHANGED
@@ -18,9 +18,9 @@ Gem::Specification.new do |gem|
|
|
18
18
|
gem.require_paths = ['lib']
|
19
19
|
|
20
20
|
gem.required_ruby_version = '>= 2.1'
|
21
|
-
gem.add_dependency "sequel", "
|
21
|
+
gem.add_dependency "sequel", ">= 3.48.0"
|
22
22
|
gem.add_development_dependency "rake", "~> 0.9.2"
|
23
23
|
gem.add_development_dependency "rspec", "~> 3.3.0"
|
24
24
|
gem.add_development_dependency "simplecov", "~> 0.10.0"
|
25
|
-
gem.add_development_dependency "mysql2", "
|
25
|
+
gem.add_development_dependency "mysql2", ">= 0.3.20"
|
26
26
|
end
|
data/spec/rdb_backend_spec.rb
CHANGED
@@ -71,16 +71,8 @@ describe Backend::RDBBackend do
|
|
71
71
|
end
|
72
72
|
context 'cannot connect' do
|
73
73
|
let (:uri){ 'mysql2://root:@nonexistent/perfectqueue_test' }
|
74
|
-
let (:db) do
|
75
|
-
Backend::RDBBackend.new(uri, table)
|
76
|
-
end
|
77
74
|
it 'raises Sequel::DatabaseConnectionError' do
|
78
|
-
|
79
|
-
slept = 0
|
80
|
-
expect(db).to receive(:sleep).exactly(9).times{|n| slept += n }
|
81
|
-
expect(db.db).to receive(:connect).exactly(10).times.and_call_original
|
82
|
-
expect{ db.__send__(:connect){ db.db.run('SELECT 1;') } }.to raise_error(Sequel::DatabaseConnectionError)
|
83
|
-
expect(slept).to be < 30
|
75
|
+
expect { Backend::RDBBackend.new(uri, table) }.to raise_error(Sequel::DatabaseConnectionError)
|
84
76
|
end
|
85
77
|
end
|
86
78
|
end
|
@@ -342,12 +342,7 @@ describe Backend::RDBCompatBackend do
|
|
342
342
|
let (:config){ {url: 'mysql2://root:@nonexistent/perfectqueue_test', table: table} }
|
343
343
|
it 'raises Sequel::DatabaseConnectionError' do
|
344
344
|
allow(STDERR).to receive(:puts)
|
345
|
-
|
346
|
-
slept = 0
|
347
|
-
expect(d).to receive(:sleep).exactly(9).times{|n| slept += n }
|
348
|
-
expect(d.db).to receive(:connect).exactly(10).times.and_call_original
|
349
|
-
expect{ d.__send__(:connect){ d.db.run('SELECT 1;') } }.to raise_error(Sequel::DatabaseConnectionError)
|
350
|
-
expect(slept).to eq(18)
|
345
|
+
expect { Backend::RDBCompatBackend.new(client, config) }.to raise_error(Sequel::DatabaseConnectionError)
|
351
346
|
end
|
352
347
|
end
|
353
348
|
end
|
data/spec/spec_helper.rb
CHANGED
metadata
CHANGED
@@ -1,27 +1,27 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: perfectqueue
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.10.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Sadayuki Furuhashi
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2019-07-10 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: sequel
|
15
15
|
requirement: !ruby/object:Gem::Requirement
|
16
16
|
requirements:
|
17
|
-
- - "
|
17
|
+
- - ">="
|
18
18
|
- !ruby/object:Gem::Version
|
19
19
|
version: 3.48.0
|
20
20
|
type: :runtime
|
21
21
|
prerelease: false
|
22
22
|
version_requirements: !ruby/object:Gem::Requirement
|
23
23
|
requirements:
|
24
|
-
- - "
|
24
|
+
- - ">="
|
25
25
|
- !ruby/object:Gem::Version
|
26
26
|
version: 3.48.0
|
27
27
|
- !ruby/object:Gem::Dependency
|
@@ -70,14 +70,14 @@ dependencies:
|
|
70
70
|
name: mysql2
|
71
71
|
requirement: !ruby/object:Gem::Requirement
|
72
72
|
requirements:
|
73
|
-
- - "
|
73
|
+
- - ">="
|
74
74
|
- !ruby/object:Gem::Version
|
75
75
|
version: 0.3.20
|
76
76
|
type: :development
|
77
77
|
prerelease: false
|
78
78
|
version_requirements: !ruby/object:Gem::Requirement
|
79
79
|
requirements:
|
80
|
-
- - "
|
80
|
+
- - ">="
|
81
81
|
- !ruby/object:Gem::Version
|
82
82
|
version: 0.3.20
|
83
83
|
description: Highly available distributed cron built on RDBMS
|
@@ -98,7 +98,6 @@ files:
|
|
98
98
|
- Rakefile
|
99
99
|
- bin/perfectqueue
|
100
100
|
- bin/stress
|
101
|
-
- circle.yml
|
102
101
|
- lib/perfectqueue.rb
|
103
102
|
- lib/perfectqueue/application.rb
|
104
103
|
- lib/perfectqueue/application/base.rb
|
@@ -177,8 +176,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
177
176
|
- !ruby/object:Gem::Version
|
178
177
|
version: '0'
|
179
178
|
requirements: []
|
180
|
-
|
181
|
-
rubygems_version: 2.5.1
|
179
|
+
rubygems_version: 3.0.3
|
182
180
|
signing_key:
|
183
181
|
specification_version: 4
|
184
182
|
summary: Highly available distributed cron built on RDBMS
|