backburner 0.4.6 → 1.0.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 +4 -4
- data/.DS_Store +0 -0
- data/.travis.yml +3 -3
- data/CHANGELOG.md +4 -0
- data/README.md +4 -4
- data/backburner.gemspec +2 -2
- data/examples/god.rb +2 -2
- data/lib/backburner/connection.rb +5 -4
- data/lib/backburner/queue.rb +6 -0
- data/lib/backburner/version.rb +1 -1
- data/lib/backburner/worker.rb +2 -2
- data/lib/backburner/workers/forking.rb +1 -1
- data/lib/backburner/workers/simple.rb +1 -1
- data/lib/backburner/workers/threads_on_fork.rb +3 -4
- data/test/connection_test.rb +7 -15
- data/test/helpers_test.rb +2 -2
- data/test/hooks_test.rb +16 -16
- data/test/job_test.rb +2 -2
- data/test/logger_test.rb +3 -3
- data/test/test_helper.rb +5 -1
- data/test/worker_test.rb +1 -1
- data/test/workers/forking_worker_test.rb +11 -7
- data/test/workers/simple_worker_test.rb +44 -38
- data/test/workers/threads_on_fork_worker_test.rb +13 -7
- metadata +7 -7
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 89f6987a5f81f904f8e2dd8d48bad8deea664a7e
|
4
|
+
data.tar.gz: d0a1cdf8c5cd0087f60d4c29da334f40ebc00a3f
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 19fc5c5d7086baf5ca15cc8cf93d0a429cd858ac30fbdfe86719322bd8704edacfb008d3568eae6f5c6c1a029e7831a0ef6052345cb934d7fea45cca90e60103
|
7
|
+
data.tar.gz: 3da11501d42cecb97fae3428cdf9d3f9e7403f0eab8801e581ff90685a79646a12f4ee7d95811efd5b4339995f97ff96bca7d13fe8ca8372b99b52047d28a2b2
|
data/.DS_Store
ADDED
Binary file
|
data/.travis.yml
CHANGED
@@ -2,7 +2,7 @@
|
|
2
2
|
rvm:
|
3
3
|
- 1.9.3
|
4
4
|
- 2.0.0
|
5
|
-
- rbx-
|
5
|
+
- rbx-2
|
6
6
|
before_install:
|
7
7
|
- curl -L https://github.com/kr/beanstalkd/archive/v1.9.tar.gz | tar xz -C /tmp
|
8
8
|
- cd /tmp/beanstalkd-1.9/
|
@@ -11,11 +11,11 @@ before_install:
|
|
11
11
|
- cd $TRAVIS_BUILD_DIR
|
12
12
|
matrix:
|
13
13
|
allow_failures:
|
14
|
-
- rvm: rbx-
|
14
|
+
- rvm: rbx-2
|
15
15
|
script:
|
16
16
|
- bundle install
|
17
17
|
- bundle exec rake test
|
18
18
|
gemfile: Gemfile
|
19
19
|
notifications:
|
20
20
|
recipients:
|
21
|
-
- nesquena@gmail.com
|
21
|
+
- nesquena@gmail.com
|
data/CHANGELOG.md
CHANGED
data/README.md
CHANGED
@@ -229,7 +229,7 @@ Backburner.work
|
|
229
229
|
This will process jobs in all queues but you can also restrict processing to specific queues:
|
230
230
|
|
231
231
|
```ruby
|
232
|
-
Backburner.work('newsletter-sender,push-notifier')
|
232
|
+
Backburner.work('newsletter-sender', 'push-notifier')
|
233
233
|
```
|
234
234
|
|
235
235
|
The Backburner worker also exists as a rake task:
|
@@ -241,7 +241,7 @@ require 'backburner/tasks'
|
|
241
241
|
so you can run:
|
242
242
|
|
243
243
|
```
|
244
|
-
$
|
244
|
+
$ QUEUE=newsletter-sender,push-notifier rake backburner:work
|
245
245
|
```
|
246
246
|
|
247
247
|
You can also run the backburner binary for a convenient worker:
|
@@ -362,7 +362,7 @@ Backburner.work('newsletter-sender', :worker => Backburner::Workers::ThreadsOnFo
|
|
362
362
|
or through associated rake tasks with:
|
363
363
|
|
364
364
|
```
|
365
|
-
$
|
365
|
+
$ QUEUE=newsletter-sender,push-message THREADS=2 GARBAGE=1000 rake backburner:threads_on_fork:work
|
366
366
|
```
|
367
367
|
|
368
368
|
For more information on the threads_on_fork worker, check out the
|
@@ -461,7 +461,7 @@ and then you can start the rake task with:
|
|
461
461
|
|
462
462
|
```bash
|
463
463
|
$ rake backburner:work
|
464
|
-
$
|
464
|
+
$ QUEUE=newsletter-sender,push-notifier rake backburner:work
|
465
465
|
```
|
466
466
|
|
467
467
|
The best way to deploy these rake tasks is using a monitoring library. We suggest [God](https://github.com/mojombo/god/)
|
data/backburner.gemspec
CHANGED
@@ -16,8 +16,8 @@ Gem::Specification.new do |s|
|
|
16
16
|
s.version = Backburner::VERSION
|
17
17
|
s.license = 'MIT'
|
18
18
|
|
19
|
-
s.add_runtime_dependency 'beaneater', '~> 0
|
20
|
-
s.add_runtime_dependency 'dante', '
|
19
|
+
s.add_runtime_dependency 'beaneater', '~> 1.0'
|
20
|
+
s.add_runtime_dependency 'dante', '> 0.1.5'
|
21
21
|
|
22
22
|
s.add_development_dependency 'rake'
|
23
23
|
s.add_development_dependency 'minitest', '3.2.0'
|
data/examples/god.rb
CHANGED
@@ -4,7 +4,7 @@ God.watch do |w|
|
|
4
4
|
w.env = { 'PADRINO_ENV' => 'production', 'QUEUES' => 'newsletter-sender,push-message' }
|
5
5
|
w.group = 'backburner-workers'
|
6
6
|
w.interval = 30.seconds
|
7
|
-
w.start = "bundle exec rake -f Rakefile backburner:
|
7
|
+
w.start = "bundle exec rake -f Rakefile backburner:work"
|
8
8
|
w.log = "/var/log/god/backburner-worker-1.log"
|
9
9
|
|
10
10
|
# restart if memory gets too high
|
@@ -43,4 +43,4 @@ God.watch do |w|
|
|
43
43
|
c.running = false
|
44
44
|
end
|
45
45
|
end
|
46
|
-
end
|
46
|
+
end
|
@@ -10,6 +10,7 @@ module Backburner
|
|
10
10
|
# `url` can be a string i.e 'localhost:3001' or an array of addresses.
|
11
11
|
def initialize(url)
|
12
12
|
@url = url
|
13
|
+
@beanstalk = nil
|
13
14
|
connect!
|
14
15
|
end
|
15
16
|
|
@@ -24,7 +25,7 @@ module Backburner
|
|
24
25
|
|
25
26
|
# Connects to a beanstalk queue
|
26
27
|
def connect!
|
27
|
-
@beanstalk ||= Beaneater
|
28
|
+
@beanstalk ||= Beaneater.new(beanstalk_addresses)
|
28
29
|
end
|
29
30
|
|
30
31
|
# Returns the beanstalk queue addresses
|
@@ -33,8 +34,8 @@ module Backburner
|
|
33
34
|
# beanstalk_addresses => ["localhost:11300"]
|
34
35
|
#
|
35
36
|
def beanstalk_addresses
|
36
|
-
|
37
|
-
|
37
|
+
uri = self.url.is_a?(Array) ? self.url.first : self.url
|
38
|
+
beanstalk_host_and_port(uri)
|
38
39
|
end
|
39
40
|
|
40
41
|
# Returns a host and port based on the uri_string given
|
@@ -48,4 +49,4 @@ module Backburner
|
|
48
49
|
"#{uri.host}:#{uri.port || 11300}"
|
49
50
|
end
|
50
51
|
end # Connection
|
51
|
-
end # Backburner
|
52
|
+
end # Backburner
|
data/lib/backburner/queue.rb
CHANGED
@@ -1,6 +1,12 @@
|
|
1
1
|
module Backburner
|
2
2
|
module Queue
|
3
3
|
def self.included(base)
|
4
|
+
base.instance_variable_set(:@queue_name, nil)
|
5
|
+
base.instance_variable_set(:@queue_priority, nil)
|
6
|
+
base.instance_variable_set(:@queue_respond_timeout, nil)
|
7
|
+
base.instance_variable_set(:@queue_jobs_limit, nil)
|
8
|
+
base.instance_variable_set(:@queue_garbage_limit, nil)
|
9
|
+
base.instance_variable_set(:@queue_retry_limit, nil)
|
4
10
|
base.extend ClassMethods
|
5
11
|
Backburner::Worker.known_queue_classes << base
|
6
12
|
end
|
data/lib/backburner/version.rb
CHANGED
data/lib/backburner/worker.rb
CHANGED
@@ -53,7 +53,7 @@ module Backburner
|
|
53
53
|
|
54
54
|
# Returns the worker connection.
|
55
55
|
# @example
|
56
|
-
# Backburner::Worker.connection # => <Beaneater::
|
56
|
+
# Backburner::Worker.connection # => <Beaneater::Connection>
|
57
57
|
def self.connection
|
58
58
|
@connection ||= Connection.new(Backburner.configuration.beanstalk_url)
|
59
59
|
end
|
@@ -159,7 +159,7 @@ module Backburner
|
|
159
159
|
def self.retryable_command(max_tries=8, &block)
|
160
160
|
begin
|
161
161
|
yield
|
162
|
-
rescue Beaneater::NotConnected
|
162
|
+
rescue Beaneater::NotConnected
|
163
163
|
retry_connection!(max_tries)
|
164
164
|
yield
|
165
165
|
end
|
@@ -9,7 +9,7 @@ module Backburner
|
|
9
9
|
# @worker.prepare
|
10
10
|
#
|
11
11
|
def prepare
|
12
|
-
self.tube_names.map! { |name| expand_tube_name(name) }
|
12
|
+
self.tube_names.map! { |name| expand_tube_name(name) }.uniq!
|
13
13
|
log_info "Working #{tube_names.size} queues: [ #{tube_names.join(', ')} ]"
|
14
14
|
self.connection.tubes.watch!(*self.tube_names)
|
15
15
|
end
|
@@ -9,7 +9,7 @@ module Backburner
|
|
9
9
|
# @worker.prepare
|
10
10
|
#
|
11
11
|
def prepare
|
12
|
-
self.tube_names.map! { |name| expand_tube_name(name) }
|
12
|
+
self.tube_names.map! { |name| expand_tube_name(name) }.uniq!
|
13
13
|
log_info "Working #{tube_names.size} queues: [ #{tube_names.join(', ')} ]"
|
14
14
|
self.connection.tubes.watch!(*self.tube_names)
|
15
15
|
end
|
@@ -1,7 +1,6 @@
|
|
1
1
|
module Backburner
|
2
2
|
module Workers
|
3
3
|
class ThreadsOnFork < Worker
|
4
|
-
|
5
4
|
class << self
|
6
5
|
attr_accessor :shutdown
|
7
6
|
attr_accessor :threads_number
|
@@ -18,7 +17,7 @@ module Backburner
|
|
18
17
|
begin
|
19
18
|
Process.kill(0, id)
|
20
19
|
tmp_ids << id
|
21
|
-
rescue Errno::ESRCH
|
20
|
+
rescue Errno::ESRCH
|
22
21
|
end
|
23
22
|
end
|
24
23
|
@child_pids = tmp_ids if @child_pids != tmp_ids
|
@@ -69,6 +68,7 @@ module Backburner
|
|
69
68
|
# Custom initializer just to set @tubes_data
|
70
69
|
def initialize(*args)
|
71
70
|
@tubes_data = {}
|
71
|
+
@connection = nil
|
72
72
|
super
|
73
73
|
self.process_tube_options
|
74
74
|
end
|
@@ -122,7 +122,7 @@ module Backburner
|
|
122
122
|
def prepare
|
123
123
|
self.tube_names ||= Backburner.default_queues.any? ? Backburner.default_queues : all_existing_queues
|
124
124
|
self.tube_names = Array(self.tube_names)
|
125
|
-
tube_names.map! { |name| expand_tube_name(name) }
|
125
|
+
tube_names.map! { |name| expand_tube_name(name) }.uniq!
|
126
126
|
tube_display_names = tube_names.map{|name| "#{name}:#{@tubes_data[name].values}"}
|
127
127
|
log_info "Working #{tube_names.size} queues: [ #{tube_display_names.join(', ')} ]"
|
128
128
|
end
|
@@ -253,7 +253,6 @@ module Backburner
|
|
253
253
|
def connection
|
254
254
|
@connection || super
|
255
255
|
end
|
256
|
-
|
257
256
|
end
|
258
257
|
end
|
259
258
|
end
|
data/test/connection_test.rb
CHANGED
@@ -11,23 +11,15 @@ describe "Backburner::Connection class" do
|
|
11
11
|
end
|
12
12
|
|
13
13
|
it "should setup beanstalk connection" do
|
14
|
-
assert_kind_of Beaneater
|
14
|
+
assert_kind_of Beaneater, @connection.beanstalk
|
15
15
|
end
|
16
16
|
end # initialize single connection
|
17
17
|
|
18
|
-
describe "for initialize with
|
19
|
-
it "should
|
20
|
-
@connection = Backburner::Connection.new("beanstalk://localhost
|
21
|
-
|
22
|
-
assert_equal
|
23
|
-
assert_equal ['localhost:11300','localhost:11300'], connections.map(&:address)
|
24
|
-
end
|
25
|
-
|
26
|
-
it "should support array of connections" do
|
27
|
-
@connection = Backburner::Connection.new(['beanstalk://127.0.0.1:11300','beanstalk://localhost'])
|
28
|
-
connections = @connection.beanstalk.connections
|
29
|
-
assert_equal 2, @connection.beanstalk.connections.size
|
30
|
-
assert_equal ['127.0.0.1:11300','localhost:11300'], connections.map(&:address)
|
18
|
+
describe "for initialize with url" do
|
19
|
+
it "should delegate the address url correctly" do
|
20
|
+
@connection = Backburner::Connection.new("beanstalk://localhost")
|
21
|
+
connection = @connection.beanstalk.connection
|
22
|
+
assert_equal 'localhost:11300', connection.address
|
31
23
|
end
|
32
24
|
end # initialize
|
33
25
|
|
@@ -45,7 +37,7 @@ describe "Backburner::Connection class" do
|
|
45
37
|
end
|
46
38
|
|
47
39
|
it "delegate methods to beanstalk connection" do
|
48
|
-
assert_equal "localhost", @connection.
|
40
|
+
assert_equal "localhost", @connection.connection.host
|
49
41
|
end
|
50
42
|
end # delegator
|
51
43
|
end # Connection
|
data/test/helpers_test.rb
CHANGED
@@ -40,7 +40,7 @@ describe "Backburner::Helpers module" do
|
|
40
40
|
describe "for exception_message method" do
|
41
41
|
it "prints out message about failure" do
|
42
42
|
output = exception_message(RuntimeError.new("test"))
|
43
|
-
assert_match
|
43
|
+
assert_match(/Exception RuntimeError/, output)
|
44
44
|
end
|
45
45
|
end # exception_message
|
46
46
|
|
@@ -161,4 +161,4 @@ describe "Backburner::Helpers module" do
|
|
161
161
|
assert_equal 300, resolve_respond_timeout(nil)
|
162
162
|
end
|
163
163
|
end # resolve_respond_timeout
|
164
|
-
end
|
164
|
+
end
|
data/test/hooks_test.rb
CHANGED
@@ -12,22 +12,22 @@ describe "Backburner::Hooks module" do
|
|
12
12
|
it "should support successful invocation" do
|
13
13
|
out = silenced { @res = @hooks.invoke_hook_events(HookedObjectSuccess, :before_enqueue, 5, 6) }
|
14
14
|
assert_equal [nil, nil], @res
|
15
|
-
assert_match
|
16
|
-
assert_match
|
15
|
+
assert_match(/!!before_enqueue_foo!! \[5\, 6\]/, out)
|
16
|
+
assert_match(/!!before_enqueue_bar!! \[5\, 6\]/, out)
|
17
17
|
end
|
18
18
|
|
19
19
|
it "should support fail case" do
|
20
20
|
out = silenced { @res = @hooks.invoke_hook_events(HookedObjectBeforeEnqueueFail, :before_enqueue, 5, 6) }
|
21
21
|
assert_equal false, @res
|
22
|
-
assert_match
|
22
|
+
assert_match(/!!before_enqueue_foo!! \[5\, 6\]/, out)
|
23
23
|
end
|
24
24
|
end # before_enqueue
|
25
25
|
|
26
26
|
describe "with after_enqueue" do
|
27
27
|
it "should support successful invocation" do
|
28
28
|
out = silenced { @hooks.invoke_hook_events(HookedObjectSuccess, :after_enqueue, 7, 8) }
|
29
|
-
assert_match
|
30
|
-
assert_match
|
29
|
+
assert_match(/!!after_enqueue_foo!! \[7\, 8\]/, out)
|
30
|
+
assert_match(/!!after_enqueue_bar!! \[7\, 8\]/, out)
|
31
31
|
end
|
32
32
|
|
33
33
|
it "should support fail case" do
|
@@ -40,20 +40,20 @@ describe "Backburner::Hooks module" do
|
|
40
40
|
describe "with before_perform" do
|
41
41
|
it "should support successful invocation" do
|
42
42
|
out = silenced { @hooks.invoke_hook_events(HookedObjectSuccess, :before_perform, 1, 2) }
|
43
|
-
assert_match
|
43
|
+
assert_match(/!!before_perform_foo!! \[1\, 2\]/, out)
|
44
44
|
end
|
45
45
|
|
46
46
|
it "should support fail case" do
|
47
47
|
out = silenced { @res = @hooks.invoke_hook_events(HookedObjectBeforePerformFail, :before_perform, 5, 6) }
|
48
48
|
assert_equal false, @res
|
49
|
-
assert_match
|
49
|
+
assert_match(/!!before_perform_foo!! \[5\, 6\]/, out)
|
50
50
|
end
|
51
51
|
end # before_perform
|
52
52
|
|
53
53
|
describe "with after_perform" do
|
54
54
|
it "should support successful invocation" do
|
55
55
|
out = silenced { @hooks.invoke_hook_events(HookedObjectSuccess, :after_perform, 3, 4) }
|
56
|
-
assert_match
|
56
|
+
assert_match(/!!after_perform_foo!! \[3\, 4\]/, out)
|
57
57
|
end
|
58
58
|
|
59
59
|
it "should support fail case" do
|
@@ -66,7 +66,7 @@ describe "Backburner::Hooks module" do
|
|
66
66
|
describe "with on_failure" do
|
67
67
|
it "should support successful invocation" do
|
68
68
|
out = silenced { @hooks.invoke_hook_events(HookedObjectSuccess, :on_failure, RuntimeError, 10) }
|
69
|
-
assert_match
|
69
|
+
assert_match(/!!on_failure_foo!! RuntimeError \[10\]/, out)
|
70
70
|
end
|
71
71
|
end # on_failure
|
72
72
|
end # invoke_hook_events
|
@@ -79,13 +79,13 @@ describe "Backburner::Hooks module" do
|
|
79
79
|
puts "!!FIRED!!"
|
80
80
|
}
|
81
81
|
end
|
82
|
-
assert_match
|
83
|
-
assert_match
|
84
|
-
assert_match
|
85
|
-
assert_match
|
86
|
-
assert_match
|
87
|
-
assert_match
|
82
|
+
assert_match(/BEGIN.*?bar.*BEGIN.*cat.*FIRED.*END.*cat.*END.*bar/m, out)
|
83
|
+
assert_match(/!!BEGIN around_perform_bar!! \[7\, 8\]/, out)
|
84
|
+
assert_match(/!!BEGIN around_perform_cat!! \[7\, 8\]/, out)
|
85
|
+
assert_match(/!!FIRED!!/, out)
|
86
|
+
assert_match(/!!END around_perform_cat!! \[7\, 8\]/, out)
|
87
|
+
assert_match(/!!END around_perform_bar!! \[7\, 8\]/, out)
|
88
88
|
end
|
89
89
|
end # successful
|
90
90
|
end # around_hook_events
|
91
|
-
end # Hooks
|
91
|
+
end # Hooks
|
data/test/job_test.rb
CHANGED
@@ -68,7 +68,7 @@ describe "Backburner::Job module" do
|
|
68
68
|
it "should process task" do
|
69
69
|
@job = Backburner::Job.new(@task)
|
70
70
|
out = silenced(1) { @job.process }
|
71
|
-
assert_match
|
71
|
+
assert_match(/Performed 56 in NestedDemo::TestJobC/, out)
|
72
72
|
end # process
|
73
73
|
end # valid
|
74
74
|
|
@@ -111,4 +111,4 @@ describe "Backburner::Job module" do
|
|
111
111
|
@job.bury
|
112
112
|
end # bury
|
113
113
|
end # simple delegation
|
114
|
-
end
|
114
|
+
end
|
data/test/logger_test.rb
CHANGED
@@ -17,7 +17,7 @@ describe "Backburner::Logger module" do
|
|
17
17
|
it "can be configured to log to logger" do
|
18
18
|
Backburner.configure { |config| config.logger = @logger }
|
19
19
|
log_info("foo")
|
20
|
-
assert_match
|
20
|
+
assert_match(/I,.*?foo/, @strio.string)
|
21
21
|
end
|
22
22
|
|
23
23
|
after do
|
@@ -34,11 +34,11 @@ describe "Backburner::Logger module" do
|
|
34
34
|
it "can be configured to log to logger" do
|
35
35
|
Backburner.configure { |config| config.logger = @logger }
|
36
36
|
log_error("bar")
|
37
|
-
assert_match
|
37
|
+
assert_match(/E,.*?bar/, @strio.string)
|
38
38
|
end
|
39
39
|
|
40
40
|
after do
|
41
41
|
Backburner.configure { |config| config.logger = nil }
|
42
42
|
end
|
43
43
|
end # log_error
|
44
|
-
end
|
44
|
+
end
|
data/test/test_helper.rb
CHANGED
@@ -1,7 +1,11 @@
|
|
1
1
|
require 'rubygems'
|
2
2
|
require 'tempfile'
|
3
3
|
require 'minitest/autorun'
|
4
|
-
|
4
|
+
begin
|
5
|
+
require 'mocha/setup'
|
6
|
+
rescue LoadError
|
7
|
+
require 'mocha'
|
8
|
+
end
|
5
9
|
$:.unshift File.expand_path("../../lib")
|
6
10
|
require 'backburner'
|
7
11
|
require File.expand_path('../helpers/templogger', __FILE__)
|
data/test/worker_test.rb
CHANGED
@@ -77,7 +77,7 @@ describe "Backburner::Worker module" do
|
|
77
77
|
describe "for connection class method" do
|
78
78
|
it "should return the beanstalk connection" do
|
79
79
|
assert_equal "beanstalk://localhost", Backburner::Worker.connection.url
|
80
|
-
assert_kind_of Beaneater
|
80
|
+
assert_kind_of Beaneater, Backburner::Worker.connection.beanstalk
|
81
81
|
end
|
82
82
|
end # connection
|
83
83
|
|
@@ -9,12 +9,18 @@ describe "Backburner::Workers::Forking module" do
|
|
9
9
|
end
|
10
10
|
|
11
11
|
describe "for prepare method" do
|
12
|
+
it "should make tube names array always unique to avoid duplication" do
|
13
|
+
worker = @worker_class.new(["foo", "demo.test.foo"])
|
14
|
+
worker.prepare
|
15
|
+
assert_equal ["demo.test.foo"], worker.tube_names
|
16
|
+
end
|
17
|
+
|
12
18
|
it "should watch specified tubes" do
|
13
19
|
worker = @worker_class.new(["foo", "bar"])
|
14
20
|
out = capture_stdout { worker.prepare }
|
15
21
|
assert_equal ["demo.test.foo", "demo.test.bar"], worker.tube_names
|
16
22
|
assert_same_elements ["demo.test.foo", "demo.test.bar"], @worker_class.connection.tubes.watched.map(&:name)
|
17
|
-
assert_match
|
23
|
+
assert_match(/demo\.test\.foo/, out)
|
18
24
|
end # multiple
|
19
25
|
|
20
26
|
it "should watch single tube" do
|
@@ -22,7 +28,7 @@ describe "Backburner::Workers::Forking module" do
|
|
22
28
|
out = capture_stdout { worker.prepare }
|
23
29
|
assert_equal ["demo.test.foo"], worker.tube_names
|
24
30
|
assert_same_elements ["demo.test.foo"], @worker_class.connection.tubes.watched.map(&:name)
|
25
|
-
assert_match
|
31
|
+
assert_match(/demo\.test\.foo/, out)
|
26
32
|
end # single
|
27
33
|
|
28
34
|
it "should respect default_queues settings" do
|
@@ -31,7 +37,7 @@ describe "Backburner::Workers::Forking module" do
|
|
31
37
|
out = capture_stdout { worker.prepare }
|
32
38
|
assert_equal ["demo.test.foo", "demo.test.bar"], worker.tube_names
|
33
39
|
assert_same_elements ["demo.test.foo", "demo.test.bar"], @worker_class.connection.tubes.watched.map(&:name)
|
34
|
-
assert_match
|
40
|
+
assert_match(/demo\.test\.foo/, out)
|
35
41
|
end
|
36
42
|
|
37
43
|
it "should assign based on all tubes" do
|
@@ -40,7 +46,7 @@ describe "Backburner::Workers::Forking module" do
|
|
40
46
|
out = capture_stdout { worker.prepare }
|
41
47
|
assert_equal ["demo.test.bar"], worker.tube_names
|
42
48
|
assert_same_elements ["demo.test.bar"], @worker_class.connection.tubes.watched.map(&:name)
|
43
|
-
assert_match
|
49
|
+
assert_match(/demo\.test\.bar/, out)
|
44
50
|
end # all assign
|
45
51
|
|
46
52
|
it "should properly retrieve all tubes" do
|
@@ -48,7 +54,7 @@ describe "Backburner::Workers::Forking module" do
|
|
48
54
|
out = capture_stdout { worker.prepare }
|
49
55
|
assert_contains worker.tube_names, "demo.test.backburner-jobs"
|
50
56
|
assert_contains @worker_class.connection.tubes.watched.map(&:name), "demo.test.backburner-jobs"
|
51
|
-
assert_match
|
57
|
+
assert_match(/demo\.test\.test-job/, out)
|
52
58
|
end # all read
|
53
59
|
end # prepare
|
54
60
|
|
@@ -174,6 +180,4 @@ describe "Backburner::Workers::Forking module" do
|
|
174
180
|
end # retrying, succeeds
|
175
181
|
|
176
182
|
end # practical tests
|
177
|
-
|
178
|
-
|
179
183
|
end
|
@@ -9,12 +9,18 @@ describe "Backburner::Workers::Basic module" do
|
|
9
9
|
end
|
10
10
|
|
11
11
|
describe "for prepare method" do
|
12
|
+
it "should make tube names array always unique to avoid duplication" do
|
13
|
+
worker = @worker_class.new(["foo", "demo.test.foo"])
|
14
|
+
worker.prepare
|
15
|
+
assert_equal ["demo.test.foo"], worker.tube_names
|
16
|
+
end
|
17
|
+
|
12
18
|
it "should watch specified tubes" do
|
13
19
|
worker = @worker_class.new(["foo", "bar"])
|
14
20
|
out = capture_stdout { worker.prepare }
|
15
21
|
assert_equal ["demo.test.foo", "demo.test.bar"], worker.tube_names
|
16
22
|
assert_same_elements ["demo.test.foo", "demo.test.bar"], @worker_class.connection.tubes.watched.map(&:name)
|
17
|
-
assert_match
|
23
|
+
assert_match(/demo\.test\.foo/, out)
|
18
24
|
end # multiple
|
19
25
|
|
20
26
|
it "should watch single tube" do
|
@@ -22,7 +28,7 @@ describe "Backburner::Workers::Basic module" do
|
|
22
28
|
out = capture_stdout { worker.prepare }
|
23
29
|
assert_equal ["demo.test.foo"], worker.tube_names
|
24
30
|
assert_same_elements ["demo.test.foo"], @worker_class.connection.tubes.watched.map(&:name)
|
25
|
-
assert_match
|
31
|
+
assert_match(/demo\.test\.foo/, out)
|
26
32
|
end # single
|
27
33
|
|
28
34
|
it "should respect default_queues settings" do
|
@@ -31,7 +37,7 @@ describe "Backburner::Workers::Basic module" do
|
|
31
37
|
out = capture_stdout { worker.prepare }
|
32
38
|
assert_equal ["demo.test.foo", "demo.test.bar"], worker.tube_names
|
33
39
|
assert_same_elements ["demo.test.foo", "demo.test.bar"], @worker_class.connection.tubes.watched.map(&:name)
|
34
|
-
assert_match
|
40
|
+
assert_match(/demo\.test\.foo/, out)
|
35
41
|
end
|
36
42
|
|
37
43
|
it "should assign based on all tubes" do
|
@@ -40,7 +46,7 @@ describe "Backburner::Workers::Basic module" do
|
|
40
46
|
out = capture_stdout { worker.prepare }
|
41
47
|
assert_equal ["demo.test.bar"], worker.tube_names
|
42
48
|
assert_same_elements ["demo.test.bar"], @worker_class.connection.tubes.watched.map(&:name)
|
43
|
-
assert_match
|
49
|
+
assert_match(/demo\.test\.bar/, out)
|
44
50
|
end # all assign
|
45
51
|
|
46
52
|
it "should properly retrieve all tubes" do
|
@@ -48,7 +54,7 @@ describe "Backburner::Workers::Basic module" do
|
|
48
54
|
out = capture_stdout { worker.prepare }
|
49
55
|
assert_contains worker.tube_names, "demo.test.backburner-jobs"
|
50
56
|
assert_contains @worker_class.connection.tubes.watched.map(&:name), "demo.test.backburner-jobs"
|
51
|
-
assert_match
|
57
|
+
assert_match(/demo\.test\.test-job/, out)
|
52
58
|
end # all read
|
53
59
|
end # prepare
|
54
60
|
|
@@ -139,9 +145,9 @@ describe "Backburner::Workers::Basic module" do
|
|
139
145
|
worker.work_one_job
|
140
146
|
end
|
141
147
|
end
|
142
|
-
assert_match
|
143
|
-
assert_match
|
144
|
-
assert_match
|
148
|
+
assert_match(/attempt 1 of 2, retrying/, out.first)
|
149
|
+
assert_match(/Finished TestRetryJob/m, out.last)
|
150
|
+
assert_match(/attempt 2 of 2, burying/m, out.last)
|
145
151
|
assert_equal 2, $worker_test_count
|
146
152
|
assert_equal false, $worker_success
|
147
153
|
end # retry, bury
|
@@ -158,9 +164,9 @@ describe "Backburner::Workers::Basic module" do
|
|
158
164
|
worker.work_one_job
|
159
165
|
end
|
160
166
|
end
|
161
|
-
assert_match
|
162
|
-
assert_match
|
163
|
-
assert_match
|
167
|
+
assert_match(/attempt 1 of 3, retrying/, out.first)
|
168
|
+
assert_match(/attempt 2 of 3, retrying/, out[1])
|
169
|
+
assert_match(/Completed TestRetryJob/m, out.last)
|
164
170
|
refute_match(/failed/, out.last)
|
165
171
|
assert_equal 3, $worker_test_count
|
166
172
|
assert_equal true, $worker_success
|
@@ -175,14 +181,14 @@ describe "Backburner::Workers::Basic module" do
|
|
175
181
|
worker.prepare
|
176
182
|
worker.work_one_job
|
177
183
|
end
|
178
|
-
assert_match
|
179
|
-
assert_match
|
180
|
-
assert_match
|
181
|
-
assert_match
|
182
|
-
assert_match
|
183
|
-
assert_match
|
184
|
-
assert_match
|
185
|
-
assert_match
|
184
|
+
assert_match(/before_enqueue.*after_enqueue.*Working 1 queues/m, out)
|
185
|
+
assert_match(/!!before_enqueue_bar!! \[nil, :foo, 5\]/, out)
|
186
|
+
assert_match(/!!after_enqueue_bar!! \[nil, :foo, 5\]/, out)
|
187
|
+
assert_match(/!!before_perform_foo!! \[nil, "foo", 5\]/, out)
|
188
|
+
assert_match(/!!BEGIN around_perform_bar!! \[nil, "foo", 5\]/, out)
|
189
|
+
assert_match(/!!BEGIN around_perform_cat!! \[nil, "foo", 5\]/, out)
|
190
|
+
assert_match(/!!on_failure_foo!!.*HookFailError/, out)
|
191
|
+
assert_match(/attempt 1 of 1, burying/, out)
|
186
192
|
end # event hooks, no retry
|
187
193
|
|
188
194
|
it "should support event hooks with retry" do
|
@@ -197,26 +203,26 @@ describe "Backburner::Workers::Basic module" do
|
|
197
203
|
worker.work_one_job
|
198
204
|
end
|
199
205
|
end
|
200
|
-
assert_match
|
201
|
-
assert_match
|
202
|
-
assert_match
|
203
|
-
assert_match
|
204
|
-
assert_match
|
205
|
-
assert_match
|
206
|
-
assert_match
|
207
|
-
assert_match
|
208
|
-
assert_match
|
209
|
-
assert_match
|
210
|
-
assert_match
|
211
|
-
assert_match
|
212
|
-
assert_match
|
213
|
-
assert_match
|
206
|
+
assert_match(/before_enqueue.*after_enqueue.*Working 1 queues/m, out)
|
207
|
+
assert_match(/!!before_enqueue_bar!! \[nil, :foo, 5\]/, out)
|
208
|
+
assert_match(/!!after_enqueue_bar!! \[nil, :foo, 5\]/, out)
|
209
|
+
assert_match(/!!before_perform_foo!! \[nil, "foo", 5\]/, out)
|
210
|
+
assert_match(/!!BEGIN around_perform_bar!! \[nil, "foo", 5\]/, out)
|
211
|
+
assert_match(/!!BEGIN around_perform_cat!! \[nil, "foo", 5\]/, out)
|
212
|
+
assert_match(/!!on_failure_foo!!.*HookFailError/, out)
|
213
|
+
assert_match(/!!on_failure_foo!!.*retrying.*around_perform_bar.*around_perform_cat/m, out)
|
214
|
+
assert_match(/attempt 1 of 2, retrying/, out)
|
215
|
+
assert_match(/!!before_perform_foo!! \[nil, "foo", 5\]/, out)
|
216
|
+
assert_match(/!!END around_perform_bar!! \[nil, "foo", 5\]/, out)
|
217
|
+
assert_match(/!!END around_perform_cat!! \[nil, "foo", 5\]/, out)
|
218
|
+
assert_match(/!!after_perform_foo!! \[nil, "foo", 5\]/, out)
|
219
|
+
assert_match(/Finished HookedObjectSuccess/, out)
|
214
220
|
end # event hooks, with retry
|
215
221
|
|
216
222
|
it "should support event hooks with stopping enqueue" do
|
217
223
|
$hooked_fail_count = 0
|
218
224
|
clear_jobs!('foo.bar.events.retry2')
|
219
|
-
|
225
|
+
silenced(2) do
|
220
226
|
HookedObjectBeforeEnqueueFail.async(:queue => 'foo.bar.events.retry2').foo(5)
|
221
227
|
end
|
222
228
|
expanded_tube = [Backburner.configuration.tube_namespace, 'foo.bar.events.retry2'].join(".")
|
@@ -226,15 +232,15 @@ describe "Backburner::Workers::Basic module" do
|
|
226
232
|
it "should support event hooks with stopping perform" do
|
227
233
|
$hooked_fail_count = 0
|
228
234
|
clear_jobs!('foo.bar.events.retry3')
|
229
|
-
|
235
|
+
[Backburner.configuration.tube_namespace, 'foo.bar.events.retry3'].join(".")
|
230
236
|
out = silenced(2) do
|
231
237
|
HookedObjectBeforePerformFail.async(:queue => 'foo.bar.events.retry3').foo(10)
|
232
238
|
worker = @worker_class.new('foo.bar.events.retry3')
|
233
239
|
worker.prepare
|
234
240
|
worker.work_one_job
|
235
241
|
end
|
236
|
-
assert_match
|
237
|
-
assert_match
|
242
|
+
assert_match(/!!before_perform_foo!! \[nil, "foo", 10\]/, out)
|
243
|
+
assert_match(/before_perform_foo.*Completed/m, out)
|
238
244
|
refute_match(/Fail ran!!/, out)
|
239
245
|
refute_match(/HookFailError/, out)
|
240
246
|
end # stopping perform
|
@@ -243,4 +249,4 @@ describe "Backburner::Workers::Basic module" do
|
|
243
249
|
Backburner.configure { |config| config.max_job_retries = 0; config.retry_delay = 5 }
|
244
250
|
end
|
245
251
|
end # work_one_job
|
246
|
-
end # Worker
|
252
|
+
end # Worker
|
@@ -68,18 +68,24 @@ describe "Backburner::Workers::ThreadsOnFork module" do
|
|
68
68
|
Backburner.configure { |config| config.logger = false }
|
69
69
|
end
|
70
70
|
|
71
|
+
it "should make tube names array always unique to avoid duplication" do
|
72
|
+
worker = @worker_class.new(["foo", "demo.test.foo"])
|
73
|
+
worker.prepare
|
74
|
+
assert_equal ["demo.test.foo"], worker.tube_names
|
75
|
+
end
|
76
|
+
|
71
77
|
it "should watch specified tubes" do
|
72
78
|
worker = @worker_class.new(["foo", "bar"])
|
73
79
|
out = capture_stdout { worker.prepare }
|
74
80
|
assert_equal ["demo.test.foo", "demo.test.bar"], worker.tube_names
|
75
|
-
assert_match
|
81
|
+
assert_match(/demo\.test\.foo/, out)
|
76
82
|
end # multiple
|
77
83
|
|
78
84
|
it "should watch single tube" do
|
79
85
|
worker = @worker_class.new("foo")
|
80
86
|
out = capture_stdout { worker.prepare }
|
81
87
|
assert_equal ["demo.test.foo"], worker.tube_names
|
82
|
-
assert_match
|
88
|
+
assert_match(/demo\.test\.foo/, out)
|
83
89
|
end # single
|
84
90
|
|
85
91
|
it "should respect default_queues settings" do
|
@@ -87,7 +93,7 @@ describe "Backburner::Workers::ThreadsOnFork module" do
|
|
87
93
|
worker = @worker_class.new
|
88
94
|
out = capture_stdout { worker.prepare }
|
89
95
|
assert_equal ["demo.test.foo", "demo.test.bar"], worker.tube_names
|
90
|
-
assert_match
|
96
|
+
assert_match(/demo\.test\.foo/, out)
|
91
97
|
end
|
92
98
|
|
93
99
|
it "should assign based on all tubes" do
|
@@ -95,14 +101,14 @@ describe "Backburner::Workers::ThreadsOnFork module" do
|
|
95
101
|
worker = @worker_class.new
|
96
102
|
out = capture_stdout { worker.prepare }
|
97
103
|
assert_equal ["demo.test.bar"], worker.tube_names
|
98
|
-
assert_match
|
104
|
+
assert_match(/demo\.test\.bar/, out)
|
99
105
|
end # all assign
|
100
106
|
|
101
107
|
it "should properly retrieve all tubes" do
|
102
108
|
worker = @worker_class.new
|
103
109
|
out = capture_stdout { worker.prepare }
|
104
110
|
assert_contains worker.tube_names, "demo.test.test-job-fork"
|
105
|
-
assert_match
|
111
|
+
assert_match(/demo\.test\.test-job-fork/, out)
|
106
112
|
end # all read
|
107
113
|
end # prepare
|
108
114
|
|
@@ -136,7 +142,7 @@ describe "Backburner::Workers::ThreadsOnFork module" do
|
|
136
142
|
def worker.create_thread(*args, &block); block.call(*args) end
|
137
143
|
|
138
144
|
out = silenced(2) { worker.start(false) }
|
139
|
-
refute_match
|
145
|
+
refute_match(/Catastrophic failure/, out)
|
140
146
|
end
|
141
147
|
|
142
148
|
it "fork_and_watch thread should log an error if exitstatus is != 99" do
|
@@ -153,7 +159,7 @@ describe "Backburner::Workers::ThreadsOnFork module" do
|
|
153
159
|
end
|
154
160
|
def worker.create_thread(*args, &block); block.call(*args) end
|
155
161
|
out = silenced(2) { worker.start(false) }
|
156
|
-
assert_match
|
162
|
+
assert_match(/Catastrophic failure: tube demo\.test\.foo exited with code 0\./, out)
|
157
163
|
end
|
158
164
|
|
159
165
|
describe "fork_inner" do
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: backburner
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 1.0.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Nathan Esquenazi
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2015-04-26 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: beaneater
|
@@ -16,26 +16,26 @@ dependencies:
|
|
16
16
|
requirements:
|
17
17
|
- - ~>
|
18
18
|
- !ruby/object:Gem::Version
|
19
|
-
version: 0
|
19
|
+
version: '1.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
|
-
version: 0
|
26
|
+
version: '1.0'
|
27
27
|
- !ruby/object:Gem::Dependency
|
28
28
|
name: dante
|
29
29
|
requirement: !ruby/object:Gem::Requirement
|
30
30
|
requirements:
|
31
|
-
- -
|
31
|
+
- - '>'
|
32
32
|
- !ruby/object:Gem::Version
|
33
33
|
version: 0.1.5
|
34
34
|
type: :runtime
|
35
35
|
prerelease: false
|
36
36
|
version_requirements: !ruby/object:Gem::Requirement
|
37
37
|
requirements:
|
38
|
-
- -
|
38
|
+
- - '>'
|
39
39
|
- !ruby/object:Gem::Version
|
40
40
|
version: 0.1.5
|
41
41
|
- !ruby/object:Gem::Dependency
|
@@ -88,6 +88,7 @@ executables:
|
|
88
88
|
extensions: []
|
89
89
|
extra_rdoc_files: []
|
90
90
|
files:
|
91
|
+
- .DS_Store
|
91
92
|
- .gitignore
|
92
93
|
- .travis.yml
|
93
94
|
- CHANGELOG.md
|
@@ -190,4 +191,3 @@ test_files:
|
|
190
191
|
- test/workers/forking_worker_test.rb
|
191
192
|
- test/workers/simple_worker_test.rb
|
192
193
|
- test/workers/threads_on_fork_worker_test.rb
|
193
|
-
has_rdoc:
|