sidekiq-sqs 0.0.7 → 0.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.
- data/Guardfile +1 -1
- data/lib/sidekiq-sqs/fetcher.rb +1 -13
- data/lib/sidekiq-sqs/version.rb +1 -1
- data/sidekiq-sqs.gemspec +2 -0
- data/spec/sidekiq-sqs/client_spec.rb +45 -0
- data/spec/sidekiq-sqs/processor_spec.rb +25 -0
- data/spec/sidekiq-sqs/worker_spec.rb +25 -0
- data/spec/spec_helper.rb +4 -0
- metadata +40 -4
- data/spec/sidekiq-sqs/middleware/compression_spec.rb +0 -26
data/Guardfile
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
# A sample Guardfile
|
2
2
|
# More info at https://github.com/guard/guard#readme
|
3
3
|
|
4
|
-
guard 'rspec', :version => 2 do
|
4
|
+
guard 'rspec', :version => 2, :cli => "--format nested" do
|
5
5
|
watch(%r{^spec/.+_spec\.rb$})
|
6
6
|
watch(%r{^lib/(.+)\.rb$}) { |m| "spec/lib/#{m[1]}_spec.rb" }
|
7
7
|
watch('spec/spec_helper.rb') { "spec" }
|
data/lib/sidekiq-sqs/fetcher.rb
CHANGED
@@ -16,16 +16,6 @@ module Sidekiq
|
|
16
16
|
@unique_queues = @queues.uniq
|
17
17
|
end
|
18
18
|
|
19
|
-
# TODO Since there's only one fetcher per manager, we run into the issue
|
20
|
-
# where it takes longer to fetch a single job that it does to process,
|
21
|
-
# on average, so that we have waiting workers even if we have jobs in the
|
22
|
-
# queue because, with the HTTP round trip, fetching single messages is too
|
23
|
-
# slow.
|
24
|
-
#
|
25
|
-
# We could fetch 10 at a time, but then we have to worry about stuffing them
|
26
|
-
# into a "cache", and pushing them back into SQS if we die or exit. We could,
|
27
|
-
# I guess, just let the "hold" on them expire, and then they would be picked
|
28
|
-
# up again. I wonder if that would be 'good enough'
|
29
19
|
def fetch
|
30
20
|
watchdog('Fetcher#fetch died') do
|
31
21
|
return if Sidekiq::Fetcher.done?
|
@@ -39,9 +29,7 @@ module Sidekiq
|
|
39
29
|
queues.pop # Last entry is TIMEOUT
|
40
30
|
|
41
31
|
msg = queues.inject(nil) do |message, queue|
|
42
|
-
|
43
|
-
|
44
|
-
Sidekiq.sqs.queues.named(queue).receive_message
|
32
|
+
message || Sidekiq.sqs.queues.named(queue).receive_message
|
45
33
|
end
|
46
34
|
|
47
35
|
if msg
|
data/lib/sidekiq-sqs/version.rb
CHANGED
data/sidekiq-sqs.gemspec
CHANGED
@@ -22,6 +22,8 @@ Gem::Specification.new do |gem|
|
|
22
22
|
gem.add_dependency 'aws-sdk', '~> 1.6.6'
|
23
23
|
|
24
24
|
gem.add_development_dependency 'rspec'
|
25
|
+
gem.add_development_dependency 'rb-fsevent', '~> 0.9.1'
|
25
26
|
gem.add_development_dependency 'guard'
|
26
27
|
gem.add_development_dependency 'guard-rspec'
|
28
|
+
gem.add_development_dependency 'mocha', '~> 0.12.3'
|
27
29
|
end
|
@@ -0,0 +1,45 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
class StubClient
|
4
|
+
def self.push(*args)
|
5
|
+
end
|
6
|
+
|
7
|
+
def self.push_bulk(*args)
|
8
|
+
end
|
9
|
+
|
10
|
+
def self.process_single(*args)
|
11
|
+
end
|
12
|
+
|
13
|
+
include Sidekiq::Sqs::Client
|
14
|
+
end
|
15
|
+
|
16
|
+
describe Sidekiq::Sqs::Client do
|
17
|
+
subject { StubClient }
|
18
|
+
|
19
|
+
describe ".process_single_with_sqs" do
|
20
|
+
it "base64 encodes and compresses the payload" do
|
21
|
+
subject.expects(:process_single_without_sqs).with(:worker_class, :item).returns([:item, "payload"])
|
22
|
+
|
23
|
+
subject.process_single_with_sqs(:worker_class, :item).should eq([:item, "eJwrSKzMyU9MAQAL3QLr\n"])
|
24
|
+
end
|
25
|
+
end
|
26
|
+
|
27
|
+
describe ".queue_or_create" do
|
28
|
+
let(:queue) { 'queue' }
|
29
|
+
let(:queues) { stub }
|
30
|
+
before { Sidekiq.stubs(sqs: stub(queues: queues)) }
|
31
|
+
|
32
|
+
it "returns the queue if it exists" do
|
33
|
+
queues.expects(:named).with(queue).returns(:queue)
|
34
|
+
|
35
|
+
subject.queue_or_create(queue).should eq(:queue)
|
36
|
+
end
|
37
|
+
|
38
|
+
it "creates the queue if it doesn't exists" do
|
39
|
+
queues.expects(:named).with(queue).raises(AWS::SQS::Errors::NonExistentQueue.new)
|
40
|
+
queues.expects(:create).with(queue).returns(:queue)
|
41
|
+
|
42
|
+
subject.queue_or_create(queue).should eq(:queue)
|
43
|
+
end
|
44
|
+
end
|
45
|
+
end
|
@@ -0,0 +1,25 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
class StubProcessor
|
4
|
+
def process(msg, queue)
|
5
|
+
end
|
6
|
+
|
7
|
+
include Sidekiq::Sqs::Processor
|
8
|
+
end
|
9
|
+
|
10
|
+
describe Sidekiq::Sqs::Processor do
|
11
|
+
subject { StubProcessor.new }
|
12
|
+
|
13
|
+
describe "#process_with_sqs" do
|
14
|
+
let(:body) { "eJxLTEo2NDIGAAbsAb0=\n" }
|
15
|
+
let(:message) { stub(body: body) }
|
16
|
+
let(:queue) { stub }
|
17
|
+
|
18
|
+
it "expands the message, delegates to the base class and deletes the message" do
|
19
|
+
subject.expects(:process_without_sqs).with('abc123', queue).returns(:processed)
|
20
|
+
message.expects(:delete)
|
21
|
+
|
22
|
+
subject.process(message, queue).should eq(:processed)
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
@@ -0,0 +1,25 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
class StubWorker
|
4
|
+
include Sidekiq::Sqs::Worker
|
5
|
+
end
|
6
|
+
|
7
|
+
describe Sidekiq::Sqs::Worker do
|
8
|
+
subject { StubWorker.new }
|
9
|
+
|
10
|
+
describe "#perform_async_bulk" do
|
11
|
+
it "formats the arguments" do
|
12
|
+
subject.expects(:client_push_bulk).with('class' => subject, 'args' => :args)
|
13
|
+
|
14
|
+
subject.perform_async_bulk(:args)
|
15
|
+
end
|
16
|
+
end
|
17
|
+
|
18
|
+
describe "#client_push_bulk" do
|
19
|
+
it "delegates to Client" do
|
20
|
+
Sidekiq::Client.expects(:push_bulk).with(:args)
|
21
|
+
|
22
|
+
subject.client_push_bulk(:args)
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
data/spec/spec_helper.rb
CHANGED
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: sidekiq-sqs
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.8
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2012-10-
|
12
|
+
date: 2012-10-09 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: activesupport
|
@@ -75,6 +75,22 @@ dependencies:
|
|
75
75
|
- - ! '>='
|
76
76
|
- !ruby/object:Gem::Version
|
77
77
|
version: '0'
|
78
|
+
- !ruby/object:Gem::Dependency
|
79
|
+
name: rb-fsevent
|
80
|
+
requirement: !ruby/object:Gem::Requirement
|
81
|
+
none: false
|
82
|
+
requirements:
|
83
|
+
- - ~>
|
84
|
+
- !ruby/object:Gem::Version
|
85
|
+
version: 0.9.1
|
86
|
+
type: :development
|
87
|
+
prerelease: false
|
88
|
+
version_requirements: !ruby/object:Gem::Requirement
|
89
|
+
none: false
|
90
|
+
requirements:
|
91
|
+
- - ~>
|
92
|
+
- !ruby/object:Gem::Version
|
93
|
+
version: 0.9.1
|
78
94
|
- !ruby/object:Gem::Dependency
|
79
95
|
name: guard
|
80
96
|
requirement: !ruby/object:Gem::Requirement
|
@@ -107,6 +123,22 @@ dependencies:
|
|
107
123
|
- - ! '>='
|
108
124
|
- !ruby/object:Gem::Version
|
109
125
|
version: '0'
|
126
|
+
- !ruby/object:Gem::Dependency
|
127
|
+
name: mocha
|
128
|
+
requirement: !ruby/object:Gem::Requirement
|
129
|
+
none: false
|
130
|
+
requirements:
|
131
|
+
- - ~>
|
132
|
+
- !ruby/object:Gem::Version
|
133
|
+
version: 0.12.3
|
134
|
+
type: :development
|
135
|
+
prerelease: false
|
136
|
+
version_requirements: !ruby/object:Gem::Requirement
|
137
|
+
none: false
|
138
|
+
requirements:
|
139
|
+
- - ~>
|
140
|
+
- !ruby/object:Gem::Version
|
141
|
+
version: 0.12.3
|
110
142
|
description: SQS backed job store for Sidekiq. Redis is still used for stats/job worker
|
111
143
|
tracking
|
112
144
|
email:
|
@@ -130,7 +162,9 @@ files:
|
|
130
162
|
- lib/sidekiq-sqs/worker.rb
|
131
163
|
- lib/top_level.rb
|
132
164
|
- sidekiq-sqs.gemspec
|
133
|
-
- spec/sidekiq-sqs/
|
165
|
+
- spec/sidekiq-sqs/client_spec.rb
|
166
|
+
- spec/sidekiq-sqs/processor_spec.rb
|
167
|
+
- spec/sidekiq-sqs/worker_spec.rb
|
134
168
|
- spec/spec_helper.rb
|
135
169
|
homepage: http://github.com/jmoses/sidekiq-sqs
|
136
170
|
licenses: []
|
@@ -157,5 +191,7 @@ signing_key:
|
|
157
191
|
specification_version: 3
|
158
192
|
summary: SQS backed job store for Sidekiq
|
159
193
|
test_files:
|
160
|
-
- spec/sidekiq-sqs/
|
194
|
+
- spec/sidekiq-sqs/client_spec.rb
|
195
|
+
- spec/sidekiq-sqs/processor_spec.rb
|
196
|
+
- spec/sidekiq-sqs/worker_spec.rb
|
161
197
|
- spec/spec_helper.rb
|
@@ -1,26 +0,0 @@
|
|
1
|
-
require 'spec_helper'
|
2
|
-
|
3
|
-
describe Sidekiq::Sqs::Middleware::Compression do
|
4
|
-
context "Server" do
|
5
|
-
subject { Sidekiq::Sqs::Middleware::Compression::Server.new }
|
6
|
-
let(:message) { stub(body: "eJzLTS0uTkxPBQALwQLm\n") }
|
7
|
-
|
8
|
-
it "decompresses the message" do
|
9
|
-
subject.call(nil, message, nil)
|
10
|
-
|
11
|
-
message.body.should eq('message')
|
12
|
-
end
|
13
|
-
end
|
14
|
-
|
15
|
-
# context "Client" do
|
16
|
-
# subject { Sidekiq::Sqs::Middleware::Compression::Client.new }
|
17
|
-
# let(:message) { 'message' }
|
18
|
-
#
|
19
|
-
# it "compresses the message and yields" do
|
20
|
-
# expect {|b| subject.call(nil, message, :queue, &b) }.to yield_control
|
21
|
-
#
|
22
|
-
# message.should eq(Base64.encode64(Zlib::Deflate.deflate('message')))
|
23
|
-
# end
|
24
|
-
# end
|
25
|
-
end
|
26
|
-
|