propono 1.6.0 → 1.7.0
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/CHANGELOG.md +3 -0
- data/README.md +5 -2
- data/lib/propono/configuration.rb +2 -1
- data/lib/propono/services/queue_listener.rb +1 -1
- data/lib/propono/version.rb +1 -1
- data/test/configuration_test.rb +7 -1
- data/test/services/queue_listener_test.rb +21 -17
- metadata +3 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 013ba7a6dc0e9ffb8fa06aefbec64ee0c398f933
|
4
|
+
data.tar.gz: 1fd1f5e5b5cca50704e67bc874e33c79360c846a
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: b5a91dcbc2c42611e718affa73fd7be0a16f8d59d7585384dff86c272bece9d47d2d46dcf45466b8acb515778b181059e63d60cffd40e250643d8e6e2052b334
|
7
|
+
data.tar.gz: 44ff1b11418f68dca4f5886a66f8c709251310f362f1ec24bf1c450a76e3d42b0e628a6ee93546c7841b56e431b17f9030b7e2a292aa7ec7655a1d1acd589173
|
data/CHANGELOG.md
CHANGED
@@ -1,3 +1,6 @@
|
|
1
|
+
# 1.7.0 / 2017-01-17
|
2
|
+
* [FEATURE] Added num_messages_per_poll config option to allow you to change how many messages you pull from AWS per poll cycle.
|
3
|
+
|
1
4
|
# 1.6.0 / 2015-06-05
|
2
5
|
* [FEATURE] Require fog-aws gem instead of fog (:blue_heart: @mhuggins)
|
3
6
|
* [FEATURE] Change licence to MIT (:blue_heart: @BiggerNoise)
|
data/README.md
CHANGED
@@ -144,7 +144,7 @@ Propono.config do |config|
|
|
144
144
|
config.secret_key = "A AWS secret key"
|
145
145
|
# Or use AWS IAM profile of the machine
|
146
146
|
config.use_iam_profile = true
|
147
|
-
|
147
|
+
|
148
148
|
config.queue_region = "An AWS queue region"
|
149
149
|
config.application_name = "A name unique in your network"
|
150
150
|
config.udp_host = "The host of a machine used for UDP proxying"
|
@@ -152,6 +152,9 @@ Propono.config do |config|
|
|
152
152
|
config.tcp_host = "The host of a machine used for TCP proxying"
|
153
153
|
config.tcp_port = "The port of a machine used for TCP proxying"
|
154
154
|
config.logger = "A logger such as Log4r or Rails.logger"
|
155
|
+
|
156
|
+
config.max_retries = "The number of retries if a message raises an exception before being placed on the failed queue"
|
157
|
+
config.num_messages_per_poll = "The number of messages retrieved per poll to SQS"
|
155
158
|
end
|
156
159
|
```
|
157
160
|
|
@@ -169,7 +172,7 @@ We'd love to have you involved. Please read our [contributing guide](https://git
|
|
169
172
|
|
170
173
|
### Contributors
|
171
174
|
|
172
|
-
This project is managed by the [Meducation team](http://company.meducation.net/about#team).
|
175
|
+
This project is managed by the [Meducation team](http://company.meducation.net/about#team).
|
173
176
|
|
174
177
|
These individuals have come up with the ideas and written the code that made this possible:
|
175
178
|
|
@@ -11,7 +11,7 @@ module Propono
|
|
11
11
|
:udp_host, :udp_port,
|
12
12
|
:tcp_host, :tcp_port,
|
13
13
|
:logger,
|
14
|
-
:max_retries
|
14
|
+
:max_retries, :num_messages_per_poll
|
15
15
|
]
|
16
16
|
attr_writer *SETTINGS
|
17
17
|
|
@@ -20,6 +20,7 @@ module Propono
|
|
20
20
|
self.queue_suffix = ""
|
21
21
|
self.use_iam_profile = false
|
22
22
|
self.max_retries = 0
|
23
|
+
self.num_messages_per_poll = 10
|
23
24
|
end
|
24
25
|
|
25
26
|
SETTINGS.each do |setting|
|
@@ -35,7 +35,7 @@ module Propono
|
|
35
35
|
private
|
36
36
|
|
37
37
|
def read_messages
|
38
|
-
read_messages_from_queue(main_queue_url,
|
38
|
+
read_messages_from_queue(main_queue_url, Propono.config.num_messages_per_poll) || read_messages_from_queue(slow_queue_url, 1)
|
39
39
|
end
|
40
40
|
|
41
41
|
def read_messages_from_queue(queue_url, num_messages)
|
data/lib/propono/version.rb
CHANGED
data/test/configuration_test.rb
CHANGED
@@ -83,6 +83,12 @@ module Propono
|
|
83
83
|
assert_equal val, Propono.config.tcp_port
|
84
84
|
end
|
85
85
|
|
86
|
+
def test_num_messages_per_poll
|
87
|
+
val = 3
|
88
|
+
Propono.config.num_messages_per_poll = val
|
89
|
+
assert_equal val, Propono.config.num_messages_per_poll
|
90
|
+
end
|
91
|
+
|
86
92
|
def test_missing_access_key_throws_exception
|
87
93
|
assert_raises(ProponoConfigurationError) do
|
88
94
|
Propono.config.access_key
|
@@ -110,7 +116,7 @@ module Propono
|
|
110
116
|
def test_default_max_retries
|
111
117
|
assert_equal 0, Propono.config.max_retries
|
112
118
|
end
|
113
|
-
|
119
|
+
|
114
120
|
def test_max_retries
|
115
121
|
val = 5
|
116
122
|
Propono.config.max_retries = val
|
@@ -26,6 +26,8 @@ module Propono
|
|
26
26
|
@listener = QueueListener.new(@topic_id) {}
|
27
27
|
@listener.stubs(sqs: @sqs)
|
28
28
|
|
29
|
+
Propono.config.num_messages_per_poll = 14
|
30
|
+
|
29
31
|
Propono.config.max_retries = 0
|
30
32
|
end
|
31
33
|
|
@@ -60,30 +62,32 @@ module Propono
|
|
60
62
|
end
|
61
63
|
|
62
64
|
def test_read_message_from_sqs
|
65
|
+
max_number_of_messages = 5
|
63
66
|
queue_url = @listener.send(:main_queue_url)
|
64
|
-
options = { 'MaxNumberOfMessages' =>
|
67
|
+
options = { 'MaxNumberOfMessages' => max_number_of_messages }
|
65
68
|
@sqs.expects(:receive_message).with(queue_url, options).returns(@sqs_response)
|
66
|
-
@listener.send(:read_messages_from_queue, queue_url,
|
69
|
+
@listener.send(:read_messages_from_queue, queue_url, max_number_of_messages)
|
67
70
|
end
|
68
71
|
|
69
72
|
def test_log_message_from_sqs
|
70
73
|
queue_url = @listener.send(:main_queue_url)
|
71
74
|
Propono.config.logger.expects(:info).with() {|x| x == "Propono [#{@message1_id}]: Received from sqs."}
|
72
|
-
@listener.send(:read_messages_from_queue, queue_url,
|
75
|
+
@listener.send(:read_messages_from_queue, queue_url, Propono.config.num_messages_per_poll)
|
73
76
|
end
|
74
77
|
|
75
78
|
def test_read_messages_calls_process_message_for_each_msg
|
79
|
+
|
76
80
|
queue_url = @listener.send(:main_queue_url)
|
77
81
|
@listener.expects(:process_raw_message).with(@sqs_message1, queue_url)
|
78
82
|
@listener.expects(:process_raw_message).with(@sqs_message2, queue_url)
|
79
|
-
@listener.send(:read_messages_from_queue, queue_url,
|
83
|
+
@listener.send(:read_messages_from_queue, queue_url, Propono.config.num_messages_per_poll)
|
80
84
|
end
|
81
85
|
|
82
86
|
def test_read_messages_does_not_call_process_messages_if_there_are_none
|
83
87
|
queue_url = @listener.send(:main_queue_url)
|
84
88
|
@sqs_response.stubs(body: {"Message" => []})
|
85
89
|
@listener.expects(:process_message).never
|
86
|
-
@listener.send(:read_messages_from_queue, queue_url,
|
90
|
+
@listener.send(:read_messages_from_queue, queue_url, Propono.config.num_messages_per_poll)
|
87
91
|
end
|
88
92
|
|
89
93
|
def test_exception_from_sqs_is_logged
|
@@ -92,7 +96,7 @@ module Propono
|
|
92
96
|
@sqs.stubs(:receive_message).raises(StandardError)
|
93
97
|
Propono.config.logger.expects(:error).with("Unexpected error reading from queue http://example.com")
|
94
98
|
Propono.config.logger.expects(:error).with() {|x| x.is_a?(StandardError)}
|
95
|
-
@listener.send(:read_messages_from_queue, queue_url,
|
99
|
+
@listener.send(:read_messages_from_queue, queue_url, Propono.config.num_messages_per_poll)
|
96
100
|
end
|
97
101
|
|
98
102
|
def test_forbidden_error_is_logged_and_re_raised
|
@@ -102,7 +106,7 @@ module Propono
|
|
102
106
|
Propono.config.logger.expects(:error).with("Forbidden error caught and re-raised. http://example.com")
|
103
107
|
Propono.config.logger.expects(:error).with() {|x| x.is_a?(Excon::Errors::Forbidden)}
|
104
108
|
assert_raises Excon::Errors::Forbidden do
|
105
|
-
@listener.send(:read_messages_from_queue, queue_url,
|
109
|
+
@listener.send(:read_messages_from_queue, queue_url, Propono.config.num_messages_per_poll)
|
106
110
|
end
|
107
111
|
end
|
108
112
|
|
@@ -140,7 +144,7 @@ module Propono
|
|
140
144
|
@sqs.expects(:delete_message).with(queue_url, @receipt_handle2)
|
141
145
|
|
142
146
|
@listener.stubs(queue_url: queue_url)
|
143
|
-
@listener.send(:read_messages_from_queue, queue_url,
|
147
|
+
@listener.send(:read_messages_from_queue, queue_url, Propono.config.num_messages_per_poll)
|
144
148
|
end
|
145
149
|
|
146
150
|
def test_messages_are_deleted_if_there_is_an_exception_processing
|
@@ -155,7 +159,7 @@ module Propono
|
|
155
159
|
@listener.stubs(sqs: @sqs)
|
156
160
|
@listener.stubs(:requeue_message_on_failure).with(SqsMessage.new(@sqs_message1), exception)
|
157
161
|
@listener.stubs(:requeue_message_on_failure).with(SqsMessage.new(@sqs_message2), exception)
|
158
|
-
@listener.send(:read_messages_from_queue, queue_url,
|
162
|
+
@listener.send(:read_messages_from_queue, queue_url, Propono.config.num_messages_per_poll)
|
159
163
|
end
|
160
164
|
|
161
165
|
def test_messages_are_retried_or_abandoned_on_failure
|
@@ -166,7 +170,7 @@ module Propono
|
|
166
170
|
@listener.expects(:requeue_message_on_failure).with(SqsMessage.new(@sqs_message1), exception)
|
167
171
|
@listener.expects(:requeue_message_on_failure).with(SqsMessage.new(@sqs_message2), exception)
|
168
172
|
@listener.stubs(sqs: @sqs)
|
169
|
-
@listener.send(:read_messages_from_queue, queue_url,
|
173
|
+
@listener.send(:read_messages_from_queue, queue_url, Propono.config.num_messages_per_poll)
|
170
174
|
end
|
171
175
|
|
172
176
|
def test_failed_on_moving_to_failed_queue_does_not_delete
|
@@ -179,7 +183,7 @@ module Propono
|
|
179
183
|
@listener.expects(:delete_message).with(@sqs_message1).never
|
180
184
|
@listener.expects(:delete_message).with(@sqs_message2).never
|
181
185
|
@listener.stubs(sqs: @sqs)
|
182
|
-
@listener.send(:read_messages_from_queue, queue_url,
|
186
|
+
@listener.send(:read_messages_from_queue, queue_url, Propono.config.num_messages_per_poll)
|
183
187
|
end
|
184
188
|
|
185
189
|
def test_messages_are_moved_to_corrupt_queue_if_there_is_an_parsing_exception
|
@@ -191,7 +195,7 @@ module Propono
|
|
191
195
|
|
192
196
|
@listener.expects(:move_to_corrupt_queue).with(sqs_message1)
|
193
197
|
@listener.expects(:move_to_corrupt_queue).with(sqs_message2)
|
194
|
-
@listener.send(:read_messages_from_queue, queue_url,
|
198
|
+
@listener.send(:read_messages_from_queue, queue_url, Propono.config.num_messages_per_poll)
|
195
199
|
end
|
196
200
|
|
197
201
|
def test_message_moved_to_failed_queue_if_there_is_an_exception_and_retry_count_is_zero
|
@@ -200,7 +204,7 @@ module Propono
|
|
200
204
|
end
|
201
205
|
|
202
206
|
def test_message_requeued_if_there_is_an_exception_but_failure_count_less_than_retry_count
|
203
|
-
Propono.config.max_retries =
|
207
|
+
Propono.config.max_retries = Propono.config.num_messages_per_poll
|
204
208
|
message = SqsMessage.new(@sqs_message1)
|
205
209
|
message.stubs(failure_count: 4)
|
206
210
|
@sqs.expects(:send_message).with(regexp_matches(/https:\/\/queue.amazonaws.com\/[0-9]+\/MyApp-some-topic$/), anything)
|
@@ -208,9 +212,9 @@ module Propono
|
|
208
212
|
end
|
209
213
|
|
210
214
|
def test_message_requeued_if_there_is_an_exception_but_failure_count_exceeds_than_retry_count
|
211
|
-
Propono.config.max_retries =
|
215
|
+
Propono.config.max_retries = Propono.config.num_messages_per_poll
|
212
216
|
message = SqsMessage.new(@sqs_message1)
|
213
|
-
message.stubs(failure_count:
|
217
|
+
message.stubs(failure_count: Propono.config.num_messages_per_poll)
|
214
218
|
@sqs.expects(:send_message).with(regexp_matches(/https:\/\/queue.amazonaws.com\/[0-9]+\/MyApp-some-topic-failed/), anything)
|
215
219
|
@listener.send(:requeue_message_on_failure, message, StandardError.new)
|
216
220
|
end
|
@@ -226,7 +230,7 @@ module Propono
|
|
226
230
|
slow_queue_url = "http://slow.com"
|
227
231
|
@listener.stubs(slow_queue_url: slow_queue_url)
|
228
232
|
|
229
|
-
@listener.expects(:read_messages_from_queue).with(main_queue_url,
|
233
|
+
@listener.expects(:read_messages_from_queue).with(main_queue_url, Propono.config.num_messages_per_poll).returns(false)
|
230
234
|
@listener.expects(:read_messages_from_queue).with(slow_queue_url, 1)
|
231
235
|
@listener.send(:read_messages)
|
232
236
|
end
|
@@ -235,7 +239,7 @@ module Propono
|
|
235
239
|
main_queue_url = "http://normal.com"
|
236
240
|
@listener.stubs(main_queue_url: main_queue_url)
|
237
241
|
|
238
|
-
@listener.expects(:read_messages_from_queue).with(main_queue_url,
|
242
|
+
@listener.expects(:read_messages_from_queue).with(main_queue_url, Propono.config.num_messages_per_poll).returns(true)
|
239
243
|
@listener.send(:read_messages)
|
240
244
|
end
|
241
245
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: propono
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.
|
4
|
+
version: 1.7.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- MalcyL
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date:
|
12
|
+
date: 2017-01-17 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: fog-aws
|
@@ -179,7 +179,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
179
179
|
version: '0'
|
180
180
|
requirements: []
|
181
181
|
rubyforge_project:
|
182
|
-
rubygems_version: 2.
|
182
|
+
rubygems_version: 2.6.8
|
183
183
|
signing_key:
|
184
184
|
specification_version: 4
|
185
185
|
summary: General purpose pub/sub library built on top of AWS SNS and SQS
|