coney_island 0.10.1 → 0.10.2
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/lib/coney_island/job.rb +44 -8
- data/lib/coney_island/version.rb +1 -1
- data/lib/coney_island/worker.rb +10 -1
- data/test/dummy/log/test.log +0 -10
- data/test/job_test.rb +3 -0
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 8ace26e15f62cea555f90b2d01df1c171a663bdd
|
4
|
+
data.tar.gz: ac72a73cc54eef7b8ce0cf787bfd7cad67f7662c
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: d62459ea99bf7d992555add7bd1659aac5fd2422b94d8ad6c0e20b5802481857e5708445bdfe29e0beb41335225429bdbb9c88fe6952bf2530ecd5cdf15b8370
|
7
|
+
data.tar.gz: d7148fc33a739223600f3ba69e886c5054d011863b59304713d3933b7d2cd38a50e9943159ec8ca031fc6eb397f12af54eb6efa7be85d07d3bede9c8f4044f9f
|
data/lib/coney_island/job.rb
CHANGED
@@ -50,6 +50,7 @@ module ConeyIsland
|
|
50
50
|
end
|
51
51
|
|
52
52
|
def handle_job
|
53
|
+
ConeyIsland::Worker.running_jobs << self
|
53
54
|
Timeout::timeout(timeout) do
|
54
55
|
execute_job_method
|
55
56
|
end
|
@@ -63,32 +64,67 @@ module ConeyIsland
|
|
63
64
|
ConeyIsland.submit(self.klass, self.method_name, self.resubmit_args)
|
64
65
|
end
|
65
66
|
rescue Exception => e
|
67
|
+
log.error("Error executing #{self.class_name}##{self.method_name} #{self.id} for id #{self.instance_id} with args #{self.args}:")
|
68
|
+
log.error(e.message)
|
69
|
+
log.error(e.backtrace.join("\n"))
|
66
70
|
if retry_on_exception && (self.attempts < self.retry_limit)
|
67
|
-
self.attempts += 1
|
68
71
|
ConeyIsland.poke_the_badger(e, {work_queue: self.ticket, job_payload: self.args, attempt_count: self.attempts})
|
72
|
+
log.error("Resubmitting #{self.id} after error on attempt ##{self.attempts}")
|
73
|
+
self.attempts += 1
|
69
74
|
ConeyIsland.submit(self.klass, self.method_name, self.resubmit_args)
|
70
|
-
log.error("Resubmitting after error on attempt ##{self.attempts}:")
|
71
75
|
else
|
72
76
|
ConeyIsland.poke_the_badger(e, {work_queue: self.ticket, job_payload: self.args})
|
73
|
-
log.error("Bailing out after error on final attempt ##{self.attempts}:")
|
77
|
+
log.error("Bailing out on #{self.id} after error on final attempt ##{self.attempts}:")
|
74
78
|
end
|
75
|
-
log.error("Error executing #{self.class_name}##{self.method_name} #{self.id} for id #{self.instance_id} with args #{self.args}:")
|
76
|
-
log.error(e.message)
|
77
|
-
log.error(e.backtrace.join("\n"))
|
78
79
|
ensure
|
79
80
|
finalize_job
|
80
81
|
end
|
81
82
|
|
83
|
+
def next_attempt_delay
|
84
|
+
if self.delaying?
|
85
|
+
time_delayed = (Time.now - self.delay_start).round
|
86
|
+
new_delay = self.delay - time_delayed
|
87
|
+
else
|
88
|
+
ConeyIsland.delay_seed**(self.attempts - 1)
|
89
|
+
end
|
90
|
+
end
|
91
|
+
|
82
92
|
def resubmit_args
|
83
93
|
args.select{|key,val| ['timeout','retry_on_exception','retry_limit','args','instance_id'].include? key}.merge(
|
84
|
-
'attempt_count' => self.attempts, 'work_queue' => self.ticket, 'delay' =>
|
94
|
+
'attempt_count' => self.attempts, 'work_queue' => self.ticket, 'delay' => self.next_attempt_delay)
|
85
95
|
end
|
86
96
|
|
87
97
|
def finalize_job
|
88
|
-
metadata.ack
|
98
|
+
metadata.ack if !self.acked? && !ConeyIsland.running_inline?
|
89
99
|
log.info("finished job #{id}")
|
90
100
|
ConeyIsland::Worker.running_jobs.delete self
|
91
101
|
end
|
92
102
|
|
103
|
+
def delaying?
|
104
|
+
@delaying
|
105
|
+
end
|
106
|
+
|
107
|
+
def acked?
|
108
|
+
@acked
|
109
|
+
end
|
110
|
+
|
111
|
+
def activate_after_delay
|
112
|
+
@delaying = false
|
113
|
+
ConeyIsland::Worker.delayed_jobs.delete self
|
114
|
+
end
|
115
|
+
|
116
|
+
def delay_job
|
117
|
+
@delaying = true
|
118
|
+
ConeyIsland::Worker.delayed_jobs << self
|
119
|
+
unless ConeyIsland.running_inline?
|
120
|
+
@acked = true
|
121
|
+
metadata.ack
|
122
|
+
end
|
123
|
+
log.info("delaying job #{id} for #{self.delay} seconds")
|
124
|
+
end
|
125
|
+
|
126
|
+
def requeue_delay
|
127
|
+
ConeyIsland.submit(self.klass, self.method_name, self.resubmit_args)
|
128
|
+
end
|
93
129
|
end
|
94
130
|
end
|
data/lib/coney_island/version.rb
CHANGED
data/lib/coney_island/worker.rb
CHANGED
@@ -25,6 +25,10 @@ module ConeyIsland
|
|
25
25
|
@running_jobs = []
|
26
26
|
end
|
27
27
|
|
28
|
+
def self.delayed_jobs
|
29
|
+
@delayed_jobs ||= []
|
30
|
+
end
|
31
|
+
|
28
32
|
def self.ticket
|
29
33
|
@ticket
|
30
34
|
end
|
@@ -160,9 +164,11 @@ module ConeyIsland
|
|
160
164
|
begin
|
161
165
|
args = JSON.parse(payload)
|
162
166
|
job = Job.new(metadata, args)
|
163
|
-
self.running_jobs << job
|
164
167
|
if job.delay.present?
|
168
|
+
self.delayed_jobs << job
|
169
|
+
job.delay_job
|
165
170
|
EventMachine.add_timer(job.delay) do
|
171
|
+
job.activate_after_delay
|
166
172
|
job.handle_job
|
167
173
|
end
|
168
174
|
else
|
@@ -198,6 +204,9 @@ module ConeyIsland
|
|
198
204
|
Process.kill(signal, child_pid)
|
199
205
|
end
|
200
206
|
@queue.unsubscribe rescue nil
|
207
|
+
self.delayed_jobs.each do |delayed_job|
|
208
|
+
delayed_job.requeue_delay
|
209
|
+
end
|
201
210
|
EventMachine.add_periodic_timer(1) do
|
202
211
|
if self.running_jobs.any?
|
203
212
|
self.log.info("Waiting for #{self.running_jobs.length} requests to finish")
|
data/test/dummy/log/test.log
CHANGED
@@ -1,22 +1,12 @@
|
|
1
1
|
ConeyIsland::Submitter.submit! about to iterate over this many jobs: 1
|
2
2
|
Failed to connecto to RabbitMQ Attempt #1 time(s), trying again in 0 seconds...
|
3
|
-
Failed to connecto to RabbitMQ Attempt #1 time(s), trying again in 0 seconds...
|
4
|
-
ConeyIsland::Submitter.submit! about to iterate over this many jobs: 1
|
5
|
-
Failed to connecto to RabbitMQ Attempt #1 time(s), trying again in 0 seconds...
|
6
|
-
ConeyIsland::Submitter.submit! about to iterate over this many jobs: 1
|
7
|
-
Failed to connecto to RabbitMQ Attempt #1 time(s), trying again in 0 seconds...
|
8
3
|
ConeyIsland::Submitter.submit! about to iterate over this many jobs: 1
|
9
4
|
Failed to connecto to RabbitMQ Attempt #1 time(s), trying again in 0 seconds...
|
10
5
|
ConeyIsland::Submitter.submit! about to iterate over this many jobs: 1
|
11
6
|
Failed to connecto to RabbitMQ Attempt #1 time(s), trying again in 0 seconds...
|
12
7
|
ConeyIsland::Submitter.submit! about to iterate over this many jobs: 1
|
13
8
|
Failed to connecto to RabbitMQ Attempt #1 time(s), trying again in 0 seconds...
|
14
|
-
ConeyIsland::Submitter.submit! about to iterate over this many jobs: 1
|
15
9
|
Failed to connecto to RabbitMQ Attempt #1 time(s), trying again in 0 seconds...
|
16
10
|
ConeyIsland::Submitter.submit! about to iterate over this many jobs: 1
|
17
11
|
Failed to connecto to RabbitMQ Attempt #1 time(s), trying again in 0 seconds...
|
18
12
|
ConeyIsland::Submitter.submit! about to iterate over this many jobs: 1
|
19
|
-
ConeyIsland::Submitter.submit! about to iterate over this many jobs: 1
|
20
|
-
Failed to connecto to RabbitMQ Attempt #1 time(s), trying again in 0 seconds...
|
21
|
-
ConeyIsland::Submitter.submit! about to iterate over this many jobs: 1
|
22
|
-
Failed to connecto to RabbitMQ Attempt #1 time(s), trying again in 0 seconds...
|
data/test/job_test.rb
CHANGED
@@ -45,6 +45,7 @@ class JobTest < MiniTest::Test
|
|
45
45
|
end
|
46
46
|
|
47
47
|
it "bails out on timeout if retry limit reached" do
|
48
|
+
ConeyIsland.stop_running_inline
|
48
49
|
job = ConeyIsland::Job.new(@metadata,
|
49
50
|
{ 'klass' => 'TestModel',
|
50
51
|
'method_name' => :take_too_long,
|
@@ -79,6 +80,7 @@ class JobTest < MiniTest::Test
|
|
79
80
|
end
|
80
81
|
|
81
82
|
it "bails out on exception if retry_on_exception set and retry_limit reached" do
|
83
|
+
ConeyIsland.stop_running_inline
|
82
84
|
job = ConeyIsland::Job.new(@metadata,
|
83
85
|
{ 'klass' => 'TestModel',
|
84
86
|
'method_name' => :throw_an_error,
|
@@ -96,6 +98,7 @@ class JobTest < MiniTest::Test
|
|
96
98
|
end
|
97
99
|
|
98
100
|
it "bails out on exception if retry_on_exception not set" do
|
101
|
+
ConeyIsland.stop_running_inline
|
99
102
|
job = ConeyIsland::Job.new(@metadata,
|
100
103
|
{ 'klass' => 'TestModel',
|
101
104
|
'method_name' => :throw_an_error }
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: coney_island
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.10.
|
4
|
+
version: 0.10.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Eric Draut
|
@@ -10,7 +10,7 @@ authors:
|
|
10
10
|
autorequire:
|
11
11
|
bindir: bin
|
12
12
|
cert_chain: []
|
13
|
-
date: 2015-03-
|
13
|
+
date: 2015-03-12 00:00:00.000000000 Z
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|
16
16
|
name: rails
|