resqued 0.8.5 → 0.10.2

Sign up to get free protection for your applications and to get access to all the features.
Files changed (40) hide show
  1. checksums.yaml +5 -5
  2. data/CHANGES.md +23 -0
  3. data/exe/resqued +41 -22
  4. data/lib/resqued.rb +5 -5
  5. data/lib/resqued/config.rb +7 -7
  6. data/lib/resqued/config/after_fork.rb +1 -1
  7. data/lib/resqued/config/base.rb +1 -1
  8. data/lib/resqued/config/before_fork.rb +1 -1
  9. data/lib/resqued/config/worker.rb +13 -13
  10. data/lib/resqued/daemon.rb +1 -0
  11. data/lib/resqued/exec_on_hup.rb +43 -0
  12. data/lib/resqued/listener.rb +51 -49
  13. data/lib/resqued/listener_pool.rb +97 -0
  14. data/lib/resqued/listener_proxy.rb +40 -31
  15. data/lib/resqued/listener_state.rb +8 -0
  16. data/lib/resqued/logging.rb +15 -8
  17. data/lib/resqued/master.rb +94 -98
  18. data/lib/resqued/master_state.rb +73 -0
  19. data/lib/resqued/procline_version.rb +2 -2
  20. data/lib/resqued/sleepy.rb +6 -4
  21. data/lib/resqued/test_case.rb +3 -3
  22. data/lib/resqued/version.rb +1 -1
  23. data/lib/resqued/worker.rb +18 -13
  24. data/spec/fixtures/test_case_after_fork_raises.rb +5 -2
  25. data/spec/fixtures/test_case_before_fork_raises.rb +4 -1
  26. data/spec/fixtures/test_case_environment.rb +3 -1
  27. data/spec/integration/master_inherits_child_spec.rb +85 -0
  28. data/spec/integration/restart_spec.rb +63 -0
  29. data/spec/resqued/backoff_spec.rb +27 -27
  30. data/spec/resqued/config/fork_event_spec.rb +8 -8
  31. data/spec/resqued/config/worker_spec.rb +63 -50
  32. data/spec/resqued/config_spec.rb +6 -6
  33. data/spec/resqued/sleepy_spec.rb +10 -11
  34. data/spec/resqued/test_case_spec.rb +7 -7
  35. data/spec/spec_helper.rb +5 -1
  36. data/spec/support/custom_matchers.rb +10 -2
  37. data/spec/support/extra-child-shim +6 -0
  38. data/spec/support/resqued_path.rb +11 -0
  39. metadata +44 -27
  40. data/exe/resqued-listener +0 -6
@@ -1,12 +1,12 @@
1
- require 'spec_helper'
2
- require 'resqued/config/after_fork'
3
- require 'resqued/config/before_fork'
4
- require 'resqued/runtime_info'
1
+ require "spec_helper"
2
+ require "resqued/config/after_fork"
3
+ require "resqued/config/before_fork"
4
+ require "resqued/runtime_info"
5
5
 
6
6
  describe do
7
7
  before { evaluator.apply(config) }
8
8
 
9
- context 'after_fork' do
9
+ context "after_fork" do
10
10
  # Run the after_fork block.
11
11
  #
12
12
  # after_fork do |resque_worker|
@@ -26,13 +26,13 @@ describe do
26
26
  end
27
27
  END_CONFIG
28
28
 
29
- let(:evaluator) { Resqued::Config::AfterFork.new(:worker => worker) }
29
+ let(:evaluator) { Resqued::Config::AfterFork.new(worker: worker) }
30
30
  let(:worker) { FakeResqueWorker.new }
31
31
 
32
32
  it { expect(worker.token).to eq(:called) }
33
33
  end
34
34
 
35
- context 'before_fork' do
35
+ context "before_fork" do
36
36
  # Run the before_fork block.
37
37
  #
38
38
  # before_fork do
@@ -56,7 +56,7 @@ describe do
56
56
  end
57
57
  END_CONFIG
58
58
 
59
- let(:evaluator) { $before_fork_called = false ; Resqued::Config::BeforeFork.new(:resqued => resqued) }
59
+ let(:evaluator) { $before_fork_called = false; Resqued::Config::BeforeFork.new(resqued: resqued) }
60
60
  let(:resqued) { Resqued::RuntimeInfo.new }
61
61
 
62
62
  it { expect($before_fork_called).to eq(true) }
@@ -1,5 +1,5 @@
1
- require 'spec_helper'
2
- require 'resqued/config/worker'
1
+ require "spec_helper"
2
+ require "resqued/config/worker"
3
3
 
4
4
  describe Resqued::Config::Worker do
5
5
  # Create a bunch of Resqued::Worker objects from
@@ -15,7 +15,7 @@ describe Resqued::Config::Worker do
15
15
  #
16
16
  # ignore calls to any other top-level method.
17
17
 
18
- let(:evaluator) { described_class.new(:worker_class => FakeWorker) }
18
+ let(:evaluator) { described_class.new(worker_class: FakeWorker) }
19
19
  let(:result) { evaluator.apply(config) }
20
20
  module FakeWorker
21
21
  def self.new(options)
@@ -23,7 +23,7 @@ describe Resqued::Config::Worker do
23
23
  end
24
24
  end
25
25
 
26
- context 'individual' do
26
+ context "individual" do
27
27
  let(:config) { <<-END_CONFIG }
28
28
  before_fork { }
29
29
  after_fork { }
@@ -35,25 +35,38 @@ describe Resqued::Config::Worker do
35
35
  after_fork { } # So that we don't rely on `workers`'s result falling through.
36
36
  END_CONFIG
37
37
  it { expect(result.size).to eq(6) }
38
- it { expect(result[0]).to eq(:queues => ['a']) }
39
- it { expect(result[1]).to eq(:queues => ['a']) }
40
- it { expect(result[2]).to eq(:queues => ['b']) }
41
- it { expect(result[3]).to eq(:queues => ['c', 'd']) }
42
- it { expect(result[4]).to eq(:queues => ['d', 'c'], :interval => 3) }
43
- it { expect(result[5]).to eq(:queues => ['*']) }
38
+ it { expect(result[0]).to eq(queues: ["a"]) }
39
+ it { expect(result[1]).to eq(queues: ["a"]) }
40
+ it { expect(result[2]).to eq(queues: ["b"]) }
41
+ it { expect(result[3]).to eq(queues: ["c", "d"]) }
42
+ it { expect(result[4]).to eq(queues: ["d", "c"], interval: 3) }
43
+ it { expect(result[5]).to eq(queues: ["*"]) }
44
44
  end
45
45
 
46
- context 'concise pool' do
46
+ context "concise pool" do
47
47
  let(:config) { <<-END_CONFIG }
48
48
  worker_pool 2, 'a', 'b', 'c', :interval => 1
49
49
  END_CONFIG
50
- it { expect(result).to eq([
51
- { :queues => ['a', 'b', 'c'], :interval => 1 },
52
- { :queues => ['a', 'b', 'c'], :interval => 1 },
53
- ]) }
50
+ it do
51
+ expect(result).to eq([
52
+ { queues: ["a", "b", "c"], interval: 1 },
53
+ { queues: ["a", "b", "c"], interval: 1 },
54
+ ])
55
+ end
56
+ end
57
+
58
+ context "small pool with percent" do
59
+ let(:config) { <<-END_CONFIG }
60
+ worker_pool 2
61
+ queue "a"
62
+ queue "b", :percent => 45
63
+ END_CONFIG
64
+ it { expect(result.size).to eq(2) }
65
+ it { expect(result[0]).to eq(queues: ["a", "b"]) }
66
+ it { expect(result[1]).to eq(queues: ["a"]) }
54
67
  end
55
68
 
56
- context 'pool (hash for concurrency)' do
69
+ context "pool (hash for concurrency)" do
57
70
  let(:config) { <<-END_CONFIG }
58
71
  before_fork { }
59
72
  after_fork { }
@@ -64,15 +77,15 @@ describe Resqued::Config::Worker do
64
77
  after_fork { } # So that we don't rely on `worker_pool`'s result falling through.
65
78
  END_CONFIG
66
79
  it { expect(result.size).to eq(20) }
67
- it { expect(result[0]).to eq(:queues => ['a', 'b1', 'b2', 'c'], :interval => 1) }
68
- it { expect(result[3]).to eq(:queues => ['a', 'b1', 'b2', 'c'], :interval => 1) }
69
- it { expect(result[4]).to eq(:queues => ['b1', 'b2', 'c'], :interval => 1) }
70
- it { expect(result[9]).to eq(:queues => ['b1', 'b2', 'c'], :interval => 1) }
71
- it { expect(result[10]).to eq(:queues => ['c'], :interval => 1) }
72
- it { expect(result[19]).to eq(:queues => ['c'], :interval => 1) }
80
+ it { expect(result[0]).to eq(queues: ["a", "b1", "b2", "c"], interval: 1) }
81
+ it { expect(result[3]).to eq(queues: ["a", "b1", "b2", "c"], interval: 1) }
82
+ it { expect(result[4]).to eq(queues: ["b1", "b2", "c"], interval: 1) }
83
+ it { expect(result[9]).to eq(queues: ["b1", "b2", "c"], interval: 1) }
84
+ it { expect(result[10]).to eq(queues: ["c"], interval: 1) }
85
+ it { expect(result[19]).to eq(queues: ["c"], interval: 1) }
73
86
  end
74
87
 
75
- context 'pool, with implied queue' do
88
+ context "pool, with implied queue" do
76
89
  let(:config) { <<-END_CONFIG }
77
90
  before_fork { }
78
91
  after_fork { }
@@ -80,11 +93,11 @@ describe Resqued::Config::Worker do
80
93
  after_fork { } # So that we don't rely on `worker_pool`'s result falling through.
81
94
  END_CONFIG
82
95
  it { expect(result.size).to eq(20) }
83
- it { expect(result[0]).to eq(:queues => ['*']) }
84
- it { expect(result[19]).to eq(:queues => ['*']) }
96
+ it { expect(result[0]).to eq(queues: ["*"]) }
97
+ it { expect(result[19]).to eq(queues: ["*"]) }
85
98
  end
86
99
 
87
- context 'pool, with fewer queues than workers' do
100
+ context "pool, with fewer queues than workers" do
88
101
  let(:config) { <<-END_CONFIG }
89
102
  before_fork { }
90
103
  after_fork { }
@@ -93,13 +106,13 @@ describe Resqued::Config::Worker do
93
106
  after_fork { } # So that we don't rely on `worker_pool`'s result falling through.
94
107
  END_CONFIG
95
108
  it { expect(result.size).to eq(20) }
96
- it { expect(result[0]).to eq(:queues => ['a']) }
97
- it { expect(result[9]).to eq(:queues => ['a']) }
98
- it { expect(result[10]).to eq(:queues => ['*']) }
99
- it { expect(result[19]).to eq(:queues => ['*']) }
109
+ it { expect(result[0]).to eq(queues: ["a"]) }
110
+ it { expect(result[9]).to eq(queues: ["a"]) }
111
+ it { expect(result[10]).to eq(queues: ["*"]) }
112
+ it { expect(result[19]).to eq(queues: ["*"]) }
100
113
  end
101
114
 
102
- context 'pool, with more queues than workers' do
115
+ context "pool, with more queues than workers" do
103
116
  let(:config) { <<-END_CONFIG }
104
117
  before_fork { }
105
118
  after_fork { }
@@ -110,48 +123,48 @@ describe Resqued::Config::Worker do
110
123
  it { expect(result.size).to eq(20) }
111
124
  end
112
125
 
113
- context 'pool, with shuffled queues' do
126
+ context "pool, with shuffled queues" do
114
127
  let(:config) { <<-END_CONFIG }
115
128
  worker_pool 20, :shuffle_queues => true
116
129
  queue 'a', :count => 10
117
130
  queue 'b', :count => 15
118
131
  END_CONFIG
119
132
  it { expect(result.size).to eq(20) }
120
- it { (0..9).each { |i| expect(result[i][:queues].sort).to eq(['a', 'b']) } }
121
- it { (10..14).each { |i| expect(result[i][:queues]).to eq(['b']) } }
122
- it { (15..19).each { |i| expect(result[i][:queues]).to eq(['*']) } }
133
+ it { (0..9).each { |i| expect(result[i][:queues].sort).to eq(["a", "b"]) } }
134
+ it { (10..14).each { |i| expect(result[i][:queues]).to eq(["b"]) } }
135
+ it { (15..19).each { |i| expect(result[i][:queues]).to eq(["*"]) } }
123
136
  it { result.each { |x| expect(x).not_to have_key(:shuffle_queues) } }
124
137
  it do
125
138
  shuffled_queues = result.take(10).map { |x| x[:queues] }
126
- expect(shuffled_queues.sort.uniq).to eq([ ['a','b'], ['b','a'] ]) # Some of the queues should be shuffled
139
+ expect(shuffled_queues.sort.uniq).to eq([["a", "b"], ["b", "a"]]) # Some of the queues should be shuffled
127
140
  end
128
141
  end
129
142
 
130
- context 'multiple worker configs' do
143
+ context "multiple worker configs" do
131
144
  let(:config) { <<-END_CONFIG }
132
145
  worker 'one'
133
146
  worker 'two'
134
147
  worker_pool 2
135
148
  END_CONFIG
136
149
  it { expect(result.size).to eq(4) }
137
- it { expect(result[0]).to eq(:queues => ['one']) }
138
- it { expect(result[1]).to eq(:queues => ['two']) }
139
- it { expect(result[2]).to eq(:queues => ['*']) }
140
- it { expect(result[3]).to eq(:queues => ['*']) }
150
+ it { expect(result[0]).to eq(queues: ["one"]) }
151
+ it { expect(result[1]).to eq(queues: ["two"]) }
152
+ it { expect(result[2]).to eq(queues: ["*"]) }
153
+ it { expect(result[3]).to eq(queues: ["*"]) }
141
154
  end
142
155
 
143
- context 'worker factory' do
156
+ context "worker factory" do
144
157
  let(:config) { <<-END_CONFIG }
145
158
  worker_factory { |queues| queues }
146
159
  worker 'a'
147
160
  END_CONFIG
148
161
 
149
162
  it { expect(result.size).to eq(1) }
150
- it { expect(result[0].reject { |k, _| k == :worker_factory}).to eq(:queues => ['a']) }
151
- it { expect(result[0][:worker_factory].call(result[0][:queues])).to eq(['a']) }
163
+ it { expect(result[0].reject { |k, _| k == :worker_factory }).to eq(queues: ["a"]) }
164
+ it { expect(result[0][:worker_factory].call(result[0][:queues])).to eq(["a"]) }
152
165
  end
153
166
 
154
- context 'worker factory with pool' do
167
+ context "worker factory with pool" do
155
168
  let(:config) { <<-END_CONFIG }
156
169
  worker_factory { |queues| queues }
157
170
  worker_pool 1
@@ -159,15 +172,15 @@ describe Resqued::Config::Worker do
159
172
  END_CONFIG
160
173
 
161
174
  it { expect(result.size).to eq(1) }
162
- it { expect(result[0].reject { |k, _| k == :worker_factory}).to eq(:queues => ['a']) }
163
- it { expect(result[0][:worker_factory].call(result[0][:queues])).to eq(['a']) }
175
+ it { expect(result[0].reject { |k, _| k == :worker_factory }).to eq(queues: ["a"]) }
176
+ it { expect(result[0][:worker_factory].call(result[0][:queues])).to eq(["a"]) }
164
177
  end
165
178
 
166
- context 'with default options' do
167
- let(:evaluator) { described_class.new(:worker_class => FakeWorker, :config => 'something') }
179
+ context "with default options" do
180
+ let(:evaluator) { described_class.new(worker_class: FakeWorker, config: "something") }
168
181
  let(:config) { <<-END_CONFIG }
169
182
  worker 'a', :interval => 1
170
183
  END_CONFIG
171
- it { expect(result[0]).to eq(:queues => ['a'], :interval => 1, :config => 'something') }
184
+ it { expect(result[0]).to eq(queues: ["a"], interval: 1, config: "something") }
172
185
  end
173
186
  end
@@ -1,9 +1,9 @@
1
- require 'spec_helper'
1
+ require "spec_helper"
2
2
 
3
- require 'fileutils'
4
- require 'tmpdir'
3
+ require "fileutils"
4
+ require "tmpdir"
5
5
 
6
- require 'resqued/config'
6
+ require "resqued/config"
7
7
 
8
8
  describe Resqued::Config do
9
9
  context do
@@ -19,8 +19,8 @@ describe Resqued::Config do
19
19
  end
20
20
  let(:config) { Resqued::Config.new([@config_file]) }
21
21
 
22
- it("can require_relative") { config.build_workers ; expect($test_val).to eq(:ok) }
23
- it("does not override require_relative in required files") { config.build_workers ; expect($other_test_val).to eq(:ok) }
22
+ it("can require_relative") { config.build_workers; expect($test_val).to eq(:ok) }
23
+ it("does not override require_relative in required files") { config.build_workers; expect($other_test_val).to eq(:ok) }
24
24
 
25
25
  def make_file(dir, relative_path, content)
26
26
  File.join(dir, relative_path).tap do |path|
@@ -1,34 +1,33 @@
1
- require 'spec_helper'
2
- require 'resqued/sleepy'
3
- require 'thread'
1
+ require "spec_helper"
2
+ require "resqued/sleepy"
4
3
 
5
4
  describe Resqued::Sleepy do
6
5
  include Resqued::Sleepy
7
6
 
8
- it 'sleeps' do
7
+ it "sleeps" do
9
8
  expect { yawn(0.2) }.to run_for(0.2)
10
9
  end
11
10
 
12
- it 'wakes on `awake`' do
13
- Thread.new { sleep 0.1 ; awake }
11
+ it "wakes on `awake`" do
12
+ Thread.new { sleep 0.1; awake }
14
13
  expect { yawn(2.0) }.to run_for(0.1)
15
14
  end
16
15
 
17
- it 'wakes on IO' do
16
+ it "wakes on IO" do
18
17
  rd, wr = IO.pipe
19
- Thread.new { sleep 0.1 ; wr.write('.') }
18
+ Thread.new { sleep 0.1; wr.write(".") }
20
19
  expect { yawn(2.0, rd) }.to run_for(0.1)
21
20
  end
22
21
 
23
- it 'does not sleep if duration is 0' do
22
+ it "does not sleep if duration is 0" do
24
23
  expect { yawn(-0.000001) }.to run_for(0.0)
25
24
  end
26
25
 
27
- it 'does not sleep if duration is negative' do
26
+ it "does not sleep if duration is negative" do
28
27
  expect { yawn(0) }.to run_for(0.0)
29
28
  end
30
29
 
31
- it 'sleeps if io is nil' do
30
+ it "sleeps if io is nil" do
32
31
  expect { yawn(0.5, nil) }.to run_for(0.5)
33
32
  end
34
33
  end
@@ -1,14 +1,14 @@
1
- require 'spec_helper'
2
- require 'resqued/test_case'
1
+ require "spec_helper"
2
+ require "resqued/test_case"
3
3
 
4
4
  describe Resqued::TestCase do
5
5
  let(:test_case) { Object.new.extend(the_module) }
6
6
 
7
- context 'LoadConfig' do
7
+ context "LoadConfig" do
8
8
  let(:the_module) { described_class::LoadConfig }
9
- it { expect { test_case.assert_resqued 'spec/fixtures/test_case_environment.rb', 'spec/fixtures/test_case_clean.rb' }.not_to raise_error }
10
- it { expect { test_case.assert_resqued 'spec/fixtures/test_case_environment.rb', 'spec/fixtures/test_case_before_fork_raises.rb' }.to raise_error }
11
- it { expect { test_case.assert_resqued 'spec/fixtures/test_case_environment.rb', 'spec/fixtures/test_case_after_fork_raises.rb' }.to raise_error }
12
- it { expect { test_case.assert_resqued 'spec/fixtures/test_case_environment.rb', 'spec/fixtures/test_case_no_workers.rb' }.not_to raise_error }
9
+ it { expect { test_case.assert_resqued "spec/fixtures/test_case_environment.rb", "spec/fixtures/test_case_clean.rb" }.not_to raise_error }
10
+ it { expect { test_case.assert_resqued "spec/fixtures/test_case_environment.rb", "spec/fixtures/test_case_before_fork_raises.rb" }.to raise_error(RuntimeError) }
11
+ it { expect { test_case.assert_resqued "spec/fixtures/test_case_environment.rb", "spec/fixtures/test_case_after_fork_raises.rb" }.to raise_error(RuntimeError) }
12
+ it { expect { test_case.assert_resqued "spec/fixtures/test_case_environment.rb", "spec/fixtures/test_case_no_workers.rb" }.not_to raise_error }
13
13
  end
14
14
  end
@@ -1 +1,5 @@
1
- require 'support/custom_matchers'
1
+ require "support/custom_matchers"
2
+ require "support/resqued_path"
3
+
4
+ SPEC_TEMPDIR = File.expand_path("../tmp/spec", File.dirname(__FILE__))
5
+ FileUtils.mkpath(SPEC_TEMPDIR)
@@ -8,7 +8,11 @@ module CustomMatchers
8
8
  class RunFor
9
9
  def initialize(expected_duration)
10
10
  @expected_duration = expected_duration
11
- @epsilon = 0.01
11
+ @epsilon = 0.01
12
+ end
13
+
14
+ def supports_block_expectations?
15
+ true
12
16
  end
13
17
 
14
18
  def within(epsilon)
@@ -24,9 +28,13 @@ module CustomMatchers
24
28
  @epsilon >= diff
25
29
  end
26
30
 
27
- def failure_message_for_should
31
+ def failure_message
28
32
  "Expected block to run for #{@expected_duration} +/-#{@epsilon} seconds, but it ran for #{@actual_duration} seconds."
29
33
  end
34
+
35
+ def failure_message_when_negated
36
+ "Expected block not to run for #{@expected_duration} +/-#{@epsilon} seconds, but it ran for #{@actual_duration} seconds."
37
+ end
30
38
  end
31
39
  end
32
40
 
@@ -0,0 +1,6 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ extra_child_pid = fork { sleep(100); exit! }
4
+ File.write(ENV["EXTRA_CHILD_PIDFILE"], extra_child_pid.to_s)
5
+
6
+ exec(*ARGV)
@@ -0,0 +1,11 @@
1
+ module ResquedPath
2
+ def resqued_path
3
+ return @resqued_path if @resqued_path
4
+
5
+ @resqued_path = File.expand_path("../../gemfiles/bin/resqued", File.dirname(__FILE__))
6
+ unless File.executable?(@resqued_path)
7
+ @resqued_path = File.expand_path("../../bin/resqued", File.dirname(__FILE__))
8
+ end
9
+ @resqued_path
10
+ end
11
+ end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: resqued
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.8.5
4
+ version: 0.10.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Matt Burke
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2019-01-15 00:00:00.000000000 Z
11
+ date: 2020-09-30 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: kgio
@@ -24,6 +24,20 @@ dependencies:
24
24
  - - "~>"
25
25
  - !ruby/object:Gem::Version
26
26
  version: '2.6'
27
+ - !ruby/object:Gem::Dependency
28
+ name: mono_logger
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - "~>"
32
+ - !ruby/object:Gem::Version
33
+ version: '1.0'
34
+ type: :runtime
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - "~>"
39
+ - !ruby/object:Gem::Version
40
+ version: '1.0'
27
41
  - !ruby/object:Gem::Dependency
28
42
  name: resque
29
43
  requirement: !ruby/object:Gem::Requirement
@@ -39,58 +53,51 @@ dependencies:
39
53
  - !ruby/object:Gem::Version
40
54
  version: 1.9.1
41
55
  - !ruby/object:Gem::Dependency
42
- name: mono_logger
56
+ name: rake
43
57
  requirement: !ruby/object:Gem::Requirement
44
58
  requirements:
45
- - - "~>"
59
+ - - '='
46
60
  - !ruby/object:Gem::Version
47
- version: '1.0'
48
- type: :runtime
61
+ version: 13.0.1
62
+ type: :development
49
63
  prerelease: false
50
64
  version_requirements: !ruby/object:Gem::Requirement
51
65
  requirements:
52
- - - "~>"
66
+ - - '='
53
67
  - !ruby/object:Gem::Version
54
- version: '1.0'
68
+ version: 13.0.1
55
69
  - !ruby/object:Gem::Dependency
56
70
  name: rspec
57
71
  requirement: !ruby/object:Gem::Requirement
58
72
  requirements:
59
- - - "~>"
60
- - !ruby/object:Gem::Version
61
- version: '2.0'
62
- - - "<"
73
+ - - '='
63
74
  - !ruby/object:Gem::Version
64
- version: '2.99'
75
+ version: 3.9.0
65
76
  type: :development
66
77
  prerelease: false
67
78
  version_requirements: !ruby/object:Gem::Requirement
68
79
  requirements:
69
- - - "~>"
70
- - !ruby/object:Gem::Version
71
- version: '2.0'
72
- - - "<"
80
+ - - '='
73
81
  - !ruby/object:Gem::Version
74
- version: '2.99'
82
+ version: 3.9.0
75
83
  - !ruby/object:Gem::Dependency
76
- name: rake
84
+ name: rubocop
77
85
  requirement: !ruby/object:Gem::Requirement
78
86
  requirements:
79
- - - "~>"
87
+ - - '='
80
88
  - !ruby/object:Gem::Version
81
- version: 0.9.0
89
+ version: 0.78.0
82
90
  type: :development
83
91
  prerelease: false
84
92
  version_requirements: !ruby/object:Gem::Requirement
85
93
  requirements:
86
- - - "~>"
94
+ - - '='
87
95
  - !ruby/object:Gem::Version
88
- version: 0.9.0
96
+ version: 0.78.0
89
97
  description: Daemon of resque workers
90
98
  email: spraints@gmail.com
91
99
  executables:
92
100
  - resqued
93
- - resqued-listener
94
101
  extensions: []
95
102
  extra_rdoc_files: []
96
103
  files:
@@ -101,7 +108,6 @@ files:
101
108
  - docs/processes.md
102
109
  - docs/signals.md
103
110
  - exe/resqued
104
- - exe/resqued-listener
105
111
  - lib/resqued.rb
106
112
  - lib/resqued/backoff.rb
107
113
  - lib/resqued/config.rb
@@ -111,10 +117,14 @@ files:
111
117
  - lib/resqued/config/dsl.rb
112
118
  - lib/resqued/config/worker.rb
113
119
  - lib/resqued/daemon.rb
120
+ - lib/resqued/exec_on_hup.rb
114
121
  - lib/resqued/listener.rb
122
+ - lib/resqued/listener_pool.rb
115
123
  - lib/resqued/listener_proxy.rb
124
+ - lib/resqued/listener_state.rb
116
125
  - lib/resqued/logging.rb
117
126
  - lib/resqued/master.rb
127
+ - lib/resqued/master_state.rb
118
128
  - lib/resqued/pidfile.rb
119
129
  - lib/resqued/procline_version.rb
120
130
  - lib/resqued/runtime_info.rb
@@ -127,6 +137,8 @@ files:
127
137
  - spec/fixtures/test_case_clean.rb
128
138
  - spec/fixtures/test_case_environment.rb
129
139
  - spec/fixtures/test_case_no_workers.rb
140
+ - spec/integration/master_inherits_child_spec.rb
141
+ - spec/integration/restart_spec.rb
130
142
  - spec/resqued/backoff_spec.rb
131
143
  - spec/resqued/config/fork_event_spec.rb
132
144
  - spec/resqued/config/worker_spec.rb
@@ -136,6 +148,8 @@ files:
136
148
  - spec/resqued/test_case_spec.rb
137
149
  - spec/spec_helper.rb
138
150
  - spec/support/custom_matchers.rb
151
+ - spec/support/extra-child-shim
152
+ - spec/support/resqued_path.rb
139
153
  homepage: https://github.com/spraints/resqued
140
154
  licenses:
141
155
  - MIT
@@ -155,14 +169,17 @@ required_rubygems_version: !ruby/object:Gem::Requirement
155
169
  - !ruby/object:Gem::Version
156
170
  version: '0'
157
171
  requirements: []
158
- rubyforge_project:
159
- rubygems_version: 2.5.2.3
172
+ rubygems_version: 3.0.3
160
173
  signing_key:
161
174
  specification_version: 4
162
175
  summary: Daemon of resque workers
163
176
  test_files:
164
177
  - spec/spec_helper.rb
178
+ - spec/integration/restart_spec.rb
179
+ - spec/integration/master_inherits_child_spec.rb
165
180
  - spec/support/custom_matchers.rb
181
+ - spec/support/resqued_path.rb
182
+ - spec/support/extra-child-shim
166
183
  - spec/fixtures/test_case_clean.rb
167
184
  - spec/fixtures/test_case_before_fork_raises.rb
168
185
  - spec/fixtures/test_case_environment.rb