trinidad_threaded_resque_extension 0.0.1 → 0.0.2
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.
- data/lib/trinidad_threaded_resque_extension/lifecycle_listener.rb +55 -0
- data/lib/trinidad_threaded_resque_extension/resque_disable_signal_handlers.rb +4 -0
- data/lib/trinidad_threaded_resque_extension/version.rb +1 -1
- data/lib/trinidad_threaded_resque_extension.rb +4 -35
- data/spec/resque_extension_spec.rb +18 -19
- metadata +2 -1
@@ -0,0 +1,55 @@
|
|
1
|
+
module Trinidad
|
2
|
+
module Extensions
|
3
|
+
module ThreadedResque
|
4
|
+
class LifecycleListener
|
5
|
+
include Trinidad::Tomcat::LifecycleListener
|
6
|
+
attr_accessor :options, :workers, :threads
|
7
|
+
|
8
|
+
def initialize(options = {})
|
9
|
+
@options = options
|
10
|
+
require @options[:setup] if @options[:setup]
|
11
|
+
end
|
12
|
+
|
13
|
+
def lifecycleEvent(event)
|
14
|
+
case event.type
|
15
|
+
when Trinidad::Tomcat::Lifecycle::BEFORE_START_EVENT
|
16
|
+
start_workers
|
17
|
+
when Trinidad::Tomcat::Lifecycle::BEFORE_STOP_EVENT
|
18
|
+
stop_workers
|
19
|
+
end
|
20
|
+
end
|
21
|
+
|
22
|
+
def start_workers
|
23
|
+
@workers = create_workers
|
24
|
+
@threads = create_threads
|
25
|
+
end
|
26
|
+
|
27
|
+
def stop_workers
|
28
|
+
@workers.each { |w| w.shutdown }
|
29
|
+
@threads.each { |t| t.join }
|
30
|
+
end
|
31
|
+
|
32
|
+
private
|
33
|
+
def create_workers
|
34
|
+
queues = @options[:queues] || { :all => 1 }
|
35
|
+
queues.map do |queue, count|
|
36
|
+
queue = '*' if queue.to_s == 'all'
|
37
|
+
count.to_i.times.map do
|
38
|
+
worker = Resque::Worker.new(queue)
|
39
|
+
worker.cant_fork = true # fork is a noop in jruby
|
40
|
+
worker
|
41
|
+
end
|
42
|
+
end.flatten
|
43
|
+
end
|
44
|
+
|
45
|
+
def create_threads
|
46
|
+
@workers.map do |w|
|
47
|
+
Thread.new do
|
48
|
+
w.work
|
49
|
+
end
|
50
|
+
end
|
51
|
+
end
|
52
|
+
end
|
53
|
+
end
|
54
|
+
end
|
55
|
+
end
|
@@ -1,45 +1,14 @@
|
|
1
1
|
require 'resque'
|
2
2
|
require 'trinidad'
|
3
3
|
require_relative "trinidad_threaded_resque_extension/version"
|
4
|
+
require_relative "trinidad_threaded_resque_extension/lifecycle_listener"
|
4
5
|
require_relative "trinidad_threaded_resque_extension/resque_disable_signal_handlers"
|
5
6
|
|
6
7
|
module Trinidad
|
7
8
|
module Extensions
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
def initialize(options = {})
|
12
|
-
@options = options
|
13
|
-
require @options[:setup] if @options[:setup]
|
14
|
-
end
|
15
|
-
|
16
|
-
def lifecycleEvent(event)
|
17
|
-
case event.type
|
18
|
-
when Trinidad::Tomcat::Lifecycle::BEFORE_START_EVENT
|
19
|
-
start_workers
|
20
|
-
when Trinidad::Tomcat::Lifecycle::BEFORE_STOP_EVENT
|
21
|
-
stop_workers
|
22
|
-
end
|
23
|
-
end
|
24
|
-
|
25
|
-
def start_workers
|
26
|
-
queues = @options[:queues] || { 'all' => 1 }
|
27
|
-
@workers = queues.map do |queue, count|
|
28
|
-
queue = '*' if queue == 'all'
|
29
|
-
count.to_i.times.map do
|
30
|
-
worker = Resque::Worker.new(queue)
|
31
|
-
worker.cant_fork = true # fork is a noop in jruby
|
32
|
-
Thread.new do
|
33
|
-
worker.work
|
34
|
-
end
|
35
|
-
worker
|
36
|
-
end
|
37
|
-
end.flatten
|
38
|
-
end
|
39
|
-
|
40
|
-
def stop_workers
|
41
|
-
@workers.each { |w| w.shutdown! }
|
42
|
-
end
|
9
|
+
class ThreadedResqueServerExtension < ServerExtension
|
10
|
+
def configure(tomcat)
|
11
|
+
tomcat.host.add_lifecycle_listener(ThreadedResque::LifecycleListener.new(@options))
|
43
12
|
end
|
44
13
|
end
|
45
14
|
end
|
@@ -1,35 +1,34 @@
|
|
1
1
|
require './lib/trinidad_threaded_resque_extension'
|
2
2
|
Resque.inline = true
|
3
3
|
|
4
|
-
describe Trinidad::Extensions::ThreadedResque::
|
5
|
-
subject { Trinidad::Extensions::ThreadedResque::ThreadedResqueLifecycleListener.new }
|
6
|
-
|
4
|
+
describe Trinidad::Extensions::ThreadedResque::LifecycleListener do
|
7
5
|
it 'starts by default one worker' do
|
8
|
-
|
9
|
-
workers.should have(1).things
|
6
|
+
subject.start_workers
|
7
|
+
subject.workers.should have(1).things
|
10
8
|
end
|
11
9
|
|
12
10
|
it 'can start many workers' do
|
13
|
-
subject.
|
14
|
-
|
15
|
-
workers.
|
16
|
-
workers[0].queues.should == ['q1']
|
17
|
-
workers[1].queues.should == ['q1']
|
11
|
+
subject.options = { :queues => { "q1" => 2 } }
|
12
|
+
subject.start_workers
|
13
|
+
subject.workers.map{ |w| w.queues }.flatten.count('q1').should == 2
|
18
14
|
end
|
19
15
|
|
20
16
|
it 'can start many workers for different queues' do
|
21
|
-
subject.
|
22
|
-
|
23
|
-
workers.
|
24
|
-
|
25
|
-
|
26
|
-
workers[2].queues.should == ['q2']
|
27
|
-
workers[3].queues.should == ['q2']
|
17
|
+
subject.options = { :queues => {"q1" => 2, "q2" => 2 } }
|
18
|
+
subject.start_workers
|
19
|
+
queues = subject.workers.map{ |w| w.queues }.flatten
|
20
|
+
queues.count('q1').should == 2
|
21
|
+
queues.count('q2').should == 2
|
28
22
|
end
|
29
23
|
|
30
24
|
it 'can shutdown workers' do
|
31
25
|
subject.start_workers
|
32
|
-
|
33
|
-
workers[0].shutdown?.should == true
|
26
|
+
subject.stop_workers
|
27
|
+
subject.workers[0].shutdown?.should == true
|
28
|
+
subject.threads[0].stop?.should == true
|
29
|
+
end
|
30
|
+
|
31
|
+
after do
|
32
|
+
subject.stop_workers
|
34
33
|
end
|
35
34
|
end
|
metadata
CHANGED
@@ -2,7 +2,7 @@
|
|
2
2
|
name: trinidad_threaded_resque_extension
|
3
3
|
version: !ruby/object:Gem::Version
|
4
4
|
prerelease:
|
5
|
-
version: 0.0.
|
5
|
+
version: 0.0.2
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
8
8
|
- Carl Hörberg
|
@@ -79,6 +79,7 @@ files:
|
|
79
79
|
- README.md
|
80
80
|
- Rakefile
|
81
81
|
- lib/trinidad_threaded_resque_extension.rb
|
82
|
+
- lib/trinidad_threaded_resque_extension/lifecycle_listener.rb
|
82
83
|
- lib/trinidad_threaded_resque_extension/resque_disable_signal_handlers.rb
|
83
84
|
- lib/trinidad_threaded_resque_extension/version.rb
|
84
85
|
- spec/resque_extension_spec.rb
|