perfectqueue 0.9.2 → 0.10.0

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.
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;'