sqewer 4.1.0 → 4.2.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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: d92c1ce7fa4d3baa8d3d24c20f5f806be7e3d037
4
- data.tar.gz: 26a18a95cbb014ad94b77fbabee3af60a4b6eec8
3
+ metadata.gz: d580e81c48aeb4f31bf0069c603c3cee0413c51d
4
+ data.tar.gz: 87d546de3454ff297750d70d355a71c45340cc0a
5
5
  SHA512:
6
- metadata.gz: 22ebdc336e6c9ba4d6f0c4d7d39fcc90961e8400c42f9988a876e302ddf32d6b51b2db4494da174d9d20beef1a05cfe4a5d7b0a5657a067c1d3a1b9534086922
7
- data.tar.gz: 3e7c5d7cca071767ab7629cedfcc76e8ba1c07452324ebc0bad1095a2e52db11e2345859e760658797c3f892d2600af984fc280e3a9c2c99edd5ee931ef084e4
6
+ metadata.gz: 4be05bef37befcb1e3f49021be38af632bbb4af52bfac17a4bc66fa9f81bca65406416538a59e6c94faac584f6d60884e43a46547cc5c96a9e900cd8eef7532e
7
+ data.tar.gz: 9bcf12c6ff462a7ca49659077193c1b95568872c4dd38f8444899000434cf8ce83d79e555bfd7e6226c4b18f9b2fefb72cc3feec28687b65c3047fe0b7858965
data/DETAILS.md CHANGED
@@ -159,7 +159,7 @@ arguments:
159
159
 
160
160
  class CustomWorker < Sqewer::Worker
161
161
  def initialize(**kwargs)
162
- super(serializer: CustomSerializer.mnew, ..., **kwargs)
162
+ super(serializer: CustomSerializer.new, ..., **kwargs)
163
163
  end
164
164
  end
165
165
 
@@ -40,7 +40,6 @@ class Sqewer::Connection
40
40
  #
41
41
  # @return [Array<Message>] an array of Message objects
42
42
  def receive_messages
43
- client = ::Aws::SQS::Client.new
44
43
  response = client.receive_message(queue_url: @queue_url,
45
44
  wait_time_seconds: DEFAULT_TIMEOUT_SECONDS, max_number_of_messages: 10)
46
45
  response.messages.map do | message |
@@ -58,6 +57,7 @@ class Sqewer::Connection
58
57
  send_multiple_messages {|via| via.send_message(message_body, **kwargs_for_send) }
59
58
  end
60
59
 
60
+ # Stores the messages for the SQS queue (both deletes and sends), and yields them in allowed batch sizes
61
61
  class MessageBuffer < Struct.new(:messages)
62
62
  MAX_RECORDS = 10
63
63
  def initialize
@@ -68,6 +68,7 @@ class Sqewer::Connection
68
68
  end
69
69
  end
70
70
 
71
+ # Saves the messages to send to the SQS queue
71
72
  class SendBuffer < MessageBuffer
72
73
  def send_message(message_body, **kwargs_for_send)
73
74
  # The "id" is only valid _within_ the request, and is used when
@@ -78,6 +79,7 @@ class Sqewer::Connection
78
79
  end
79
80
  end
80
81
 
82
+ # Saves the receipt handles to batch-delete from the SQS queue
81
83
  class DeleteBuffer < MessageBuffer
82
84
  def delete_message(receipt_handle)
83
85
  # The "id" is only valid _within_ the request, and is used when
@@ -94,7 +96,6 @@ class Sqewer::Connection
94
96
  def send_multiple_messages
95
97
  buffer = SendBuffer.new
96
98
  yield(buffer)
97
- client = ::Aws::SQS::Client.new
98
99
  buffer.each_batch do | batch |
99
100
  resp = client.send_message_batch(queue_url: @queue_url, entries: batch)
100
101
  failed = resp.failed
@@ -121,7 +122,6 @@ class Sqewer::Connection
121
122
  buffer = DeleteBuffer.new
122
123
  yield(buffer)
123
124
 
124
- client = ::Aws::SQS::Client.new
125
125
  buffer.each_batch do | batch |
126
126
  resp = client.delete_message_batch(queue_url: @queue_url, entries: batch)
127
127
  failed = resp.failed
@@ -131,4 +131,30 @@ class Sqewer::Connection
131
131
  end
132
132
  end
133
133
  end
134
+
135
+ private
136
+
137
+ class RetryWrapper < Struct.new(:sqs_client)
138
+ MAX_RETRIES = 1000
139
+ # Provide retrying wrappers for all the methods of Aws::SQS::Client that we actually use
140
+ [:delete_message_batch, :send_message_batch, :receive_message].each do |retriable_method_name|
141
+ define_method(retriable_method_name) do |*args, **kwargs|
142
+ tries = 1
143
+ begin
144
+ sqs_client.public_send(retriable_method_name, *args, **kwargs)
145
+ rescue Seahorse::Client::NetworkingError => e
146
+ if (tries += 1) >= MAX_RETRIES
147
+ raise(e)
148
+ else
149
+ sleep 0.5
150
+ retry
151
+ end
152
+ end
153
+ end
154
+ end
155
+ end
156
+
157
+ def client
158
+ @client ||= RetryWrapper.new(Aws::SQS::Client.new)
159
+ end
134
160
  end
@@ -1,3 +1,3 @@
1
1
  module Sqewer
2
- VERSION = '4.1.0'
2
+ VERSION = '4.2.0'
3
3
  end
data/lib/sqewer/worker.rb CHANGED
@@ -189,7 +189,6 @@ class Sqewer::Worker
189
189
 
190
190
  def handle_message(message)
191
191
  return unless message.receipt_handle
192
- Thread.current[:queue_messsage] = '%s...' %message.body[0..32]
193
192
  return @connection.delete_message(message.receipt_handle) unless message.has_body?
194
193
  @isolator.perform(self, message)
195
194
  # The message delete happens within the Isolator
@@ -29,6 +29,8 @@ describe Sqewer::Connection do
29
29
  expect(conn).to receive(:send_multiple_messages).and_call_original
30
30
  conn.send_message('abcdef', delay_seconds: 5)
31
31
  end
32
+
33
+ it 'retries on networking errors'
32
34
  end
33
35
 
34
36
  describe '#send_multiple_messages' do
@@ -69,6 +71,9 @@ describe Sqewer::Connection do
69
71
  end
70
72
  }.to raise_error(/messages failed to send/)
71
73
  end
74
+
75
+ it 'retries on networking errors'
76
+
72
77
  end
73
78
 
74
79
  describe '#delete_message' do
@@ -112,6 +117,8 @@ describe Sqewer::Connection do
112
117
  end
113
118
  }.to raise_error(/messages failed to delete/)
114
119
  end
120
+
121
+ it 'retries on networking errors'
115
122
  end
116
123
 
117
124
  describe '#receive_messages' do
@@ -132,5 +139,7 @@ describe Sqewer::Connection do
132
139
  messages = s.receive_messages
133
140
  expect(messages.length).to eq(5)
134
141
  end
142
+
143
+ it 'retries on networking errors'
135
144
  end
136
145
  end
data/sqewer.gemspec CHANGED
@@ -2,16 +2,16 @@
2
2
  # DO NOT EDIT THIS FILE DIRECTLY
3
3
  # Instead, edit Jeweler::Tasks in Rakefile, and run 'rake gemspec'
4
4
  # -*- encoding: utf-8 -*-
5
- # stub: sqewer 4.1.0 ruby lib
5
+ # stub: sqewer 4.2.0 ruby lib
6
6
 
7
7
  Gem::Specification.new do |s|
8
8
  s.name = "sqewer"
9
- s.version = "4.1.0"
9
+ s.version = "4.2.0"
10
10
 
11
11
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
12
12
  s.require_paths = ["lib"]
13
13
  s.authors = ["Julik Tarkhanov"]
14
- s.date = "2016-02-07"
14
+ s.date = "2016-02-12"
15
15
  s.description = "Process jobs from SQS"
16
16
  s.email = "me@julik.nl"
17
17
  s.extra_rdoc_files = [
@@ -44,7 +44,6 @@ Gem::Specification.new do |s|
44
44
  "lib/sqewer/submitter.rb",
45
45
  "lib/sqewer/version.rb",
46
46
  "lib/sqewer/worker.rb",
47
- "spec/conveyor_belt_spec.rb",
48
47
  "spec/spec_helper.rb",
49
48
  "spec/sqewer/atomic_counter_spec.rb",
50
49
  "spec/sqewer/cli_app.rb",
@@ -56,6 +55,7 @@ Gem::Specification.new do |s|
56
55
  "spec/sqewer/simple_job_spec.rb",
57
56
  "spec/sqewer/submitter_spec.rb",
58
57
  "spec/sqewer/worker_spec.rb",
58
+ "spec/sqewer_module_spec.rb",
59
59
  "sqewer.gemspec"
60
60
  ]
61
61
  s.homepage = "https://gitlab.wetransfer.net/julik/sqewer"
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: 4.1.0
4
+ version: 4.2.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Julik Tarkhanov
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2016-02-07 00:00:00.000000000 Z
11
+ date: 2016-02-12 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: aws-sdk
@@ -225,7 +225,6 @@ files:
225
225
  - lib/sqewer/submitter.rb
226
226
  - lib/sqewer/version.rb
227
227
  - lib/sqewer/worker.rb
228
- - spec/conveyor_belt_spec.rb
229
228
  - spec/spec_helper.rb
230
229
  - spec/sqewer/atomic_counter_spec.rb
231
230
  - spec/sqewer/cli_app.rb
@@ -237,6 +236,7 @@ files:
237
236
  - spec/sqewer/simple_job_spec.rb
238
237
  - spec/sqewer/submitter_spec.rb
239
238
  - spec/sqewer/worker_spec.rb
239
+ - spec/sqewer_module_spec.rb
240
240
  - sqewer.gemspec
241
241
  homepage: https://gitlab.wetransfer.net/julik/sqewer
242
242
  licenses: