stalking 0.0.2 → 0.0.4
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/README.md +5 -0
- data/lib/stalking/consumer.rb +38 -14
- data/lib/stalking/version.rb +1 -1
- data/test/stalking/consumer_test.rb +16 -1
- metadata +2 -2
data/README.md
CHANGED
@@ -177,6 +177,11 @@ Stalking::Consumer.new :logger => ...
|
|
177
177
|
You can hand out any kind of logging object, which responds to an `error`
|
178
178
|
method and takes a string error message.
|
179
179
|
|
180
|
+
# Graceful termination
|
181
|
+
|
182
|
+
To stop your workers gracefully, send a USR1 signal to them. The worker will
|
183
|
+
finish its current job and terminate afterwards.
|
184
|
+
|
180
185
|
## Contributing
|
181
186
|
|
182
187
|
1. Fork it
|
data/lib/stalking/consumer.rb
CHANGED
@@ -30,28 +30,30 @@ module Stalking
|
|
30
30
|
private
|
31
31
|
|
32
32
|
def work
|
33
|
-
|
33
|
+
looping do
|
34
34
|
job = connection.reserve
|
35
35
|
|
36
|
-
|
36
|
+
lock do
|
37
|
+
name, args = JSON.parse(job.body)
|
37
38
|
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
39
|
+
if handler = @handlers.job_handlers[name]
|
40
|
+
begin
|
41
|
+
Timeout::timeout(job.ttr - 1) do
|
42
|
+
handle @handlers.before_handlers, name, args
|
42
43
|
|
43
|
-
|
44
|
+
handler.call args
|
44
45
|
|
45
|
-
|
46
|
+
handle @handlers.after_handlers, name, args
|
47
|
+
end
|
48
|
+
rescue Beanstalk::NotConnected => e
|
49
|
+
raise e # Re-raise
|
50
|
+
rescue Timeout::Error, StandardError => e
|
51
|
+
handle_error e, name, args
|
46
52
|
end
|
47
|
-
rescue Beanstalk::NotConnected => e
|
48
|
-
raise e # Re-raise
|
49
|
-
rescue Timeout::Error, StandardError => e
|
50
|
-
handle_error e, name, args
|
51
53
|
end
|
52
|
-
end
|
53
54
|
|
54
|
-
|
55
|
+
job.delete
|
56
|
+
end
|
55
57
|
end
|
56
58
|
rescue Beanstalk::NotConnected => e
|
57
59
|
log_error e
|
@@ -63,6 +65,28 @@ module Stalking
|
|
63
65
|
retry
|
64
66
|
end
|
65
67
|
|
68
|
+
def looping
|
69
|
+
continue = true
|
70
|
+
|
71
|
+
trap "USR1" do
|
72
|
+
exit unless @locked
|
73
|
+
|
74
|
+
continue = false
|
75
|
+
end
|
76
|
+
|
77
|
+
while continue
|
78
|
+
yield
|
79
|
+
end
|
80
|
+
end
|
81
|
+
|
82
|
+
def lock
|
83
|
+
@locked = true
|
84
|
+
|
85
|
+
yield
|
86
|
+
ensure
|
87
|
+
@locked = false
|
88
|
+
end
|
89
|
+
|
66
90
|
def connect
|
67
91
|
@connection ||= Beanstalk::Pool.new(@servers)
|
68
92
|
|
data/lib/stalking/version.rb
CHANGED
@@ -3,6 +3,7 @@ $:.unshift File.expand_path("../../lib", __FILE__)
|
|
3
3
|
|
4
4
|
require "stalking"
|
5
5
|
require "test/unit"
|
6
|
+
require "timeout"
|
6
7
|
|
7
8
|
require File.expand_path("../beanstalk", __FILE__)
|
8
9
|
require File.expand_path("../test_logger", __FILE__)
|
@@ -179,7 +180,7 @@ class Stalking::ConsumerTest < Test::Unit::TestCase
|
|
179
180
|
res = []
|
180
181
|
|
181
182
|
exception = assert_raises(Exception) do
|
182
|
-
Stalking::Consumer.new
|
183
|
+
Stalking::Consumer.new :logger => logger do
|
183
184
|
job "test" do |args|
|
184
185
|
if res.empty?
|
185
186
|
res.push ["down"]
|
@@ -204,5 +205,19 @@ class Stalking::ConsumerTest < Test::Unit::TestCase
|
|
204
205
|
def test_logger
|
205
206
|
# Already tested
|
206
207
|
end
|
208
|
+
|
209
|
+
def test_termination
|
210
|
+
assert_nothing_raised do
|
211
|
+
Timeout::timeout 3 do
|
212
|
+
consumer = Stalking::Consumer.new
|
213
|
+
|
214
|
+
consumer.send :looping do
|
215
|
+
consumer.send :lock do # Don't invoke exit
|
216
|
+
Process.kill "USR1", Process.pid
|
217
|
+
end
|
218
|
+
end
|
219
|
+
end
|
220
|
+
end
|
221
|
+
end
|
207
222
|
end
|
208
223
|
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: stalking
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.4
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2013-
|
12
|
+
date: 2013-07-02 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: rake
|