coney_island 0.10.1 → 0.10.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.
- 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
|