sqs_buffer 0.3.2 → 0.3.4

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: 8d9cb67462f6e4e10a92b5fd381c9b8061a2804a
4
- data.tar.gz: 181302f3bfb26132bc9fa95e9e4139080dcdadc7
3
+ metadata.gz: 6e3d90a0a63db12cacc1eb5269edd25ff91eb1f1
4
+ data.tar.gz: 5318180628aef11ee2070b2f05eba6d3df903baf
5
5
  SHA512:
6
- metadata.gz: 0ce38d61690a685bf9e283ea49e044450a4c6a0dadb02c7eabd4b8e05efd7ceb16603c87430772e769130430bbd7d95d4793c2a5b02d6335a792944fcdc01377
7
- data.tar.gz: b7baa1da71767e65c73f1ca4b21759d5b4c130fb96688b3b3e136ef2ca221facbaf6be186b760f5879cd3b749374289a3c6de2eac8b9d924d56dffc040400c0e
6
+ metadata.gz: 0ce665df45a315522d9765c7d0e590737fd8405fe120ad2c165768663b514d602e66827ef537094a06b4c1f5e46c35d40bdacfae60f1d0013930cf943fdbbf59
7
+ data.tar.gz: d0b3baa4c2806fecec224d4db64a3fde2c3c2c193cfef59475bc2f90d4b547c526581e07588e3fb06a5f2a1edff8d3370b470c0275006076bbbd1cfcd65801f1
data/.gitignore CHANGED
@@ -7,3 +7,6 @@
7
7
  /pkg/
8
8
  /spec/reports/
9
9
  /tmp/
10
+
11
+ # Ignore application configuration
12
+ .env
@@ -6,17 +6,17 @@ module SqsBuffer
6
6
  class Client
7
7
  def initialize(opts)
8
8
  @queue_url = opts.fetch(:queue_url) { |k| missing_key!(k) }
9
- client = opts.fetch(:client) { |k| missing_key!(k) }
9
+ client = opts.fetch(:client) { |k| missing_key!(k) }
10
10
 
11
11
  @poller = Aws::SQS::QueuePoller.new(@queue_url, client: client)
12
12
  @skip_delete = opts.fetch(:skip_delete, true)
13
13
  @max_number_of_messages = opts.fetch(:max_number_of_messages, 10).to_i
14
14
  @logger = opts.fetch(:logger, Logger.new(STDOUT))
15
- @before_request_block = Concurrent::MutexAtomicReference.new
16
- @process_block = Concurrent::MutexAtomicReference.new
17
- @message_queue = Concurrent::Array.new
18
- @last_process_time = Concurrent::AtomicFixnum.new(Time.now.to_i)
19
- @running = Concurrent::AtomicBoolean.new(false)
15
+ @before_request_block = Concurrent::MutexAtomicReference.new
16
+ @process_block = Concurrent::MutexAtomicReference.new
17
+ @message_queue = Concurrent::Array.new
18
+ @last_process_time = Concurrent::AtomicFixnum.new(Time.now.to_i)
19
+ @running = Concurrent::AtomicBoolean.new(false)
20
20
 
21
21
  @max_wait_time = Concurrent::AtomicFixnum.new(
22
22
  opts.fetch(:max_wait_time, 300).to_i
@@ -32,15 +32,20 @@ module SqsBuffer
32
32
 
33
33
  @worker_thread = Thread.new do
34
34
  begin
35
+ sleep_seconds ||= 1
35
36
  opts = {
36
37
  skip_delete: @skip_delete,
37
38
  max_number_of_messages: @max_number_of_messages
38
39
  }
39
40
  @poller.poll(opts) do |messages|
40
41
  store_messages(messages)
42
+ sleep_seconds = 1
41
43
  end
42
44
  rescue => e
43
- @logger.error "A Fatal exception(#{e.message}) occurred in worker thread | Backtrace: #{e.backtrace}"
45
+ sleep_seconds = sleep_seconds * 2
46
+ @logger.error "An unhandled exception(#{e.message}) occurred in worker thread. Sleeping #{sleep_seconds} seconds before retry. | Backtrace: #{e.backtrace}"
47
+ sleep([sleep_seconds, 30].min)
48
+ retry
44
49
  end
45
50
  end # End worker thread
46
51
 
@@ -93,7 +98,11 @@ module SqsBuffer
93
98
  end
94
99
 
95
100
  def process_all_messages
96
- @process_block.value.call(buffer)
101
+ if @process_block.value
102
+ call_process_block_safely
103
+ else
104
+ @logger.info "No process block was given. Discarding all messages."
105
+ end
97
106
  delete_all_messages
98
107
  touch_process_time
99
108
  rescue StandardError => e
@@ -110,6 +119,12 @@ module SqsBuffer
110
119
 
111
120
  private
112
121
 
122
+ def call_process_block_safely
123
+ @process_block.value.call(buffer)
124
+ rescue
125
+ @logger.error "An exception(#{e.message}) occurred while processing the message queue | Backtrace: #{e.backtrace}"
126
+ end
127
+
113
128
  def need_to_process?
114
129
  if !buffer_empty? && (buffer_full? || last_process_time_stale?)
115
130
  true
@@ -137,7 +152,7 @@ module SqsBuffer
137
152
  if need_to_process?
138
153
  process_all_messages
139
154
  end
140
- rescue => e
155
+ rescue StandardError => e
141
156
  @logger.error "Exception: #{e.message} in before_request block. | Backtrace: #{e.backtrace}"
142
157
  end
143
158
  end # End Poller loop
@@ -147,14 +162,12 @@ module SqsBuffer
147
162
  messages.each do |msg|
148
163
  store_message(msg)
149
164
  end
150
- rescue => e
165
+ rescue StandardError => e
151
166
  @logger.error "Exception: #{e.message} while storing messages: #{messages} | Backtrace: #{e.backtrace}"
152
167
  end
153
168
 
154
169
  def store_message(msg)
155
170
  @message_queue << msg
156
- rescue StandardError => e
157
- @logger.error "Exception: #{e.message} while storing message: #{msg} | Backtrace: #{e.backtrace}"
158
171
  end
159
172
 
160
173
  def touch_process_time
@@ -1,3 +1,3 @@
1
1
  module SqsBuffer
2
- VERSION = "0.3.2"
2
+ VERSION = "0.3.4"
3
3
  end
@@ -26,9 +26,10 @@ more than 10 at at time.}
26
26
  spec.add_dependency "aws-sdk", "~> 2.2"
27
27
  spec.add_dependency "concurrent-ruby", "~> 1.0"
28
28
 
29
- spec.add_development_dependency "bundler"
30
- spec.add_development_dependency "rake"
31
- spec.add_development_dependency "rspec"
32
- spec.add_development_dependency "pry"
29
+ spec.add_development_dependency 'bundler'
30
+ spec.add_development_dependency 'rake'
31
+ spec.add_development_dependency 'rspec'
32
+ spec.add_development_dependency 'dotenv'
33
+ spec.add_development_dependency 'pry'
33
34
  end
34
35
 
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: sqs_buffer
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.3.2
4
+ version: 0.3.4
5
5
  platform: ruby
6
6
  authors:
7
7
  - John Thomas
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2016-02-26 00:00:00.000000000 Z
11
+ date: 2016-03-09 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  requirement: !ruby/object:Gem::Requirement
@@ -80,6 +80,20 @@ dependencies:
80
80
  - - '>='
81
81
  - !ruby/object:Gem::Version
82
82
  version: '0'
83
+ - !ruby/object:Gem::Dependency
84
+ requirement: !ruby/object:Gem::Requirement
85
+ requirements:
86
+ - - '>='
87
+ - !ruby/object:Gem::Version
88
+ version: '0'
89
+ name: dotenv
90
+ prerelease: false
91
+ type: :development
92
+ version_requirements: !ruby/object:Gem::Requirement
93
+ requirements:
94
+ - - '>='
95
+ - !ruby/object:Gem::Version
96
+ version: '0'
83
97
  - !ruby/object:Gem::Dependency
84
98
  requirement: !ruby/object:Gem::Requirement
85
99
  requirements: