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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
- SHA1:
3
- metadata.gz: 7274d143afaecb7d6ee09cac6d4e287813dcf1bc
4
- data.tar.gz: 25c4271e2bbcb2734c92234a73c59121e383834c
2
+ SHA256:
3
+ metadata.gz: 7b8b427559de5e5d2d190fd34f8e5405c1285ceb8f4aaddb2f4fc8c255936774
4
+ data.tar.gz: 9931930b7abaaf9899d717badb51dd624ddf579e21c1cdd8f38efbe9fbe9adca
5
5
  SHA512:
6
- metadata.gz: cc0acb6de0b1771606a5a8047f48d6c6e904722af0416291951cb87cfca8a65bd16b501099a1540e0f55ab7f9a41c650321b6cc87add520ead66b69acf61def2
7
- data.tar.gz: 1b85520494ad5059f0dc5dc187eeab5810a51bd707e6931b21e1663c0425b0fcf05921ebb424f7aa1102e744a3f1e317cda7d0fe55d3fd36e947f895ba0420e3
6
+ metadata.gz: 82c3b26e8343f994e1464d185a7a1daa52cf183a299ffbf6a095cf0463d7760dce5dba31a5029905a3a364e3e3d4a1e0ee0141e6175d93c82638fcc933d0caf1
7
+ data.tar.gz: e3901f63fcb95ac368fece8f8f277cc0e95cbc960f2b5d7ab24312a4afa618ad5b032fcb4decc23c330623d7821d3d4aa72f733a8d3250a68666534ea634ad0c
data/.travis.yml CHANGED
@@ -1,7 +1,8 @@
1
1
  rvm:
2
- - 2.1.10
3
- - 2.2.5
4
- - 2.3.1
2
+ - 2.3.8
3
+ - 2.4.6
4
+ - 2.5.5
5
+ - 2.6.3
5
6
  - ruby-head
6
7
 
7
8
  script: "bundle exec rake spec"
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 = 60
99
+ LOCK_WAIT_TIMEOUT = 10
94
100
  DEFAULT_DELETE_INTERVAL = 20
95
101
 
96
102
  def init_database(options)
@@ -1,3 +1,3 @@
1
1
  module PerfectQueue
2
- VERSION = "0.9.2"
2
+ VERSION = "0.10.0"
3
3
  end
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", "~> 3.48.0"
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", "~> 0.3.20"
25
+ gem.add_development_dependency "mysql2", ">= 0.3.20"
26
26
  end
@@ -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
- allow(STDERR).to receive(:puts)
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
- d = Backend::RDBCompatBackend.new(client, config)
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
@@ -16,6 +16,7 @@ if ENV["CI"]
16
16
  end
17
17
 
18
18
  require 'fileutils'
19
+ require 'tempfile'
19
20
 
20
21
  module QueueTest
21
22
  def self.included(mod)
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.9.2
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: 2016-10-06 00:00:00.000000000 Z
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
- rubyforge_project:
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
data/circle.yml DELETED
@@ -1,7 +0,0 @@
1
- machine:
2
- ruby:
3
- version: 2.2.2
4
-
5
- database:
6
- pre:
7
- - mysql -e 'create database perfectqueue_test;'