shoryuken 3.2.3 → 3.3.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 +5 -5
- data/.rubocop.yml +89 -23
- data/CHANGELOG.md +14 -0
- data/Gemfile +4 -0
- data/Rakefile +1 -1
- data/bin/cli/base.rb +0 -1
- data/bin/cli/sqs.rb +3 -3
- data/bin/shoryuken +3 -9
- data/examples/bootstrap_queues.rb +3 -3
- data/examples/default_worker.rb +1 -1
- data/lib/shoryuken.rb +0 -1
- data/lib/shoryuken/core_ext.rb +1 -1
- data/lib/shoryuken/extensions/active_job_adapter.rb +1 -1
- data/lib/shoryuken/fetcher.rb +3 -3
- data/lib/shoryuken/logging.rb +1 -1
- data/lib/shoryuken/middleware/server/active_record.rb +1 -1
- data/lib/shoryuken/middleware/server/auto_delete.rb +1 -1
- data/lib/shoryuken/middleware/server/auto_extend_visibility.rb +1 -1
- data/lib/shoryuken/middleware/server/exponential_backoff_retry.rb +1 -1
- data/lib/shoryuken/middleware/server/timing.rb +12 -14
- data/lib/shoryuken/polling/base.rb +1 -1
- data/lib/shoryuken/polling/strict_priority.rb +8 -8
- data/lib/shoryuken/queue.rb +3 -3
- data/lib/shoryuken/runner.rb +9 -3
- data/lib/shoryuken/version.rb +1 -1
- data/lib/shoryuken/worker/inline_executor.rb +12 -3
- data/lib/shoryuken/worker_registry.rb +4 -4
- data/shoryuken.gemspec +5 -5
- data/spec/integration/launcher_spec.rb +2 -2
- data/spec/shoryuken/body_parser_spec.rb +2 -2
- data/spec/shoryuken/client_spec.rb +1 -1
- data/spec/shoryuken/core_ext_spec.rb +6 -6
- data/spec/shoryuken/default_worker_registry_spec.rb +2 -4
- data/spec/shoryuken/environment_loader_spec.rb +4 -4
- data/spec/shoryuken/extensions/active_job_adapter_spec.rb +3 -3
- data/spec/shoryuken/manager_spec.rb +1 -1
- data/spec/shoryuken/middleware/chain_spec.rb +2 -2
- data/spec/shoryuken/middleware/server/auto_delete_spec.rb +9 -7
- data/spec/shoryuken/middleware/server/auto_extend_visibility_spec.rb +3 -3
- data/spec/shoryuken/middleware/server/exponential_backoff_retry_spec.rb +5 -3
- data/spec/shoryuken/options_spec.rb +5 -5
- data/spec/shoryuken/polling/strict_priority_spec.rb +1 -1
- data/spec/shoryuken/polling/weighted_round_robin_spec.rb +1 -1
- data/spec/shoryuken/processor_spec.rb +1 -1
- data/spec/shoryuken/queue_spec.rb +3 -3
- data/spec/shoryuken/util_spec.rb +1 -1
- data/spec/shoryuken/worker/default_executor_spec.rb +10 -5
- data/spec/shoryuken/worker/inline_executor_spec.rb +28 -2
- data/spec/shoryuken/worker_spec.rb +7 -9
- data/spec/spec_helper.rb +1 -1
- data/test_workers/endless_interruptive_worker.rb +2 -2
- data/test_workers/endless_uninterruptive_worker.rb +3 -3
- metadata +7 -7
@@ -121,10 +121,10 @@ RSpec.describe Shoryuken::Queue do
|
|
121
121
|
it 'accepts SQS request parameters' do
|
122
122
|
# https://docs.aws.amazon.com/sdkforruby/api/Aws/SQS/Client.html#send_message_batch-instance_method
|
123
123
|
expect(sqs).to(
|
124
|
-
receive(:send_message_batch).with(hash_including(entries: [{id: '0', message_body: 'msg1'}, {id: '1', message_body: 'msg2'}]))
|
124
|
+
receive(:send_message_batch).with(hash_including(entries: [{ id: '0', message_body: 'msg1' }, { id: '1', message_body: 'msg2' }]))
|
125
125
|
)
|
126
126
|
|
127
|
-
subject.send_messages(entries: [{id: '0', message_body: 'msg1'}, {id: '1', message_body: 'msg2'}])
|
127
|
+
subject.send_messages(entries: [{ id: '0', message_body: 'msg1' }, { id: '1', message_body: 'msg2' }])
|
128
128
|
end
|
129
129
|
|
130
130
|
it 'accepts an array of messages' do
|
@@ -188,7 +188,7 @@ RSpec.describe Shoryuken::Queue do
|
|
188
188
|
)
|
189
189
|
)
|
190
190
|
|
191
|
-
subject.send_messages(%w
|
191
|
+
subject.send_messages(%w[msg1 msg2])
|
192
192
|
end
|
193
193
|
end
|
194
194
|
|
data/spec/shoryuken/util_spec.rb
CHANGED
@@ -9,7 +9,7 @@ describe 'Shoryuken::Util' do
|
|
9
9
|
|
10
10
|
describe '#unparse_queues' do
|
11
11
|
it 'returns queues and weights' do
|
12
|
-
queues = %w
|
12
|
+
queues = %w[queue1 queue1 queue2 queue3 queue4 queue4 queue4]
|
13
13
|
|
14
14
|
expect(subject.unparse_queues(queues)).to eq([['queue1', 2], ['queue2', 1], ['queue3', 1], ['queue4', 3]])
|
15
15
|
end
|
@@ -18,7 +18,8 @@ RSpec.describe Shoryuken::Worker::DefaultExecutor do
|
|
18
18
|
}
|
19
19
|
},
|
20
20
|
message_body: 'message',
|
21
|
-
delay_seconds: 60
|
21
|
+
delay_seconds: 60
|
22
|
+
)
|
22
23
|
|
23
24
|
TestWorker.perform_in(60, 'message')
|
24
25
|
end
|
@@ -40,7 +41,8 @@ RSpec.describe Shoryuken::Worker::DefaultExecutor do
|
|
40
41
|
}
|
41
42
|
},
|
42
43
|
message_body: 'message',
|
43
|
-
delay_seconds: 60
|
44
|
+
delay_seconds: 60
|
45
|
+
)
|
44
46
|
|
45
47
|
TestWorker.perform_in(Time.now + 60, 'message')
|
46
48
|
end
|
@@ -61,7 +63,8 @@ RSpec.describe Shoryuken::Worker::DefaultExecutor do
|
|
61
63
|
data_type: 'String'
|
62
64
|
}
|
63
65
|
},
|
64
|
-
message_body: 'message'
|
66
|
+
message_body: 'message'
|
67
|
+
)
|
65
68
|
|
66
69
|
TestWorker.perform_async('message')
|
67
70
|
end
|
@@ -75,7 +78,8 @@ RSpec.describe Shoryuken::Worker::DefaultExecutor do
|
|
75
78
|
data_type: 'String'
|
76
79
|
}
|
77
80
|
},
|
78
|
-
message_body: 'delayed message'
|
81
|
+
message_body: 'delayed message'
|
82
|
+
)
|
79
83
|
|
80
84
|
TestWorker.perform_async('delayed message', delay_seconds: 60)
|
81
85
|
end
|
@@ -92,7 +96,8 @@ RSpec.describe Shoryuken::Worker::DefaultExecutor do
|
|
92
96
|
data_type: 'String'
|
93
97
|
}
|
94
98
|
},
|
95
|
-
message_body: 'delayed message'
|
99
|
+
message_body: 'delayed message'
|
100
|
+
)
|
96
101
|
|
97
102
|
TestWorker.perform_async('delayed message', queue: new_queue)
|
98
103
|
end
|
@@ -7,7 +7,7 @@ RSpec.describe Shoryuken::Worker::InlineExecutor do
|
|
7
7
|
|
8
8
|
describe '.perform_async' do
|
9
9
|
specify do
|
10
|
-
expect_any_instance_of(TestWorker).to receive(:perform)
|
10
|
+
expect_any_instance_of(TestWorker).to receive(:perform).with(anything, 'test')
|
11
11
|
|
12
12
|
TestWorker.perform_async('test')
|
13
13
|
end
|
@@ -15,9 +15,35 @@ RSpec.describe Shoryuken::Worker::InlineExecutor do
|
|
15
15
|
|
16
16
|
describe '.perform_in' do
|
17
17
|
specify do
|
18
|
-
expect_any_instance_of(TestWorker).to receive(:perform)
|
18
|
+
expect_any_instance_of(TestWorker).to receive(:perform).with(anything, 'test')
|
19
19
|
|
20
20
|
TestWorker.perform_in(60, 'test')
|
21
21
|
end
|
22
22
|
end
|
23
|
+
|
24
|
+
context 'batch' do
|
25
|
+
before do
|
26
|
+
TestWorker.get_shoryuken_options['batch'] = true
|
27
|
+
end
|
28
|
+
|
29
|
+
after do
|
30
|
+
TestWorker.get_shoryuken_options['batch'] = false
|
31
|
+
end
|
32
|
+
|
33
|
+
describe '.perform_async' do
|
34
|
+
specify do
|
35
|
+
expect_any_instance_of(TestWorker).to receive(:perform).with(anything, ['test'])
|
36
|
+
|
37
|
+
TestWorker.perform_async('test')
|
38
|
+
end
|
39
|
+
end
|
40
|
+
|
41
|
+
describe '.perform_in' do
|
42
|
+
specify do
|
43
|
+
expect_any_instance_of(TestWorker).to receive(:perform).with(anything, ['test'])
|
44
|
+
|
45
|
+
TestWorker.perform_in(60, 'test')
|
46
|
+
end
|
47
|
+
end
|
48
|
+
end
|
23
49
|
end
|
@@ -19,7 +19,7 @@ RSpec.describe Shoryuken::Worker do
|
|
19
19
|
class NewTestWorker
|
20
20
|
include Shoryuken::Worker
|
21
21
|
|
22
|
-
shoryuken_options queue: ->{ "#{$queue_prefix}_default" }
|
22
|
+
shoryuken_options queue: -> { "#{$queue_prefix}_default" }
|
23
23
|
end
|
24
24
|
|
25
25
|
expect(Shoryuken.worker_registry.workers('production_default')).to eq([NewTestWorker])
|
@@ -30,7 +30,7 @@ RSpec.describe Shoryuken::Worker do
|
|
30
30
|
class TestWorker
|
31
31
|
include Shoryuken::Worker
|
32
32
|
|
33
|
-
OPT = { queue: :default }
|
33
|
+
OPT = { queue: :default }.freeze
|
34
34
|
|
35
35
|
shoryuken_options OPT
|
36
36
|
end
|
@@ -93,15 +93,15 @@ RSpec.describe Shoryuken::Worker do
|
|
93
93
|
class ParentWorker
|
94
94
|
include Shoryuken::Worker
|
95
95
|
|
96
|
-
shoryuken_options queue:
|
96
|
+
shoryuken_options queue: 'myqueue', auto_delete: false
|
97
97
|
end
|
98
98
|
|
99
99
|
class ChildWorker < ParentWorker
|
100
100
|
shoryuken_options auto_delete: true
|
101
101
|
end
|
102
102
|
|
103
|
-
expect(ParentWorker.get_shoryuken_options['queue']).to eq(
|
104
|
-
expect(ChildWorker.get_shoryuken_options['queue']).to eq(
|
103
|
+
expect(ParentWorker.get_shoryuken_options['queue']).to eq('myqueue')
|
104
|
+
expect(ChildWorker.get_shoryuken_options['queue']).to eq('myqueue')
|
105
105
|
expect(ParentWorker.get_shoryuken_options['auto_delete']).to eq(false)
|
106
106
|
expect(ChildWorker.get_shoryuken_options['auto_delete']).to eq(true)
|
107
107
|
end
|
@@ -110,7 +110,7 @@ RSpec.describe Shoryuken::Worker do
|
|
110
110
|
describe '.server_middleware' do
|
111
111
|
before do
|
112
112
|
class FakeMiddleware
|
113
|
-
def call(*
|
113
|
+
def call(*_args)
|
114
114
|
yield
|
115
115
|
end
|
116
116
|
end
|
@@ -133,9 +133,7 @@ RSpec.describe Shoryuken::Worker do
|
|
133
133
|
class NewTestWorker2
|
134
134
|
include Shoryuken::Worker
|
135
135
|
|
136
|
-
server_middleware
|
137
|
-
chain.clear
|
138
|
-
end
|
136
|
+
server_middleware(&:clear)
|
139
137
|
end
|
140
138
|
end
|
141
139
|
|
data/spec/spec_helper.rb
CHANGED
@@ -13,7 +13,7 @@ if ENV['CODECLIMATE_REPO_TOKEN']
|
|
13
13
|
SimpleCov.start
|
14
14
|
end
|
15
15
|
|
16
|
-
config_file = File.join(File.expand_path('
|
16
|
+
config_file = File.join(File.expand_path('..', __dir__), 'spec', 'shoryuken.yml')
|
17
17
|
|
18
18
|
Shoryuken::EnvironmentLoader.setup_options(config_file: config_file)
|
19
19
|
|
@@ -12,7 +12,7 @@ class EndlessInterruptiveWorker
|
|
12
12
|
end
|
13
13
|
|
14
14
|
def max_execution_time
|
15
|
-
ENV[
|
15
|
+
ENV['MAX_EXECUTION_TIME'] ? ENV['MAX_EXECUTION_TIME'].to_i : 100
|
16
16
|
end
|
17
17
|
|
18
18
|
def rng
|
@@ -25,7 +25,7 @@ class EndlessInterruptiveWorker
|
|
25
25
|
end
|
26
26
|
end
|
27
27
|
|
28
|
-
def perform(
|
28
|
+
def perform(_sqs_msg, body)
|
29
29
|
Shoryuken.logger.info("Received message: '#{body}'")
|
30
30
|
|
31
31
|
execution_ms = self.class.random_number(self.class.max_execution_time)
|
@@ -12,7 +12,7 @@ class EndlessUninterruptiveWorker
|
|
12
12
|
end
|
13
13
|
|
14
14
|
def max_execution_time
|
15
|
-
ENV[
|
15
|
+
ENV['MAX_EXECUTION_TIME'] ? ENV['MAX_EXECUTION_TIME'].to_i : 100
|
16
16
|
end
|
17
17
|
|
18
18
|
def rng
|
@@ -25,13 +25,13 @@ class EndlessUninterruptiveWorker
|
|
25
25
|
end
|
26
26
|
end
|
27
27
|
|
28
|
-
def perform(
|
28
|
+
def perform(_sqs_msg, body)
|
29
29
|
Shoryuken.logger.info("Received message: #{body}")
|
30
30
|
|
31
31
|
execution_ms = self.class.random_number(self.class.max_execution_time)
|
32
32
|
Shoryuken.logger.info("Going to burn metal for #{execution_ms}ms")
|
33
33
|
end_time = Time.now + execution_ms.to_f / 1000
|
34
|
-
while Time.now < end_time
|
34
|
+
while Time.now < end_time
|
35
35
|
# burn metal
|
36
36
|
end
|
37
37
|
|
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.
|
4
|
+
version: 3.3.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Pablo Cantero
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2018-
|
11
|
+
date: 2018-10-01 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -25,7 +25,7 @@ dependencies:
|
|
25
25
|
- !ruby/object:Gem::Version
|
26
26
|
version: '1.6'
|
27
27
|
- !ruby/object:Gem::Dependency
|
28
|
-
name:
|
28
|
+
name: dotenv
|
29
29
|
requirement: !ruby/object:Gem::Requirement
|
30
30
|
requirements:
|
31
31
|
- - ">="
|
@@ -39,7 +39,7 @@ dependencies:
|
|
39
39
|
- !ruby/object:Gem::Version
|
40
40
|
version: '0'
|
41
41
|
- !ruby/object:Gem::Dependency
|
42
|
-
name:
|
42
|
+
name: pry-byebug
|
43
43
|
requirement: !ruby/object:Gem::Requirement
|
44
44
|
requirements:
|
45
45
|
- - ">="
|
@@ -53,7 +53,7 @@ dependencies:
|
|
53
53
|
- !ruby/object:Gem::Version
|
54
54
|
version: '0'
|
55
55
|
- !ruby/object:Gem::Dependency
|
56
|
-
name:
|
56
|
+
name: rake
|
57
57
|
requirement: !ruby/object:Gem::Requirement
|
58
58
|
requirements:
|
59
59
|
- - ">="
|
@@ -67,7 +67,7 @@ dependencies:
|
|
67
67
|
- !ruby/object:Gem::Version
|
68
68
|
version: '0'
|
69
69
|
- !ruby/object:Gem::Dependency
|
70
|
-
name:
|
70
|
+
name: rspec
|
71
71
|
requirement: !ruby/object:Gem::Requirement
|
72
72
|
requirements:
|
73
73
|
- - ">="
|
@@ -228,7 +228,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
228
228
|
version: '0'
|
229
229
|
requirements: []
|
230
230
|
rubyforge_project:
|
231
|
-
rubygems_version: 2.
|
231
|
+
rubygems_version: 2.7.3
|
232
232
|
signing_key:
|
233
233
|
specification_version: 4
|
234
234
|
summary: Shoryuken is a super efficient AWS SQS thread based message processor
|