envoi-mam-agent 1.3.1 → 1.3.3
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/envoi/mam/agent/version.rb +1 -1
- data/lib/envoi/restore/agent.rb +67 -7
- 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: 6c018c235b16bdb909cc62ef96f71a50d41471ca
|
4
|
+
data.tar.gz: 9762194aa13fd04a301699ef3572cdab5efc719d
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 7000b7b8b389f9cac2d6cc50c7949b87ca79dae5cb394fa96e50dccade9015d8bb4ac3689dab6bbec3283e62166567759b110c8779a6ed344ea76edbdcd92960
|
7
|
+
data.tar.gz: 0016e9047d4424a9d3be07ea59118751e8ee4f9a24e21821dc54e6ae0ba32b8c97b5729323e5d44d2c36b99fe4debcc89ce027a16ec8d6435f3e447c04fc624a
|
data/lib/envoi/restore/agent.rb
CHANGED
@@ -9,10 +9,55 @@ module Envoi
|
|
9
9
|
|
10
10
|
class Restore
|
11
11
|
|
12
|
+
class SQSMessageHandler
|
13
|
+
|
14
|
+
attr_accessor :logger
|
15
|
+
attr_accessor :queue_handler, :event_handler, :message
|
16
|
+
attr_accessor :worker_thread
|
17
|
+
|
18
|
+
def initialize(args = {})
|
19
|
+
@logger = args[:logger]
|
20
|
+
@queue_handler = args[:queue_handler]
|
21
|
+
@message = args[:message]
|
22
|
+
@event_handler = args[:event_handler]
|
23
|
+
end
|
24
|
+
|
25
|
+
def process
|
26
|
+
msg_body_parsed = JSON.parse(message.body)
|
27
|
+
event = msg_body_parsed
|
28
|
+
|
29
|
+
worker_thread = Thread.new(event, @event_handler) do
|
30
|
+
@event_handler.process_event(event)
|
31
|
+
end
|
32
|
+
|
33
|
+
visibility_timeout = 5
|
34
|
+
new_visibility_timeout = 60
|
35
|
+
|
36
|
+
while worker_thread.alive?
|
37
|
+
change_message_visibility_timeout(new_visibility_timeout)
|
38
|
+
sleep visibility_timeout
|
39
|
+
end
|
40
|
+
|
41
|
+
delete_message
|
42
|
+
end
|
43
|
+
|
44
|
+
def change_message_visibility_timeout(visibility_timeout)
|
45
|
+
logger.debug { "Updating Visibility Timeout for Message #{message.receipt_handle}..."}
|
46
|
+
queue_handler.poller.change_message_visibility_timeout(message, visibility_timeout)
|
47
|
+
end
|
48
|
+
|
49
|
+
def delete_message
|
50
|
+
logger.debug { "Deleting Message #{message.receipt_handle}..."}
|
51
|
+
queue_handler.poller.delete_message(message)
|
52
|
+
end
|
53
|
+
|
54
|
+
end
|
55
|
+
|
12
56
|
class Agent < Envoi::Mam::Agent
|
13
57
|
|
14
58
|
DEFAULT_ASPERA_ARGS = '-v -k3 --overwrite=diff -P 33001'
|
15
59
|
DEFAULT_DESTINATION_PATH = '.'
|
60
|
+
DEFAULT_THREAD_LIMIT = 10
|
16
61
|
|
17
62
|
attr_accessor :default_aspera_ascp_args,
|
18
63
|
:default_aspera_ascp_path
|
@@ -23,6 +68,9 @@ module Envoi
|
|
23
68
|
@should_stop = false
|
24
69
|
@default_aspera_ascp_path = args[:default_aspera_ascp_path]
|
25
70
|
@default_aspera_args = args[:default_ascp_args] || DEFAULT_ASPERA_ARGS
|
71
|
+
|
72
|
+
@thread_limit = args.fetch(:thread_limit, DEFAULT_THREAD_LIMIT)
|
73
|
+
|
26
74
|
initialize_queue_handler
|
27
75
|
initialize_event_handler
|
28
76
|
end
|
@@ -32,7 +80,7 @@ module Envoi
|
|
32
80
|
end
|
33
81
|
|
34
82
|
def sqs_config
|
35
|
-
@sqs_config ||= system_config['sqs'] || {}
|
83
|
+
@sqs_config ||= system_config['sqs'] || { skip_delete: true}
|
36
84
|
end
|
37
85
|
|
38
86
|
def initialize_queue_handler
|
@@ -43,19 +91,31 @@ module Envoi
|
|
43
91
|
end
|
44
92
|
|
45
93
|
def initialize_event_handler
|
46
|
-
@event_handler = GlacierRestoreEventHandler.new(config: sqs_config)
|
94
|
+
@event_handler = GlacierRestoreEventHandler.new(config: sqs_config, logger: logger)
|
47
95
|
end
|
48
96
|
|
49
97
|
def run
|
50
98
|
@running = true
|
51
|
-
|
52
|
-
|
99
|
+
logger.info { "Running..." }
|
100
|
+
@threads = []
|
101
|
+
@queue_handler.poll do |messages, stats|
|
102
|
+
messages = [ messages ] unless messages.is_a?(Array)
|
103
|
+
messages.each do |msg|
|
53
104
|
break if @should_stop
|
54
|
-
|
55
|
-
|
56
|
-
|
105
|
+
break if @thread_limit && @threads.length >= @thread_limit
|
106
|
+
logger.info { "Processing Message... "}
|
107
|
+
logger.info { "Message: #{msg}" }
|
108
|
+
|
109
|
+
message_handler = SQSMessageHandler.new(logger: logger,
|
110
|
+
queue_handler: @queue_handler.dup,
|
111
|
+
message: msg.dup,
|
112
|
+
event_handler: @event_handler.dup)
|
113
|
+
t = Thread.new(message_handler) { |mh| mh.process }
|
114
|
+
@threads << t
|
57
115
|
end
|
116
|
+
@threads.keep_if { |t| t.alive? }
|
58
117
|
throw :stop_polling if @should_stop
|
118
|
+
throw :skip_delete
|
59
119
|
end
|
60
120
|
@running = false
|
61
121
|
end
|