toiler 0.1.0 → 0.1.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/lib/toiler/fetcher.rb +7 -1
- data/lib/toiler/manager.rb +6 -0
- data/lib/toiler/processor.rb +9 -8
- data/lib/toiler/version.rb +1 -1
- metadata +1 -1
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 0ece2dedcdd070ea808c72bf4c9dc2dfa5ed40a2
|
4
|
+
data.tar.gz: 860bb03a04d9db9f759f9be0f1ef9927086490e0
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 9547e8024e54d8ea73c305010bf89980e002c1293840b49010bd6241cab7fa1f4d2f2de373acfccf56775baead38559c86220310fde6a5917db97950ef533309
|
7
|
+
data.tar.gz: 7bb8c7bc6b85d49c90537c7267a5bad510f10d3ac22fd809b014e48f199c2911a35170f76bb1346c2e4b2b7081c0d8125e36db79f312e4bf4c959f62d5019a92
|
data/lib/toiler/fetcher.rb
CHANGED
@@ -10,13 +10,16 @@ module Toiler
|
|
10
10
|
finalizer :shutdown
|
11
11
|
|
12
12
|
def initialize(queue, client = nil)
|
13
|
+
debug "Initializing Fetcher for queue #{queue}..."
|
13
14
|
@queue = Queue.new queue, client
|
14
15
|
@wait = Toiler.options[:wait] || 20
|
15
16
|
@batch = Toiler.worker_class_registry[queue].batch?
|
16
17
|
async.poll_messages
|
18
|
+
debug "Finished initializing Fetcher for queue #{queue}"
|
17
19
|
end
|
18
20
|
|
19
21
|
def shutdown
|
22
|
+
debug "Fetcher #{queue.name} shutting down..."
|
20
23
|
instance_variables.each { |iv| remove_instance_variable iv }
|
21
24
|
end
|
22
25
|
|
@@ -30,8 +33,11 @@ module Toiler
|
|
30
33
|
loop do
|
31
34
|
count = Toiler.manager.free_processors queue.name
|
32
35
|
options[:max_number_of_messages] = (batch || count > FETCH_LIMIT) ? FETCH_LIMIT : count
|
36
|
+
debug "Fetcher #{queue.name} retreiving messages with options: #{options.inspect}..."
|
33
37
|
msgs = queue.receive_messages options
|
34
|
-
|
38
|
+
debug "Fetcher #{queue.name} retreived #{msgs.count} messages..."
|
39
|
+
next if msgs.empty?
|
40
|
+
Toiler.manager.assign_messages queue.name, msgs
|
35
41
|
Toiler.manager.wait_for_available_processors queue.name
|
36
42
|
end
|
37
43
|
end
|
data/lib/toiler/manager.rb
CHANGED
@@ -16,19 +16,23 @@ module Toiler
|
|
16
16
|
end
|
17
17
|
|
18
18
|
def init
|
19
|
+
debug 'Initializing manager...'
|
19
20
|
@queues = Toiler.worker_class_registry
|
20
21
|
@client = ::Aws::SQS::Client.new
|
21
22
|
init_workers
|
22
23
|
init_conditions
|
23
24
|
pool_processors
|
24
25
|
supervise_fetchers
|
26
|
+
debug 'Finished initializing manager...'
|
25
27
|
end
|
26
28
|
|
27
29
|
def shutdown
|
30
|
+
debug 'Manager shutting down...'
|
28
31
|
instance_variables.each { |iv| remove_instance_variable iv }
|
29
32
|
end
|
30
33
|
|
31
34
|
def stop
|
35
|
+
debug 'Manager stopping...'
|
32
36
|
terminate_fetchers
|
33
37
|
terminate_processors
|
34
38
|
end
|
@@ -88,6 +92,7 @@ module Toiler
|
|
88
92
|
end
|
89
93
|
|
90
94
|
def assign_messages(queue, messages)
|
95
|
+
debug "Manager assigning #{messages.count} for queue #{queue}"
|
91
96
|
processor_pool = Toiler.processor_pool(queue)
|
92
97
|
if batch? queue
|
93
98
|
processor_pool.async.process(queue, messages)
|
@@ -96,6 +101,7 @@ module Toiler
|
|
96
101
|
processor_pool.async.process(queue, m)
|
97
102
|
end
|
98
103
|
end
|
104
|
+
debug "Manager finished assigning #{messages.count} for queue #{queue}"
|
99
105
|
end
|
100
106
|
|
101
107
|
def wait_for_available_processors(queue)
|
data/lib/toiler/processor.rb
CHANGED
@@ -11,21 +11,21 @@ module Toiler
|
|
11
11
|
finalizer :shutdown
|
12
12
|
|
13
13
|
def initialize(queue)
|
14
|
+
debug "Initializing Processor for queue #{queue}"
|
14
15
|
@queue = queue
|
15
|
-
async.init
|
16
|
-
end
|
17
|
-
|
18
|
-
def init
|
19
16
|
@scheduler = Scheduler.supervise.actors.first
|
20
17
|
processor_finished
|
18
|
+
debug "Finished initializing Processor for queue #{queue}"
|
21
19
|
end
|
22
20
|
|
23
21
|
def shutdown
|
22
|
+
debug "Processor for queue #{queue} shutting down..."
|
24
23
|
scheduler.terminate if scheduler && scheduler.alive?
|
25
24
|
instance_variables.each { |iv| remove_instance_variable iv }
|
26
25
|
end
|
27
26
|
|
28
27
|
def process(queue, sqs_msg)
|
28
|
+
debug "Processor #{queue} begins processing..."
|
29
29
|
exclusive do
|
30
30
|
worker = Toiler.worker_registry[queue]
|
31
31
|
timer = auto_visibility_timeout(queue, sqs_msg, worker.class)
|
@@ -36,11 +36,11 @@ module Toiler
|
|
36
36
|
sqs_msg.delete if worker.class.auto_delete?
|
37
37
|
ensure
|
38
38
|
timer.cancel if timer
|
39
|
-
::ActiveRecord::Base.clear_active_connections!
|
39
|
+
::ActiveRecord::Base.clear_active_connections! if defined? ActiveRecord
|
40
40
|
end
|
41
41
|
end
|
42
|
-
ensure
|
43
42
|
processor_finished
|
43
|
+
debug "Processor #{queue} finishes processing..."
|
44
44
|
end
|
45
45
|
|
46
46
|
def processor_finished
|
@@ -52,11 +52,12 @@ module Toiler
|
|
52
52
|
def auto_visibility_timeout(queue, sqs_msg, worker_class)
|
53
53
|
return unless worker_class.auto_visibility_timeout?
|
54
54
|
queue_visibility_timeout = Toiler.fetcher(queue).queue.visibility_timeout
|
55
|
-
block = lambda do |msg, visibility_timeout|
|
55
|
+
block = lambda do |msg, visibility_timeout, q|
|
56
|
+
debug "Processor #{q} updating visibility_timeout..."
|
56
57
|
msg.visibility_timeout = visibility_timeout
|
57
58
|
end
|
58
59
|
|
59
|
-
scheduler.custom_every(queue_visibility_timeout - 5, sqs_msg, queue_visibility_timeout, block)
|
60
|
+
scheduler.custom_every(queue_visibility_timeout - 5, sqs_msg, queue_visibility_timeout, queue, block)
|
60
61
|
end
|
61
62
|
|
62
63
|
def get_body(worker_class, sqs_msg)
|
data/lib/toiler/version.rb
CHANGED