sqewer 5.0.7 → 5.0.8
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/.travis.yml +3 -2
- data/CHANGELOG.md +4 -0
- data/lib/sqewer.rb +3 -0
- data/lib/sqewer/connection.rb +21 -16
- data/lib/sqewer/version.rb +1 -1
- data/sqewer.gemspec +1 -0
- metadata +17 -3
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA1:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 303e0674eeb56dc7ff4a8056482a828988eb53c5
|
|
4
|
+
data.tar.gz: 47762bf5591cac2d28a6a6b7078a97c82a697b45
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: fa6a9832e1833e9ed3ec3b2a316001b4637bc9eeec997474a265aa9242c5b3e490752fa8c12f4d238a5bd6c2ef8a8012ca2e37651d853d4f53b879fc7e253a9e
|
|
7
|
+
data.tar.gz: 10327bbbe1e13113f7ed4910c6feb90f29b1148ee0af9f98762eab127287bfa3038be7609709cd76079efea10038b5d06c25ae9c851c796bfc479947dea33892
|
data/.travis.yml
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
rvm:
|
|
2
|
-
- 2.1.5
|
|
3
2
|
- 2.2.2
|
|
3
|
+
- 2.3.3
|
|
4
|
+
- 2.4.1
|
|
4
5
|
sudo: false
|
|
5
6
|
cache: bundler
|
|
6
7
|
env:
|
|
@@ -8,4 +9,4 @@ env:
|
|
|
8
9
|
- secure: E+uNoJmvjq5+3/PYUs2a1bRh7bCjAbcYEIKJzOVgIiI+gWB4dLpTKwVW/fqJbjCDIGPw9OwiwphN51zLEo0ie5AJIkavcjWRcdazKq8usokAz/A5Ilru5YvGXJ5UQtF8TJNsZfJGOGMJwL5d/MsDSd3/sjy88wrFiSeeNlHA06KDBrGdZXE4/dOb5Z84cSxPaD7nDaGP36V3Uv88X272oezODm9Mp+Fsf4goGoU9I9PBDD36pCXAlpURWpyWMKa2TzEXfgN43TYxta4p+bu6BA871df31j3BfVKwY1K/59eN9HqW8xWF9rgcgLo3NgQuaoqde3ryCE4jqKymjtG1/R5bdbQsn07R7/OagQMPVkbn07Aq+X6Q8GVTkrMl829z87QiMETNnzpsHl/1RD3DVnUo4k+XmqLbwW6NRl452j3eEHsiMvxf1vt8Qn1hu61qm98WGVNCGFWX/eAu/iTpvDcQOkoUuUEfGnXPaGeM8GT7tNdKptT8gsg/H0Dwb4d0qwA8uAEWttmZBmI9145hpnIk+hkDkH22dzhTus8d7CfFDSpu7s3y9434wiCYF5pkugyWJb5dd24d00ssgF5gqhLU/s48WcBwipl8mMGu/H/5ezh/pG9dL2uDIUjKRrUybE/vmDJGy8ZEDnOwJ04NJ701vQjFybgZRXXyU5ESEJQ=
|
|
9
10
|
- secure: hq1T5MsHGmEnfQjOJlu/GzUPJ4WH0+lZOHezb4i0rFmRtWnmOMO+YUA34q9P6VQROk5KcAiRKtqZYmxZwTjyJVk2DTcJkvUAVzWBHD+MZAsH/lql+lnUJTuZRapYI85LChmEZkDMhYxZYfxTqGTbE4GjLtVtGN8zmTRStLxtvqyfiaU0SuGzyw9wfso/QhqHadQAQ7NttTYyiSiO2vHxK7rhmNi99MxAeVL3qZ3H2mcypSEE7CZd+nFa2CQxh/Guce0i+N2PDYTB6dsvA4xA5Xh/e+han3g4x/sRpic2C/9HS2zRYf0iN20+pFyotp5SaW3o5Q5S3iUqQtyZoR2lN1YMd4csyyKp/0G4QOjAPIN3FIef/RTVLqdfZXaord4iAg9GN9eKdtgYuS7JgyDl0VOmTpS2RYuDP+PGR2HRXXVc0gHt2aFl/oy+DTXh6emcOkpZtRZlbHqtVz5WXZZftm8niId+UXQmJuIQU+YgIiFDmviafapwjaYoXHCv8QMAGqNBP5EWDfxvYyPtGhQrj37sRYpfnUCkdJCiZvZLhQgQ0aIvR3KJIFpXtQmWaaT3e7u07B6weBB7Icto6WflfKtYHvVd1YfOX02/J8byhJbzRY+Qjqrq+5aQR1L3AKbmv8AooZdcm/CrEx6MP7xuIM0fjp1oU4cKQe74KX/KuqE=
|
|
10
11
|
- secure: fWzpY63ZAXOtjEJuYoya/mwzJ7fZQJGsN6hhamXorOhUgaeP2vdC7/6gK3PPMIXOJ5NXPiANGbAUWKgLLWJ3F7rK2y9UCUWTzvE2CK/13vUV9de7byQfAjfHo7wjDJuPLved+WmSM7ASVjzGq9wQS8MTeYUymSNVY3xiZcvNTO2XY9AAu32SSWDs1ayXiCGE9DyN5WEvEEPixHqpplZLvSqTtKtEZVdP/a3tPuzogYFvoJ/ZEfG9LRr4nnbwuKCaTljpYaZc/8yFbhhJgCrTuOKb0gB/UFeMjd0WX6MQWofzIj152d0ghCTlgtESR2LQJdSXA2BO0ZzSqYj8NKTAcZ8IsaUj+6kBgfQGHu43TF/dB877v8pY55HS8a3gFPDK/6OZhRT7UcFZgle1qvX422CD196fRHktSBcDTx9jQsG8r7Ray9oJygXQr6tKhrRkjMkkBAiBd/GkIJkJu5RecmlLOZMJ+YeYa95kWDUXwo3HGK9MxtFyuplSRYk4mQ1jbrJXdmufQuTazl2FYL+elOUeUb8ej3iniUcmyDGU6tZx84aZTbBOaovmeQqr3pXIaXYMhvkRGLD3Ky7SNZN9ZzFczRWcKStyQal+BYK1R3RU8cD0m0PEpUxV5ERP50E3GyN/0d0bg22LywK9aWDHOhCzjI0emVvSAn8ZiY78SSo=
|
|
11
|
-
- AWS_REGION=eu-central-1
|
|
12
|
+
- AWS_REGION=eu-central-1
|
data/CHANGELOG.md
CHANGED
data/lib/sqewer.rb
CHANGED
data/lib/sqewer/connection.rb
CHANGED
|
@@ -8,6 +8,9 @@
|
|
|
8
8
|
class Sqewer::Connection
|
|
9
9
|
DEFAULT_TIMEOUT_SECONDS = 5
|
|
10
10
|
BATCH_RECEIVE_SIZE = 10
|
|
11
|
+
MAX_RANDOM_FAILURES_PER_CALL = 10
|
|
12
|
+
|
|
13
|
+
NotOurFaultAwsError = Class.new(StandardError)
|
|
11
14
|
|
|
12
15
|
# A wrapper for most important properties of the received message
|
|
13
16
|
class Message < Struct.new(:receipt_handle, :body)
|
|
@@ -96,14 +99,8 @@ class Sqewer::Connection
|
|
|
96
99
|
def send_multiple_messages
|
|
97
100
|
buffer = SendBuffer.new
|
|
98
101
|
yield(buffer)
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
failed = resp.failed
|
|
102
|
-
if failed.any?
|
|
103
|
-
err = failed.inspect + ', ' + resp.inspect
|
|
104
|
-
raise "#{failed.length} messages failed to send: #{err}"
|
|
105
|
-
end
|
|
106
|
-
end
|
|
102
|
+
|
|
103
|
+
buffer.each_batch {|batch| handle_batch_with_retries(:send_message_batch, batch) }
|
|
107
104
|
end
|
|
108
105
|
|
|
109
106
|
# Deletes a message after it has been succesfully decoded and processed
|
|
@@ -122,18 +119,26 @@ class Sqewer::Connection
|
|
|
122
119
|
buffer = DeleteBuffer.new
|
|
123
120
|
yield(buffer)
|
|
124
121
|
|
|
125
|
-
buffer.each_batch
|
|
126
|
-
resp = client.delete_message_batch(queue_url: @queue_url, entries: batch)
|
|
127
|
-
failed = resp.failed
|
|
128
|
-
if failed.any?
|
|
129
|
-
err = failed.inspect + ', ' + resp.inspect
|
|
130
|
-
raise "#{failed.length} messages failed to delete: #{err}"
|
|
131
|
-
end
|
|
132
|
-
end
|
|
122
|
+
buffer.each_batch {|batch| handle_batch_with_retries(:delete_message_batch, batch) }
|
|
133
123
|
end
|
|
134
124
|
|
|
135
125
|
private
|
|
136
126
|
|
|
127
|
+
def handle_batch_with_retries(method, batch)
|
|
128
|
+
Retriable.retriable on: NotOurFaultAwsError, tries: MAX_RANDOM_FAILURES_PER_CALL do
|
|
129
|
+
resp = client.send(method, queue_url: @queue_url, entries: batch)
|
|
130
|
+
wrong_messages, aws_failures = resp.failed.partition {|m| m.sender_fault }
|
|
131
|
+
if wrong_messages.any?
|
|
132
|
+
err = wrong_messages.inspect + ', ' + resp.inspect
|
|
133
|
+
raise "#{wrong_messages.length} messages failed while doing #{method.to_s} with error: #{err}"
|
|
134
|
+
elsif aws_failures.any?
|
|
135
|
+
# We set the 'batch' param to an array with only the failed messages so only those get retried
|
|
136
|
+
batch = aws_failures.map {|aws_response_message| batch.find { |m| aws_response_message.id.to_s == m[:id] }}
|
|
137
|
+
raise NotOurFaultAwsError
|
|
138
|
+
end
|
|
139
|
+
end
|
|
140
|
+
end
|
|
141
|
+
|
|
137
142
|
class RetryWrapper < Struct.new(:sqs_client)
|
|
138
143
|
MAX_RETRIES = 1000
|
|
139
144
|
# Provide retrying wrappers for all the methods of Aws::SQS::Client that we actually use
|
data/lib/sqewer/version.rb
CHANGED
data/sqewer.gemspec
CHANGED
|
@@ -32,6 +32,7 @@ Gem::Specification.new do |spec|
|
|
|
32
32
|
spec.add_runtime_dependency 'aws-sdk', '~> 2'
|
|
33
33
|
spec.add_runtime_dependency 'very_tiny_state_machine'
|
|
34
34
|
spec.add_runtime_dependency 'ks'
|
|
35
|
+
spec.add_runtime_dependency 'retriable'
|
|
35
36
|
|
|
36
37
|
spec.add_development_dependency "bundler", "~> 1"
|
|
37
38
|
spec.add_development_dependency "rake", "~> 10.0"
|
metadata
CHANGED
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: sqewer
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 5.0.
|
|
4
|
+
version: 5.0.8
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Julik Tarkhanov
|
|
8
8
|
autorequire:
|
|
9
9
|
bindir: bin
|
|
10
10
|
cert_chain: []
|
|
11
|
-
date: 2017-06-
|
|
11
|
+
date: 2017-06-12 00:00:00.000000000 Z
|
|
12
12
|
dependencies:
|
|
13
13
|
- !ruby/object:Gem::Dependency
|
|
14
14
|
name: aws-sdk
|
|
@@ -52,6 +52,20 @@ dependencies:
|
|
|
52
52
|
- - ">="
|
|
53
53
|
- !ruby/object:Gem::Version
|
|
54
54
|
version: '0'
|
|
55
|
+
- !ruby/object:Gem::Dependency
|
|
56
|
+
name: retriable
|
|
57
|
+
requirement: !ruby/object:Gem::Requirement
|
|
58
|
+
requirements:
|
|
59
|
+
- - ">="
|
|
60
|
+
- !ruby/object:Gem::Version
|
|
61
|
+
version: '0'
|
|
62
|
+
type: :runtime
|
|
63
|
+
prerelease: false
|
|
64
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
65
|
+
requirements:
|
|
66
|
+
- - ">="
|
|
67
|
+
- !ruby/object:Gem::Version
|
|
68
|
+
version: '0'
|
|
55
69
|
- !ruby/object:Gem::Dependency
|
|
56
70
|
name: bundler
|
|
57
71
|
requirement: !ruby/object:Gem::Requirement
|
|
@@ -240,7 +254,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
|
240
254
|
version: '0'
|
|
241
255
|
requirements: []
|
|
242
256
|
rubyforge_project:
|
|
243
|
-
rubygems_version: 2.
|
|
257
|
+
rubygems_version: 2.6.11
|
|
244
258
|
signing_key:
|
|
245
259
|
specification_version: 4
|
|
246
260
|
summary: Process jobs from SQS
|