envoi-mam-agent 1.3.1 → 1.3.3
Sign up to get free protection for your applications and to get access to all the features.
- 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
|