shoryuken 3.0.3 → 3.0.4

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 0d55fd64fa9c0f923238d2582e4404dec95d4442
4
- data.tar.gz: 05cd9f7a3c025926c95cdfa687a7e1a15bcf2ecc
3
+ metadata.gz: e1367b27e316c258563ef328b78bc64947c849d8
4
+ data.tar.gz: 285db9748d737bfe07a6904db381d3c11883cd05
5
5
  SHA512:
6
- metadata.gz: 323c9ffefa9992bea8ecc7e5ac81039b73d1ff7c41985482c89dfcfab4e1ed4a97e3613512fbf5b933a34f0a428c18a3169202f105aa74b5d55c3d782910037e
7
- data.tar.gz: 33713211be0bdb68a83fd8729bf85b1bc1a0d437d6527d7ccd92954df0be6bb04724a4857cd3e80bc41a8824ae7d81786c50a3e68b0115697c0e1c129d327f77
6
+ metadata.gz: 7f85154f339098c0b04a01673548b0c688217290772131dc28a1ed0c378b0cb671576f5a195143d915a8ab70ed836b089bd12ff6c4d6aa78d81bf858729323a6
7
+ data.tar.gz: 9b5180a9baf239178c11afcc7f55d31392162deeb95aa7f49836a64e94fcc114b145ba82414b83ad22d278612d3cca53436bb804d41d98ccfbe9f1eea4f678cc
data/CHANGELOG.md CHANGED
@@ -1,3 +1,10 @@
1
+ ## [v3.0.4] - 2017-03-24
2
+ - Add `sqs purge` command. See https://docs.aws.amazon.com/AWSSimpleQueueService/latest/APIReference/API_PurgeQueue.html
3
+ - [#344](https://github.com/phstc/shoryuken/pull/344)
4
+
5
+ - Fix "Thread exhaustion" error. This issue was most noticed when using long polling. @waynerobinson :beers: for pairing up on this.
6
+ - [#345](https://github.com/phstc/shoryuken/pull/345)
7
+
1
8
  ## [v3.0.3] - 2017-03-19
2
9
  - Update `sqs` CLI commands to use `get_queue_url` when appropriated
3
10
  - [#341](https://github.com/phstc/shoryuken/pull/341)
data/bin/cli/sqs.rb CHANGED
@@ -92,7 +92,7 @@ module Shoryuken
92
92
  end
93
93
  end
94
94
 
95
- desc 'ls [QUEUE-NAME-PREFIX]', 'List queues'
95
+ desc 'ls [QUEUE-NAME-PREFIX]', 'Lists queues'
96
96
  method_option :watch, aliases: '-w', type: :boolean, desc: 'watch queues'
97
97
  method_option :watch_interval, type: :numeric, default: 10, desc: 'watch interval'
98
98
  def ls(queue_name_prefix = '')
@@ -110,7 +110,7 @@ module Shoryuken
110
110
  end
111
111
  end
112
112
 
113
- desc 'dump QUEUE-NAME', 'Dump messages from a queue into a JSON lines file'
113
+ desc 'dump QUEUE-NAME', 'Dumps messages from a queue into a JSON lines file'
114
114
  method_option :number, aliases: '-n', type: :numeric, default: Float::INFINITY, desc: 'number of messages to dump'
115
115
  method_option :path, aliases: '-p', type: :string, default: './', desc: 'path to save the dump file'
116
116
  method_option :delete, aliases: '-d', type: :boolean, default: true, desc: 'delete from the queue'
@@ -144,7 +144,7 @@ module Shoryuken
144
144
  file.close if file
145
145
  end
146
146
 
147
- desc 'requeue QUEUE-NAME PATH', 'Requeue messages from a dump file'
147
+ desc 'requeue QUEUE-NAME PATH', 'Requeues messages from a dump file'
148
148
  def requeue(queue_name, path)
149
149
  fail_task "Path #{path} not found" unless File.exist?(path)
150
150
 
@@ -155,7 +155,7 @@ module Shoryuken
155
155
  say "Requeued #{messages.size} messages from #{path} to #{queue_name}", :green
156
156
  end
157
157
 
158
- desc 'mv QUEUE-NAME-SOURCE QUEUE-NAME-TARGET', 'Move messages from one queue (source) to another (target)'
158
+ desc 'mv QUEUE-NAME-SOURCE QUEUE-NAME-TARGET', 'Moves messages from one queue (source) to another (target)'
159
159
  method_option :number, aliases: '-n', type: :numeric, default: Float::INFINITY, desc: 'number of messages to move'
160
160
  method_option :delete, aliases: '-d', type: :boolean, default: true, desc: 'delete from the queue'
161
161
  def mv(queue_name_source, queue_name_target)
@@ -175,6 +175,13 @@ module Shoryuken
175
175
  say "Moved #{count} messages from #{queue_name_source} to #{queue_name_target}", :green
176
176
  end
177
177
  end
178
+
179
+ desc 'purge QUEUE-NAME', 'Deletes the messages in a queue'
180
+ def purge(queue_name)
181
+ sqs.purge_queue(queue_url: find_queue_url(queue_name))
182
+
183
+ say "Purge request sent for #{queue_name}. The message deletion process takes up to 60 seconds", :yellow
184
+ end
178
185
  end
179
186
  end
180
187
  end
data/bin/shoryuken CHANGED
@@ -16,7 +16,7 @@ module Shoryuken
16
16
 
17
17
  register(Shoryuken::CLI::SQS, 'sqs', 'sqs COMMAND', 'SQS commands')
18
18
 
19
- desc 'start', 'Start shoryuken'
19
+ desc 'start', 'Starts shoryuken'
20
20
  method_option :concurrency, aliases: '-c', type: :numeric, desc: 'Processor threads to use'
21
21
  method_option :daemon, aliases: '-d', type: :boolean, desc: 'Daemonize process'
22
22
  method_option :queues, aliases: '-q', type: :array, desc: 'Queues to process with optional weights'
@@ -39,7 +39,7 @@ module Shoryuken
39
39
  Shoryuken::Runner.instance.run(opts.freeze)
40
40
  end
41
41
 
42
- desc 'version', 'Print version'
42
+ desc 'version', 'Prints version'
43
43
  def version
44
44
  say "Shoryuken #{Shoryuken::VERSION}"
45
45
  end
@@ -2,8 +2,7 @@ module Shoryuken
2
2
  class Manager
3
3
  include Util
4
4
 
5
- BATCH_LIMIT = 10
6
- HEARTBEAT_INTERVAL = 0.1
5
+ BATCH_LIMIT = 10
7
6
 
8
7
  def initialize(fetcher, polling_strategy)
9
8
  @count = Shoryuken.options.fetch(:concurrency, 25)
@@ -13,22 +12,18 @@ module Shoryuken
13
12
  @queues = Shoryuken.queues.dup.uniq
14
13
 
15
14
  @done = Concurrent::AtomicBoolean.new(false)
16
- @dispatching = Concurrent::AtomicBoolean.new(false)
17
15
 
18
16
  @fetcher = fetcher
19
17
  @polling_strategy = polling_strategy
20
18
 
21
- @heartbeat = Concurrent::TimerTask.new(run_now: true,
22
- execution_interval: HEARTBEAT_INTERVAL,
23
- timeout_interval: 60) { dispatch }
24
-
25
19
  @pool = Concurrent::FixedThreadPool.new(@count, max_queue: @count)
20
+ @dispatcher_executor = Concurrent::SingleThreadExecutor.new
26
21
  end
27
22
 
28
23
  def start
29
24
  logger.info { 'Starting' }
30
25
 
31
- @heartbeat.execute
26
+ dispatch_async
32
27
  end
33
28
 
34
29
  def stop(options = {})
@@ -43,7 +38,7 @@ module Shoryuken
43
38
 
44
39
  logger.info { 'Shutting down workers' }
45
40
 
46
- @heartbeat.kill
41
+ @dispatcher_executor.kill
47
42
 
48
43
  if options[:shutdown]
49
44
  hard_shutdown_in(options[:timeout])
@@ -58,18 +53,23 @@ module Shoryuken
58
53
 
59
54
  private
60
55
 
61
- def dispatch
56
+ def dispatch_async
57
+ @dispatcher_executor.post(&method(:dispatch_now))
58
+ end
59
+
60
+ def dispatch_now
62
61
  return if @done.true?
63
- return unless @dispatching.make_true
64
62
 
65
- return if ready.zero?
66
- return unless (queue = @polling_strategy.next_queue)
63
+ begin
64
+ return if ready.zero?
65
+ return unless (queue = @polling_strategy.next_queue)
67
66
 
68
- logger.debug { "Ready: #{ready}, Busy: #{busy}, Active Queues: #{@polling_strategy.active_queues}" }
67
+ logger.debug { "Ready: #{ready}, Busy: #{busy}, Active Queues: #{@polling_strategy.active_queues}" }
69
68
 
70
- batched_queue?(queue) ? dispatch_batch(queue) : dispatch_single_messages(queue)
71
- ensure
72
- @dispatching.make_false
69
+ batched_queue?(queue) ? dispatch_batch(queue) : dispatch_single_messages(queue)
70
+ ensure
71
+ dispatch_async
72
+ end
73
73
  end
74
74
 
75
75
  def busy
@@ -1,3 +1,3 @@
1
1
  module Shoryuken
2
- VERSION = '3.0.3'.freeze
2
+ VERSION = '3.0.4'.freeze
3
3
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: shoryuken
3
3
  version: !ruby/object:Gem::Version
4
- version: 3.0.3
4
+ version: 3.0.4
5
5
  platform: ruby
6
6
  authors:
7
7
  - Pablo Cantero
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2017-03-19 00:00:00.000000000 Z
11
+ date: 2017-03-24 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler