toiler 0.1.0 → 0.1.1
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/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