sidekiq-limit_fetch 2.4.2 → 3.0.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 +4 -4
- data/.gitignore +1 -0
- data/.rspec +1 -0
- data/Gemfile +1 -1
- data/README.md +7 -1
- data/lib/sidekiq/extensions/manager.rb +16 -0
- data/lib/sidekiq/extensions/queue.rb +1 -1
- data/lib/sidekiq/limit_fetch/global/monitor.rb +8 -8
- data/lib/sidekiq/limit_fetch/global/semaphore.rb +11 -3
- data/lib/sidekiq/limit_fetch/{singleton.rb → instances.rb} +1 -1
- data/lib/sidekiq/limit_fetch/queues.rb +73 -64
- data/lib/sidekiq/limit_fetch.rb +15 -32
- data/sidekiq-limit_fetch.gemspec +4 -4
- data/spec/sidekiq/extensions/queue_spec.rb +0 -2
- data/spec/sidekiq/limit_fetch/global/monitor_spec.rb +3 -13
- data/spec/sidekiq/limit_fetch/queues_spec.rb +3 -6
- data/spec/sidekiq/limit_fetch/semaphore_spec.rb +0 -2
- data/spec/sidekiq/limit_fetch_spec.rb +4 -3
- data/spec/spec_helper.rb +1 -3
- metadata +11 -16
- data/lib/sidekiq/limit_fetch/redis.rb +0 -35
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 76501c38471c02fe380102202fbd2afb9799976e
|
4
|
+
data.tar.gz: 20d1ed4d5d36ca62b7dcff40e09842378ba1d3a1
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: b14c94fad7ef434afc4b16e58f3517a426bf1f95f31aac2b12b279e4f72e70ebb11746b58ca1873d582a32568c5d27cc6fe05daf28f5a3e0f299361f7ebdc015
|
7
|
+
data.tar.gz: 030fe7be744ff109d6ff17740e71576f9011f432255ce00ab5423dcd5486e75d2a76cf9e0c06825f5fbc962aab6fbe6a4d3a4e46931698006e3e9e39467ae3c7
|
data/.gitignore
CHANGED
data/.rspec
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
--require spec_helper --color
|
data/Gemfile
CHANGED
data/README.md
CHANGED
@@ -18,7 +18,10 @@ Add this line to your application's Gemfile:
|
|
18
18
|
|
19
19
|
redis 2.6 or newer
|
20
20
|
|
21
|
-
**Important note:** At this moment, `sidekiq-limit_fetch` is incompatible with
|
21
|
+
**Important note:** At this moment, `sidekiq-limit_fetch` is incompatible with
|
22
|
+
- sidekiq pro's `reliable_fetch`
|
23
|
+
- `sidekiq-rate-limiter`
|
24
|
+
- any other plugin that rewrites fetch strategy of sidekiq.
|
22
25
|
|
23
26
|
https://github.com/mperham/sidekiq/issues/1508 — a sidekiq admin busy page is unreliable, so if you need to check how many workers are running a queue use a `#busy` method described below.
|
24
27
|
|
@@ -146,6 +149,9 @@ To use this mode you need to specify a following line in sidekiq.yml:
|
|
146
149
|
|
147
150
|
Dynamic queues will be ran at the lowest priority.
|
148
151
|
|
152
|
+
### Maintenance
|
153
|
+
|
154
|
+
If you use ```flushdb```, restart the sidekiq process to re-populate the dynamic configuration.
|
149
155
|
|
150
156
|
### Thanks
|
151
157
|
|
@@ -0,0 +1,16 @@
|
|
1
|
+
class Sidekiq::Manager
|
2
|
+
module InitLimitFetch
|
3
|
+
def initialize(options={})
|
4
|
+
options[:fetch] = Sidekiq::LimitFetch
|
5
|
+
super
|
6
|
+
end
|
7
|
+
|
8
|
+
def start
|
9
|
+
Sidekiq::LimitFetch::Queues.start options
|
10
|
+
Global::Monitor.start!
|
11
|
+
super
|
12
|
+
end
|
13
|
+
end
|
14
|
+
|
15
|
+
prepend InitLimitFetch
|
16
|
+
end
|
@@ -1,6 +1,5 @@
|
|
1
1
|
module Sidekiq::LimitFetch::Global
|
2
2
|
module Monitor
|
3
|
-
include Sidekiq::LimitFetch::Redis
|
4
3
|
extend self
|
5
4
|
|
6
5
|
HEARTBEAT_PREFIX = 'limit:heartbeat:'
|
@@ -8,10 +7,10 @@ module Sidekiq::LimitFetch::Global
|
|
8
7
|
HEARTBEAT_TTL = 20
|
9
8
|
REFRESH_TIMEOUT = 5
|
10
9
|
|
11
|
-
def start!(
|
10
|
+
def start!(ttl=HEARTBEAT_TTL, timeout=REFRESH_TIMEOUT)
|
12
11
|
Thread.new do
|
13
12
|
loop do
|
14
|
-
|
13
|
+
add_dynamic_queues
|
15
14
|
update_heartbeat ttl
|
16
15
|
invalidate_old_processes
|
17
16
|
sleep timeout
|
@@ -20,23 +19,24 @@ module Sidekiq::LimitFetch::Global
|
|
20
19
|
end
|
21
20
|
|
22
21
|
def all_processes
|
23
|
-
redis {|it| it.smembers PROCESS_SET }
|
22
|
+
Sidekiq.redis {|it| it.smembers PROCESS_SET }
|
24
23
|
end
|
25
24
|
|
26
25
|
def old_processes
|
27
26
|
all_processes.reject do |process|
|
28
|
-
redis {|it| it.get heartbeat_key process }
|
27
|
+
Sidekiq.redis {|it| it.get heartbeat_key process }
|
29
28
|
end
|
30
29
|
end
|
31
30
|
|
32
31
|
def remove_old_processes!
|
33
|
-
redis do |it|
|
32
|
+
Sidekiq.redis do |it|
|
34
33
|
old_processes.each {|process| it.srem PROCESS_SET, process }
|
35
34
|
end
|
36
35
|
end
|
37
36
|
|
38
|
-
def
|
39
|
-
queues
|
37
|
+
def add_dynamic_queues
|
38
|
+
queues = Sidekiq::LimitFetch::Queues
|
39
|
+
queues.add Sidekiq::Queue.all.map(&:name) if queues.dynamic?
|
40
40
|
end
|
41
41
|
|
42
42
|
private
|
@@ -1,7 +1,5 @@
|
|
1
1
|
module Sidekiq::LimitFetch::Global
|
2
2
|
class Semaphore
|
3
|
-
include Sidekiq::LimitFetch::Redis
|
4
|
-
|
5
3
|
PREFIX = 'limit_fetch'
|
6
4
|
|
7
5
|
attr_reader :local_busy
|
@@ -45,7 +43,7 @@ module Sidekiq::LimitFetch::Global
|
|
45
43
|
end
|
46
44
|
|
47
45
|
def acquire
|
48
|
-
Selector.acquire([@name],
|
46
|
+
Selector.acquire([@name], namespace).size > 0
|
49
47
|
end
|
50
48
|
|
51
49
|
def release
|
@@ -163,5 +161,15 @@ module Sidekiq::LimitFetch::Global
|
|
163
161
|
it.lrem "#{PREFIX}:busy:#@name", 0, process
|
164
162
|
end
|
165
163
|
end
|
164
|
+
|
165
|
+
private
|
166
|
+
|
167
|
+
def redis(&block)
|
168
|
+
Sidekiq.redis(&block)
|
169
|
+
end
|
170
|
+
|
171
|
+
def namespace
|
172
|
+
Sidekiq::LimitFetch::Queues.namespace
|
173
|
+
end
|
166
174
|
end
|
167
175
|
end
|
@@ -1,88 +1,97 @@
|
|
1
|
-
|
2
|
-
|
3
|
-
THREAD_KEY = :acquired_queues
|
1
|
+
module Sidekiq::LimitFetch::Queues
|
2
|
+
extend self
|
4
3
|
|
5
|
-
|
6
|
-
@queues = options[:queues]
|
7
|
-
@namespace = options[:namespace]
|
8
|
-
@dynamic = options[:dynamic]
|
4
|
+
THREAD_KEY = :acquired_queues
|
9
5
|
|
10
|
-
|
6
|
+
def start(options)
|
7
|
+
@queues = options[:queues]
|
8
|
+
@dynamic = options[:dynamic]
|
11
9
|
|
12
|
-
|
13
|
-
set :limit, options[:limits]
|
14
|
-
set_blocks options[:blocking]
|
15
|
-
end
|
10
|
+
options[:strict] ? strict_order! : weighted_order!
|
16
11
|
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
end
|
12
|
+
set :process_limit, options[:process_limits]
|
13
|
+
set :limit, options[:limits]
|
14
|
+
set_blocks options[:blocking]
|
15
|
+
end
|
22
16
|
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
17
|
+
def acquire
|
18
|
+
selector.acquire(ordered_queues, namespace)
|
19
|
+
.tap {|it| save it }
|
20
|
+
.map {|it| "queue:#{it}" }
|
21
|
+
end
|
28
22
|
|
29
|
-
|
30
|
-
|
31
|
-
|
23
|
+
def release_except(full_name)
|
24
|
+
queues = restore
|
25
|
+
queues.delete full_name[/queue:(.*)/, 1] if full_name
|
26
|
+
selector.release queues, namespace
|
27
|
+
end
|
32
28
|
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
end
|
37
|
-
end
|
29
|
+
def dynamic?
|
30
|
+
@dynamic
|
31
|
+
end
|
38
32
|
|
39
|
-
|
40
|
-
|
41
|
-
|
33
|
+
def add(queues)
|
34
|
+
queues.each do |queue|
|
35
|
+
@queues.push queue unless @queues.include? queue
|
42
36
|
end
|
37
|
+
end
|
43
38
|
|
44
|
-
|
45
|
-
|
46
|
-
end
|
39
|
+
def strict_order!
|
40
|
+
@queues.uniq!
|
41
|
+
def ordered_queues; @queues end
|
42
|
+
end
|
47
43
|
|
48
|
-
|
44
|
+
def weighted_order!
|
45
|
+
def ordered_queues; @queues.shuffle.uniq end
|
46
|
+
end
|
49
47
|
|
50
|
-
|
51
|
-
|
48
|
+
def namespace
|
49
|
+
@namespace ||= Sidekiq.redis do |it|
|
50
|
+
if it.respond_to?(:namespace) and it.namespace
|
51
|
+
it.namespace + ':'
|
52
|
+
else
|
53
|
+
''
|
54
|
+
end
|
52
55
|
end
|
56
|
+
end
|
53
57
|
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
|
58
|
+
private
|
59
|
+
|
60
|
+
def selector
|
61
|
+
Sidekiq::LimitFetch::Global::Selector
|
62
|
+
end
|
63
|
+
|
64
|
+
def set(limit_type, limits)
|
65
|
+
limits ||= {}
|
66
|
+
each_queue do |queue|
|
67
|
+
limit = limits[queue.name.to_s] || limits[queue.name.to_sym]
|
68
|
+
queue.send "#{limit_type}=", limit unless queue.limit_changed?
|
60
69
|
end
|
70
|
+
end
|
61
71
|
|
62
|
-
|
63
|
-
|
72
|
+
def set_blocks(blocks)
|
73
|
+
each_queue(&:unblock)
|
64
74
|
|
65
|
-
|
66
|
-
|
67
|
-
|
68
|
-
|
69
|
-
|
70
|
-
end
|
75
|
+
blocks.to_a.each do |it|
|
76
|
+
if it.is_a? Array
|
77
|
+
it.each {|name| Sidekiq::Queue[name].block_except it }
|
78
|
+
else
|
79
|
+
Sidekiq::Queue[it].block
|
71
80
|
end
|
72
81
|
end
|
82
|
+
end
|
73
83
|
|
74
|
-
|
75
|
-
|
76
|
-
|
84
|
+
def save(queues)
|
85
|
+
Thread.current[THREAD_KEY] = queues
|
86
|
+
end
|
77
87
|
|
78
|
-
|
79
|
-
|
80
|
-
|
81
|
-
|
82
|
-
|
88
|
+
def restore
|
89
|
+
Thread.current[THREAD_KEY] || []
|
90
|
+
ensure
|
91
|
+
Thread.current[THREAD_KEY] = nil
|
92
|
+
end
|
83
93
|
|
84
|
-
|
85
|
-
|
86
|
-
end
|
94
|
+
def each_queue
|
95
|
+
@queues.uniq.each {|it| yield Sidekiq::Queue[it] }
|
87
96
|
end
|
88
97
|
end
|
data/lib/sidekiq/limit_fetch.rb
CHANGED
@@ -1,56 +1,39 @@
|
|
1
|
+
require 'forwardable'
|
1
2
|
require 'sidekiq'
|
2
|
-
require 'sidekiq/
|
3
|
+
require 'sidekiq/manager'
|
3
4
|
require 'sidekiq/api'
|
4
|
-
require 'forwardable'
|
5
5
|
|
6
|
-
|
6
|
+
module Sidekiq::LimitFetch
|
7
7
|
autoload :UnitOfWork, 'sidekiq/limit_fetch/unit_of_work'
|
8
8
|
|
9
|
-
require_relative 'limit_fetch/
|
10
|
-
require_relative 'limit_fetch/singleton'
|
9
|
+
require_relative 'limit_fetch/instances'
|
11
10
|
require_relative 'limit_fetch/queues'
|
12
11
|
require_relative 'limit_fetch/global/semaphore'
|
13
12
|
require_relative 'limit_fetch/global/selector'
|
14
13
|
require_relative 'limit_fetch/global/monitor'
|
15
14
|
require_relative 'extensions/queue'
|
15
|
+
require_relative 'extensions/manager'
|
16
16
|
|
17
|
-
|
18
|
-
Sidekiq.options[:fetch] = self
|
19
|
-
|
20
|
-
def self.bulk_requeue(*args)
|
21
|
-
Sidekiq::BasicFetch.bulk_requeue *args
|
22
|
-
end
|
17
|
+
extend self
|
23
18
|
|
24
|
-
def
|
25
|
-
|
26
|
-
Global::Monitor.start! @queues
|
19
|
+
def new(_)
|
20
|
+
self
|
27
21
|
end
|
28
22
|
|
29
23
|
def retrieve_work
|
30
|
-
queue, message =
|
24
|
+
queue, message = redis_brpop *Queues.acquire, Sidekiq::BasicFetch::TIMEOUT
|
25
|
+
Queues.release_except queue
|
31
26
|
UnitOfWork.new queue, message if message
|
32
27
|
end
|
33
28
|
|
34
|
-
|
35
|
-
|
36
|
-
def fetch_message
|
37
|
-
queue, _ = redis_brpop *@queues.acquire, Sidekiq::Fetcher::TIMEOUT
|
38
|
-
ensure
|
39
|
-
@queues.release_except queue
|
29
|
+
def bulk_requeue(*args)
|
30
|
+
Sidekiq::BasicFetch.bulk_requeue(*args)
|
40
31
|
end
|
41
32
|
|
33
|
+
private
|
34
|
+
|
42
35
|
def redis_brpop(*args)
|
43
36
|
return if args.size < 2
|
44
|
-
|
45
|
-
|
46
|
-
if busy_local_queues.any? {|queue| not args.include? queue.rname }
|
47
|
-
nonblocking_redis(&query)
|
48
|
-
else
|
49
|
-
redis(&query)
|
50
|
-
end
|
51
|
-
end
|
52
|
-
|
53
|
-
def busy_local_queues
|
54
|
-
Sidekiq::Queue.instances.select(&:local_busy?)
|
37
|
+
Sidekiq.redis {|it| it.brpop *args }
|
55
38
|
end
|
56
39
|
end
|
data/sidekiq-limit_fetch.gemspec
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
Gem::Specification.new do |gem|
|
2
2
|
gem.name = 'sidekiq-limit_fetch'
|
3
|
-
gem.version = '
|
3
|
+
gem.version = '3.0.0'
|
4
4
|
gem.license = 'MIT'
|
5
5
|
gem.authors = 'brainopia'
|
6
6
|
gem.email = 'brainopia@evilmartians.com'
|
@@ -13,9 +13,9 @@ Gem::Specification.new do |gem|
|
|
13
13
|
|
14
14
|
gem.files = `git ls-files`.split($/)
|
15
15
|
gem.test_files = gem.files.grep %r{^spec/}
|
16
|
-
gem.require_paths =
|
16
|
+
gem.require_paths = 'lib'
|
17
17
|
|
18
|
-
gem.add_dependency 'sidekiq', '>=
|
19
|
-
gem.add_development_dependency 'rspec'
|
18
|
+
gem.add_dependency 'sidekiq', '>= 4'
|
19
|
+
gem.add_development_dependency 'rspec'
|
20
20
|
gem.add_development_dependency 'rake'
|
21
21
|
end
|
@@ -1,21 +1,11 @@
|
|
1
|
-
require 'spec_helper'
|
2
|
-
|
3
|
-
Thread.abort_on_exception = true
|
4
|
-
|
5
1
|
RSpec.describe Sidekiq::LimitFetch::Global::Monitor do
|
6
|
-
let(:
|
7
|
-
let(:monitor) { described_class.start! queues, ttl, timeout }
|
2
|
+
let(:monitor) { described_class.start! ttl, timeout }
|
8
3
|
let(:ttl) { 1 }
|
9
4
|
let(:queue) { Sidekiq::Queue[name] }
|
10
5
|
let(:name) { 'default' }
|
11
6
|
|
12
|
-
before
|
13
|
-
|
14
|
-
end
|
15
|
-
|
16
|
-
after :each do
|
17
|
-
monitor.kill
|
18
|
-
end
|
7
|
+
before { monitor }
|
8
|
+
after { monitor.kill }
|
19
9
|
|
20
10
|
context 'old locks' do
|
21
11
|
let(:timeout) { 0.5 }
|
@@ -1,8 +1,4 @@
|
|
1
|
-
require 'spec_helper'
|
2
|
-
|
3
1
|
RSpec.describe Sidekiq::LimitFetch::Queues do
|
4
|
-
subject { described_class.new options }
|
5
|
-
|
6
2
|
let(:queues) { %w[queue1 queue2] }
|
7
3
|
let(:limits) {{ 'queue1' => 3 }}
|
8
4
|
let(:strict) { true }
|
@@ -14,10 +10,11 @@ RSpec.describe Sidekiq::LimitFetch::Queues do
|
|
14
10
|
limits: limits,
|
15
11
|
strict: strict,
|
16
12
|
blocking: blocking,
|
17
|
-
process_limits: process_limits
|
18
|
-
namespace: Sidekiq::LimitFetch::Redis.determine_namespace }
|
13
|
+
process_limits: process_limits }
|
19
14
|
end
|
20
15
|
|
16
|
+
before { subject.start options }
|
17
|
+
|
21
18
|
it 'should acquire queues' do
|
22
19
|
subject.acquire
|
23
20
|
expect(Sidekiq::Queue['queue1'].probed).to eq 1
|
@@ -1,7 +1,7 @@
|
|
1
|
-
|
1
|
+
Thread.abort_on_exception = true
|
2
2
|
|
3
3
|
RSpec.describe Sidekiq::LimitFetch do
|
4
|
-
before
|
4
|
+
before do
|
5
5
|
Sidekiq.redis do |it|
|
6
6
|
it.del 'queue:queue1'
|
7
7
|
it.lpush 'queue:queue1', 'task1'
|
@@ -10,11 +10,12 @@ RSpec.describe Sidekiq::LimitFetch do
|
|
10
10
|
end
|
11
11
|
end
|
12
12
|
|
13
|
-
subject { described_class.new options }
|
14
13
|
let(:options) {{ queues: queues, limits: limits }}
|
15
14
|
let(:queues) { %w(queue1 queue1 queue2 queue2) }
|
16
15
|
let(:limits) {{ 'queue1' => 1, 'queue2' => 2 }}
|
17
16
|
|
17
|
+
before { subject::Queues.start options }
|
18
|
+
|
18
19
|
it 'should acquire lock on queue for execution' do
|
19
20
|
work = subject.retrieve_work
|
20
21
|
expect(work.queue_name).to eq 'queue1'
|
data/spec/spec_helper.rb
CHANGED
@@ -1,6 +1,4 @@
|
|
1
1
|
require 'sidekiq/limit_fetch'
|
2
|
-
require 'celluloid/autostart'
|
3
|
-
require 'sidekiq/fetch'
|
4
2
|
|
5
3
|
Sidekiq.logger = nil
|
6
4
|
Sidekiq.redis = { namespace: ENV['namespace'] }
|
@@ -9,7 +7,7 @@ RSpec.configure do |config|
|
|
9
7
|
config.order = :random
|
10
8
|
config.disable_monkey_patching!
|
11
9
|
config.raise_errors_for_deprecations!
|
12
|
-
config.before
|
10
|
+
config.before do
|
13
11
|
Sidekiq::Queue.reset_instances!
|
14
12
|
Sidekiq.redis do |it|
|
15
13
|
clean_redis = ->(queue) do
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: sidekiq-limit_fetch
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version:
|
4
|
+
version: 3.0.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- brainopia
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2015-
|
11
|
+
date: 2015-10-14 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: sidekiq
|
@@ -16,34 +16,28 @@ dependencies:
|
|
16
16
|
requirements:
|
17
17
|
- - ">="
|
18
18
|
- !ruby/object:Gem::Version
|
19
|
-
version:
|
20
|
-
- - "<"
|
21
|
-
- !ruby/object:Gem::Version
|
22
|
-
version: '4.0'
|
19
|
+
version: '4'
|
23
20
|
type: :runtime
|
24
21
|
prerelease: false
|
25
22
|
version_requirements: !ruby/object:Gem::Requirement
|
26
23
|
requirements:
|
27
24
|
- - ">="
|
28
25
|
- !ruby/object:Gem::Version
|
29
|
-
version:
|
30
|
-
- - "<"
|
31
|
-
- !ruby/object:Gem::Version
|
32
|
-
version: '4.0'
|
26
|
+
version: '4'
|
33
27
|
- !ruby/object:Gem::Dependency
|
34
28
|
name: rspec
|
35
29
|
requirement: !ruby/object:Gem::Requirement
|
36
30
|
requirements:
|
37
|
-
- - "
|
31
|
+
- - ">="
|
38
32
|
- !ruby/object:Gem::Version
|
39
|
-
version:
|
33
|
+
version: '0'
|
40
34
|
type: :development
|
41
35
|
prerelease: false
|
42
36
|
version_requirements: !ruby/object:Gem::Requirement
|
43
37
|
requirements:
|
44
|
-
- - "
|
38
|
+
- - ">="
|
45
39
|
- !ruby/object:Gem::Version
|
46
|
-
version:
|
40
|
+
version: '0'
|
47
41
|
- !ruby/object:Gem::Dependency
|
48
42
|
name: rake
|
49
43
|
requirement: !ruby/object:Gem::Requirement
|
@@ -67,6 +61,7 @@ extensions: []
|
|
67
61
|
extra_rdoc_files: []
|
68
62
|
files:
|
69
63
|
- ".gitignore"
|
64
|
+
- ".rspec"
|
70
65
|
- ".travis.yml"
|
71
66
|
- Gemfile
|
72
67
|
- LICENSE.txt
|
@@ -86,14 +81,14 @@ files:
|
|
86
81
|
- demo/config/environment.rb
|
87
82
|
- demo/config/environments/development.rb
|
88
83
|
- lib/sidekiq-limit_fetch.rb
|
84
|
+
- lib/sidekiq/extensions/manager.rb
|
89
85
|
- lib/sidekiq/extensions/queue.rb
|
90
86
|
- lib/sidekiq/limit_fetch.rb
|
91
87
|
- lib/sidekiq/limit_fetch/global/monitor.rb
|
92
88
|
- lib/sidekiq/limit_fetch/global/selector.rb
|
93
89
|
- lib/sidekiq/limit_fetch/global/semaphore.rb
|
90
|
+
- lib/sidekiq/limit_fetch/instances.rb
|
94
91
|
- lib/sidekiq/limit_fetch/queues.rb
|
95
|
-
- lib/sidekiq/limit_fetch/redis.rb
|
96
|
-
- lib/sidekiq/limit_fetch/singleton.rb
|
97
92
|
- lib/sidekiq/limit_fetch/unit_of_work.rb
|
98
93
|
- sidekiq-limit_fetch.gemspec
|
99
94
|
- spec/sidekiq/extensions/queue_spec.rb
|
@@ -1,35 +0,0 @@
|
|
1
|
-
module Sidekiq::LimitFetch::Redis
|
2
|
-
extend self
|
3
|
-
|
4
|
-
def nonblocking_redis
|
5
|
-
redis do |redis|
|
6
|
-
# Celluloid 0.16 broke this method
|
7
|
-
if Celluloid::VERSION.to_f >= 0.16
|
8
|
-
yield redis
|
9
|
-
else
|
10
|
-
# prevent blocking of fetcher
|
11
|
-
# more bullet-proof and faster (O_O)
|
12
|
-
# than using Celluloid::IO
|
13
|
-
#
|
14
|
-
# https://github.com/brainopia/sidekiq-limit_fetch/issues/41
|
15
|
-
# explanation of why Future#value is beneficial here
|
16
|
-
begin
|
17
|
-
Celluloid::Future.new { yield redis }.value
|
18
|
-
rescue Celluloid::Task::TerminatedError
|
19
|
-
end
|
20
|
-
end
|
21
|
-
end
|
22
|
-
end
|
23
|
-
|
24
|
-
def redis
|
25
|
-
Sidekiq.redis {|it| yield it }
|
26
|
-
end
|
27
|
-
|
28
|
-
def determine_namespace
|
29
|
-
redis do |it|
|
30
|
-
if it.respond_to?(:namespace) and it.namespace
|
31
|
-
it.namespace + ':'
|
32
|
-
end
|
33
|
-
end
|
34
|
-
end
|
35
|
-
end
|