sidekiq-limit_fetch 4.0.0 → 4.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 +4 -4
- data/.github/workflows/ci.yml +2 -2
- data/Appraisals +4 -12
- data/CHANGELOG.md +22 -0
- data/LICENSE +22 -0
- data/README.md +40 -36
- data/gemfiles/sidekiq_6.0.gemfile.lock +4 -4
- data/gemfiles/sidekiq_6.1.gemfile.lock +4 -4
- data/gemfiles/sidekiq_6.2.gemfile.lock +5 -5
- data/gemfiles/sidekiq_6.3.gemfile.lock +4 -4
- data/gemfiles/sidekiq_6.4.gemfile.lock +5 -5
- data/gemfiles/{sidekiq_5.2.gemfile → sidekiq_6.5.gemfile} +1 -1
- data/gemfiles/{sidekiq_5.2.gemfile.lock → sidekiq_6.5.gemfile.lock} +9 -12
- data/gemfiles/sidekiq_master.gemfile.lock +6 -6
- data/lib/sidekiq/extensions/manager.rb +2 -1
- data/lib/sidekiq/limit_fetch/queues.rb +12 -6
- data/lib/sidekiq/limit_fetch/unit_of_work.rb +9 -1
- data/lib/sidekiq/limit_fetch.rb +21 -3
- data/sidekiq-limit_fetch.gemspec +5 -1
- data/spec/sidekiq/limit_fetch/queues_spec.rb +23 -12
- data/spec/sidekiq/limit_fetch_spec.rb +1 -1
- metadata +11 -11
- data/LICENSE.txt +0 -22
- data/gemfiles/sidekiq_5.0.gemfile +0 -7
- data/gemfiles/sidekiq_5.0.gemfile.lock +0 -57
- data/gemfiles/sidekiq_5.1.gemfile +0 -7
- data/gemfiles/sidekiq_5.1.gemfile.lock +0 -57
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 1e1c022a896ec81cb597f174e844fae80fc2c3c642fbf0872d87c00b0651a378
|
4
|
+
data.tar.gz: b80c13c01232fac37df35c85353974eed389d353fd84c842d368e844a350a8b9
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 2c4e5565fff18225cf65f1ef86ace76375fa7c36cd895a132e19ad06d02ba50e3cecfc34d961fa9183374257895b3fb49300d7cda7eeb9bd8875b2e0baac6cc1
|
7
|
+
data.tar.gz: 550341eeafa2a83bc5236223148ca0ffcab8774f4ebcf6832386d7fe0a07e6f7176c5feb8e3c79db333ee5aed6fedf6f6a16124b39e45aab83ded720922e071a
|
data/.github/workflows/ci.yml
CHANGED
@@ -14,8 +14,8 @@ jobs:
|
|
14
14
|
strategy:
|
15
15
|
fail-fast: false
|
16
16
|
matrix:
|
17
|
-
ruby: ["2.
|
18
|
-
appraisal: ['
|
17
|
+
ruby: ["2.7", "3.0", "3.1"]
|
18
|
+
appraisal: ['6.0', '6.1', '6.2', '6.3', '6.4', '6.5', 'master']
|
19
19
|
services:
|
20
20
|
redis:
|
21
21
|
image: redis
|
data/Appraisals
CHANGED
@@ -1,15 +1,3 @@
|
|
1
|
-
appraise 'sidekiq-5.0' do
|
2
|
-
gem 'sidekiq', '~> 5.0.0'
|
3
|
-
end
|
4
|
-
|
5
|
-
appraise 'sidekiq-5.1' do
|
6
|
-
gem 'sidekiq', '~> 5.1.0'
|
7
|
-
end
|
8
|
-
|
9
|
-
appraise 'sidekiq-5.2' do
|
10
|
-
gem 'sidekiq', '~> 5.2.0'
|
11
|
-
end
|
12
|
-
|
13
1
|
appraise 'sidekiq-6.0' do
|
14
2
|
gem 'sidekiq', '~> 6.0.0'
|
15
3
|
end
|
@@ -30,6 +18,10 @@ appraise 'sidekiq-6.4' do
|
|
30
18
|
gem 'sidekiq', '~> 6.4.0'
|
31
19
|
end
|
32
20
|
|
21
|
+
appraise 'sidekiq-6.5' do
|
22
|
+
gem 'sidekiq', '~> 6.5.0'
|
23
|
+
end
|
24
|
+
|
33
25
|
appraise 'sidekiq-master' do
|
34
26
|
gem 'sidekiq', github: 'mperham/sidekiq'
|
35
27
|
end
|
data/CHANGELOG.md
ADDED
@@ -0,0 +1,22 @@
|
|
1
|
+
# Changelog
|
2
|
+
|
3
|
+
## [4.3.0] - 2022-08-16
|
4
|
+
|
5
|
+
- #135 - Some extra fixes for Sidekiq 6.5 (fixes #128, #130, #131) from [@BobbyMcWho](https://github.com/BobbyMcWho)
|
6
|
+
|
7
|
+
## [4.2.0] - 2022-06-09
|
8
|
+
|
9
|
+
- #127 - Fix for Sidekiq 6.5 internal change vias PR #128 from [@evgeniradev][https://github.com/evgeniradev]
|
10
|
+
- testing changes: stop supporting Sidekiq < 6, add tests for Sidekiq 6.5, stop testing on ruby 2.6 EOL
|
11
|
+
|
12
|
+
## [4.1.0] - 2022-03-29
|
13
|
+
|
14
|
+
- #101 - Fix stuck queues bug on Redis restart from [@907th](https://github.com/907th).
|
15
|
+
|
16
|
+
## [4.0.0] - 2022-03-26
|
17
|
+
|
18
|
+
This project was taken over by [@deanpcmad](https://github.com/deanpcmad)
|
19
|
+
|
20
|
+
- #120 - Migrate CI to GitHub Actions from [@petergoldstein](https://github.com/petergoldstein).
|
21
|
+
- #124 - Fixed redis v4.6.0 pipelines deprecation warning from [@iurev](https://github.com/iurev).
|
22
|
+
- #83 - Processing dynamic queues from [@alexey-yanchenko](https://github.com/alexey-yanchenko).
|
data/LICENSE
ADDED
@@ -0,0 +1,22 @@
|
|
1
|
+
MIT License
|
2
|
+
|
3
|
+
Copyright (c) 2022 Dean Perry
|
4
|
+
Copyright (c) 2013 brainopia
|
5
|
+
|
6
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
7
|
+
of this software and associated documentation files (the "Software"), to deal
|
8
|
+
in the Software without restriction, including without limitation the rights
|
9
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
10
|
+
copies of the Software, and to permit persons to whom the Software is
|
11
|
+
furnished to do so, subject to the following conditions:
|
12
|
+
|
13
|
+
The above copyright notice and this permission notice shall be included in all
|
14
|
+
copies or substantial portions of the Software.
|
15
|
+
|
16
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
17
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
18
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
19
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
20
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
21
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
22
|
+
SOFTWARE.
|
data/README.md
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
## Description
|
2
2
|
|
3
|
-
*This project
|
3
|
+
*This project has been taken over by [@deanpcmad](https://github.com/deanpcmad)*
|
4
4
|
|
5
5
|
Sidekiq strategy to support a granular queue control – limiting, pausing, blocking, querying.
|
6
6
|
|
@@ -11,7 +11,11 @@ Sidekiq strategy to support a granular queue control – limiting, pausing, bloc
|
|
11
11
|
|
12
12
|
Add this line to your application's Gemfile:
|
13
13
|
|
14
|
-
|
14
|
+
```
|
15
|
+
gem 'sidekiq-limit_fetch'
|
16
|
+
```
|
17
|
+
|
18
|
+
Then `bundle install`.
|
15
19
|
|
16
20
|
### Limitations
|
17
21
|
|
@@ -31,19 +35,19 @@ To use this Gem in other Ruby projects, just add `require 'sidekiq-limit_fetch'`
|
|
31
35
|
Specify limits which you want to place on queues inside sidekiq.yml:
|
32
36
|
|
33
37
|
```yaml
|
34
|
-
|
35
|
-
|
36
|
-
|
38
|
+
:limits:
|
39
|
+
queue_name1: 5
|
40
|
+
queue_name2: 10
|
37
41
|
```
|
38
42
|
|
39
43
|
Or set it dynamically in your code:
|
40
44
|
```ruby
|
41
|
-
|
42
|
-
|
45
|
+
Sidekiq::Queue['queue_name1'].limit = 5
|
46
|
+
Sidekiq::Queue['queue_name2'].limit = 10
|
43
47
|
```
|
44
48
|
|
45
|
-
In these examples, tasks for the
|
46
|
-
workers at the same time and the
|
49
|
+
In these examples, tasks for the `queue_name1` will be run by at most 5
|
50
|
+
workers at the same time and the `queue_name2` will have no more than 10
|
47
51
|
workers simultaneously.
|
48
52
|
|
49
53
|
Ability to set limits dynamically allows you to resize worker
|
@@ -54,14 +58,14 @@ distribution among queues any time you want.
|
|
54
58
|
If you use multiple sidekiq processes then you can specify limits per process:
|
55
59
|
|
56
60
|
```yaml
|
57
|
-
|
58
|
-
|
61
|
+
:process_limits:
|
62
|
+
queue_name: 2
|
59
63
|
```
|
60
64
|
|
61
65
|
Or set it in your code:
|
62
66
|
|
63
67
|
```ruby
|
64
|
-
|
68
|
+
Sidekiq::Queue['queue_name'].process_limit = 2
|
65
69
|
```
|
66
70
|
|
67
71
|
### Busy workers by queue
|
@@ -69,7 +73,7 @@ Or set it in your code:
|
|
69
73
|
You can see how many workers currently handling a queue:
|
70
74
|
|
71
75
|
```ruby
|
72
|
-
|
76
|
+
Sidekiq::Queue['name'].busy # number of busy workers
|
73
77
|
```
|
74
78
|
|
75
79
|
### Pauses
|
@@ -78,10 +82,10 @@ You can also pause your queues temporarily. Upon continuing their limits
|
|
78
82
|
will be preserved.
|
79
83
|
|
80
84
|
```ruby
|
81
|
-
|
82
|
-
|
83
|
-
|
84
|
-
|
85
|
+
Sidekiq::Queue['name'].pause # prevents workers from running tasks from this queue
|
86
|
+
Sidekiq::Queue['name'].paused? # => true
|
87
|
+
Sidekiq::Queue['name'].unpause # allows workers to use the queue
|
88
|
+
Sidekiq::Queue['name'].pause_for_ms(1000) # will pause for a second
|
85
89
|
```
|
86
90
|
|
87
91
|
### Blocking queue mode
|
@@ -92,12 +96,12 @@ queue task is executing then no new task from lesser priority queues will
|
|
92
96
|
be ran. Eg,
|
93
97
|
|
94
98
|
```yaml
|
95
|
-
|
96
|
-
|
97
|
-
|
98
|
-
|
99
|
-
|
100
|
-
|
99
|
+
:queues:
|
100
|
+
- a
|
101
|
+
- b
|
102
|
+
- c
|
103
|
+
:blocking:
|
104
|
+
- b
|
101
105
|
```
|
102
106
|
|
103
107
|
In this case when a task for `b` queue is ran no new task from `c` queue
|
@@ -106,9 +110,9 @@ will be started.
|
|
106
110
|
You can also enable and disable blocking mode for queues on the fly:
|
107
111
|
|
108
112
|
```ruby
|
109
|
-
|
110
|
-
|
111
|
-
|
113
|
+
Sidekiq::Queue['name'].block
|
114
|
+
Sidekiq::Queue['name'].blocking? # => true
|
115
|
+
Sidekiq::Queue['name'].unblock
|
112
116
|
```
|
113
117
|
|
114
118
|
### Advanced blocking queues
|
@@ -118,13 +122,13 @@ running only queues higher and queues from their blocking group can
|
|
118
122
|
run. It will be easier to understand with an example:
|
119
123
|
|
120
124
|
```yaml
|
121
|
-
|
122
|
-
|
123
|
-
|
124
|
-
|
125
|
-
|
126
|
-
|
127
|
-
|
125
|
+
:queues:
|
126
|
+
- a
|
127
|
+
- b
|
128
|
+
- c
|
129
|
+
- d
|
130
|
+
:blocking:
|
131
|
+
- [b, c]
|
128
132
|
```
|
129
133
|
|
130
134
|
In this case tasks from `d` will be blocked when a task from queue `b` or `c` is executed.
|
@@ -132,7 +136,7 @@ In this case tasks from `d` will be blocked when a task from queue `b` or `c` is
|
|
132
136
|
You can dynamically set exceptions for queue blocking:
|
133
137
|
|
134
138
|
```ruby
|
135
|
-
|
139
|
+
Sidekiq::Queue['queue1'].block_except 'queue2'
|
136
140
|
```
|
137
141
|
|
138
142
|
### Dynamic queues
|
@@ -143,11 +147,11 @@ that have tasks pushed to them (usually with `Sidekiq::Client.push`)).
|
|
143
147
|
To use this mode you need to specify a following line in sidekiq.yml:
|
144
148
|
|
145
149
|
```yaml
|
146
|
-
|
150
|
+
:dynamic: true
|
147
151
|
```
|
148
152
|
|
149
153
|
Dynamic queues will be ran at the lowest priority.
|
150
154
|
|
151
155
|
### Maintenance
|
152
156
|
|
153
|
-
If you use
|
157
|
+
If you use `flushdb`, restart the sidekiq process to re-populate the dynamic configuration.
|
@@ -1,7 +1,7 @@
|
|
1
1
|
PATH
|
2
2
|
remote: ..
|
3
3
|
specs:
|
4
|
-
sidekiq-limit_fetch (3.
|
4
|
+
sidekiq-limit_fetch (4.3.0)
|
5
5
|
redis (>= 4.6.0)
|
6
6
|
sidekiq (>= 4)
|
7
7
|
|
@@ -14,7 +14,7 @@ GEM
|
|
14
14
|
thor (>= 0.14.0)
|
15
15
|
connection_pool (2.2.5)
|
16
16
|
diff-lcs (1.5.0)
|
17
|
-
rack (2.2.3)
|
17
|
+
rack (2.2.3.1)
|
18
18
|
rack-protection (2.2.0)
|
19
19
|
rack
|
20
20
|
rake (13.0.6)
|
@@ -30,7 +30,7 @@ GEM
|
|
30
30
|
rspec-expectations (3.11.0)
|
31
31
|
diff-lcs (>= 1.2.0, < 2.0)
|
32
32
|
rspec-support (~> 3.11.0)
|
33
|
-
rspec-mocks (3.11.
|
33
|
+
rspec-mocks (3.11.1)
|
34
34
|
diff-lcs (>= 1.2.0, < 2.0)
|
35
35
|
rspec-support (~> 3.11.0)
|
36
36
|
rspec-support (3.11.0)
|
@@ -53,4 +53,4 @@ DEPENDENCIES
|
|
53
53
|
sidekiq-limit_fetch!
|
54
54
|
|
55
55
|
BUNDLED WITH
|
56
|
-
2.3.
|
56
|
+
2.3.5
|
@@ -1,7 +1,7 @@
|
|
1
1
|
PATH
|
2
2
|
remote: ..
|
3
3
|
specs:
|
4
|
-
sidekiq-limit_fetch (3.
|
4
|
+
sidekiq-limit_fetch (4.3.0)
|
5
5
|
redis (>= 4.6.0)
|
6
6
|
sidekiq (>= 4)
|
7
7
|
|
@@ -14,7 +14,7 @@ GEM
|
|
14
14
|
thor (>= 0.14.0)
|
15
15
|
connection_pool (2.2.5)
|
16
16
|
diff-lcs (1.5.0)
|
17
|
-
rack (2.2.3)
|
17
|
+
rack (2.2.3.1)
|
18
18
|
rake (13.0.6)
|
19
19
|
redis (4.6.0)
|
20
20
|
redis-namespace (1.8.2)
|
@@ -28,7 +28,7 @@ GEM
|
|
28
28
|
rspec-expectations (3.11.0)
|
29
29
|
diff-lcs (>= 1.2.0, < 2.0)
|
30
30
|
rspec-support (~> 3.11.0)
|
31
|
-
rspec-mocks (3.11.
|
31
|
+
rspec-mocks (3.11.1)
|
32
32
|
diff-lcs (>= 1.2.0, < 2.0)
|
33
33
|
rspec-support (~> 3.11.0)
|
34
34
|
rspec-support (3.11.0)
|
@@ -50,4 +50,4 @@ DEPENDENCIES
|
|
50
50
|
sidekiq-limit_fetch!
|
51
51
|
|
52
52
|
BUNDLED WITH
|
53
|
-
2.3.
|
53
|
+
2.3.5
|
@@ -1,7 +1,7 @@
|
|
1
1
|
PATH
|
2
2
|
remote: ..
|
3
3
|
specs:
|
4
|
-
sidekiq-limit_fetch (3.
|
4
|
+
sidekiq-limit_fetch (4.3.0)
|
5
5
|
redis (>= 4.6.0)
|
6
6
|
sidekiq (>= 4)
|
7
7
|
|
@@ -14,7 +14,7 @@ GEM
|
|
14
14
|
thor (>= 0.14.0)
|
15
15
|
connection_pool (2.2.5)
|
16
16
|
diff-lcs (1.5.0)
|
17
|
-
rack (2.2.3)
|
17
|
+
rack (2.2.3.1)
|
18
18
|
rake (13.0.6)
|
19
19
|
redis (4.6.0)
|
20
20
|
redis-namespace (1.8.2)
|
@@ -28,11 +28,11 @@ GEM
|
|
28
28
|
rspec-expectations (3.11.0)
|
29
29
|
diff-lcs (>= 1.2.0, < 2.0)
|
30
30
|
rspec-support (~> 3.11.0)
|
31
|
-
rspec-mocks (3.11.
|
31
|
+
rspec-mocks (3.11.1)
|
32
32
|
diff-lcs (>= 1.2.0, < 2.0)
|
33
33
|
rspec-support (~> 3.11.0)
|
34
34
|
rspec-support (3.11.0)
|
35
|
-
sidekiq (6.2.
|
35
|
+
sidekiq (6.2.2)
|
36
36
|
connection_pool (>= 2.2.2)
|
37
37
|
rack (~> 2.0)
|
38
38
|
redis (>= 4.2.0)
|
@@ -50,4 +50,4 @@ DEPENDENCIES
|
|
50
50
|
sidekiq-limit_fetch!
|
51
51
|
|
52
52
|
BUNDLED WITH
|
53
|
-
2.3.
|
53
|
+
2.3.5
|
@@ -1,7 +1,7 @@
|
|
1
1
|
PATH
|
2
2
|
remote: ..
|
3
3
|
specs:
|
4
|
-
sidekiq-limit_fetch (3.
|
4
|
+
sidekiq-limit_fetch (4.3.0)
|
5
5
|
redis (>= 4.6.0)
|
6
6
|
sidekiq (>= 4)
|
7
7
|
|
@@ -14,7 +14,7 @@ GEM
|
|
14
14
|
thor (>= 0.14.0)
|
15
15
|
connection_pool (2.2.5)
|
16
16
|
diff-lcs (1.5.0)
|
17
|
-
rack (2.2.3)
|
17
|
+
rack (2.2.3.1)
|
18
18
|
rake (13.0.6)
|
19
19
|
redis (4.6.0)
|
20
20
|
redis-namespace (1.8.2)
|
@@ -28,7 +28,7 @@ GEM
|
|
28
28
|
rspec-expectations (3.11.0)
|
29
29
|
diff-lcs (>= 1.2.0, < 2.0)
|
30
30
|
rspec-support (~> 3.11.0)
|
31
|
-
rspec-mocks (3.11.
|
31
|
+
rspec-mocks (3.11.1)
|
32
32
|
diff-lcs (>= 1.2.0, < 2.0)
|
33
33
|
rspec-support (~> 3.11.0)
|
34
34
|
rspec-support (3.11.0)
|
@@ -50,4 +50,4 @@ DEPENDENCIES
|
|
50
50
|
sidekiq-limit_fetch!
|
51
51
|
|
52
52
|
BUNDLED WITH
|
53
|
-
2.3.
|
53
|
+
2.3.5
|
@@ -1,7 +1,7 @@
|
|
1
1
|
PATH
|
2
2
|
remote: ..
|
3
3
|
specs:
|
4
|
-
sidekiq-limit_fetch (3.
|
4
|
+
sidekiq-limit_fetch (4.3.0)
|
5
5
|
redis (>= 4.6.0)
|
6
6
|
sidekiq (>= 4)
|
7
7
|
|
@@ -14,7 +14,7 @@ GEM
|
|
14
14
|
thor (>= 0.14.0)
|
15
15
|
connection_pool (2.2.5)
|
16
16
|
diff-lcs (1.5.0)
|
17
|
-
rack (2.2.3)
|
17
|
+
rack (2.2.3.1)
|
18
18
|
rake (13.0.6)
|
19
19
|
redis (4.6.0)
|
20
20
|
redis-namespace (1.8.2)
|
@@ -28,11 +28,11 @@ GEM
|
|
28
28
|
rspec-expectations (3.11.0)
|
29
29
|
diff-lcs (>= 1.2.0, < 2.0)
|
30
30
|
rspec-support (~> 3.11.0)
|
31
|
-
rspec-mocks (3.11.
|
31
|
+
rspec-mocks (3.11.1)
|
32
32
|
diff-lcs (>= 1.2.0, < 2.0)
|
33
33
|
rspec-support (~> 3.11.0)
|
34
34
|
rspec-support (3.11.0)
|
35
|
-
sidekiq (6.4.
|
35
|
+
sidekiq (6.4.2)
|
36
36
|
connection_pool (>= 2.2.2)
|
37
37
|
rack (~> 2.0)
|
38
38
|
redis (>= 4.2.0)
|
@@ -50,4 +50,4 @@ DEPENDENCIES
|
|
50
50
|
sidekiq-limit_fetch!
|
51
51
|
|
52
52
|
BUNDLED WITH
|
53
|
-
2.3.
|
53
|
+
2.3.5
|
@@ -1,7 +1,7 @@
|
|
1
1
|
PATH
|
2
2
|
remote: ..
|
3
3
|
specs:
|
4
|
-
sidekiq-limit_fetch (3.
|
4
|
+
sidekiq-limit_fetch (4.3.0)
|
5
5
|
redis (>= 4.6.0)
|
6
6
|
sidekiq (>= 4)
|
7
7
|
|
@@ -14,9 +14,7 @@ GEM
|
|
14
14
|
thor (>= 0.14.0)
|
15
15
|
connection_pool (2.2.5)
|
16
16
|
diff-lcs (1.5.0)
|
17
|
-
rack (2.
|
18
|
-
rack-protection (2.2.0)
|
19
|
-
rack
|
17
|
+
rack (2.2.3.1)
|
20
18
|
rake (13.0.6)
|
21
19
|
redis (4.6.0)
|
22
20
|
redis-namespace (1.8.2)
|
@@ -30,15 +28,14 @@ GEM
|
|
30
28
|
rspec-expectations (3.11.0)
|
31
29
|
diff-lcs (>= 1.2.0, < 2.0)
|
32
30
|
rspec-support (~> 3.11.0)
|
33
|
-
rspec-mocks (3.11.
|
31
|
+
rspec-mocks (3.11.1)
|
34
32
|
diff-lcs (>= 1.2.0, < 2.0)
|
35
33
|
rspec-support (~> 3.11.0)
|
36
34
|
rspec-support (3.11.0)
|
37
|
-
sidekiq (5.
|
38
|
-
connection_pool (
|
39
|
-
rack (
|
40
|
-
|
41
|
-
redis (>= 3.3.5, < 5)
|
35
|
+
sidekiq (6.5.0)
|
36
|
+
connection_pool (>= 2.2.2)
|
37
|
+
rack (~> 2.0)
|
38
|
+
redis (>= 4.2.0)
|
42
39
|
thor (1.2.1)
|
43
40
|
|
44
41
|
PLATFORMS
|
@@ -49,8 +46,8 @@ DEPENDENCIES
|
|
49
46
|
rake
|
50
47
|
redis-namespace (~> 1.5, >= 1.5.2)
|
51
48
|
rspec
|
52
|
-
sidekiq (~> 5.
|
49
|
+
sidekiq (~> 6.5.0)
|
53
50
|
sidekiq-limit_fetch!
|
54
51
|
|
55
52
|
BUNDLED WITH
|
56
|
-
2.3.
|
53
|
+
2.3.5
|
@@ -1,8 +1,8 @@
|
|
1
1
|
GIT
|
2
2
|
remote: https://github.com/mperham/sidekiq.git
|
3
|
-
revision:
|
3
|
+
revision: 277ea1888f25917e9dde8d00bdb866f86a55691f
|
4
4
|
specs:
|
5
|
-
sidekiq (6.
|
5
|
+
sidekiq (6.5.0)
|
6
6
|
connection_pool (>= 2.2.2)
|
7
7
|
rack (~> 2.0)
|
8
8
|
redis (>= 4.2.0)
|
@@ -10,7 +10,7 @@ GIT
|
|
10
10
|
PATH
|
11
11
|
remote: ..
|
12
12
|
specs:
|
13
|
-
sidekiq-limit_fetch (3.
|
13
|
+
sidekiq-limit_fetch (4.3.0)
|
14
14
|
redis (>= 4.6.0)
|
15
15
|
sidekiq (>= 4)
|
16
16
|
|
@@ -23,7 +23,7 @@ GEM
|
|
23
23
|
thor (>= 0.14.0)
|
24
24
|
connection_pool (2.2.5)
|
25
25
|
diff-lcs (1.5.0)
|
26
|
-
rack (2.2.3)
|
26
|
+
rack (2.2.3.1)
|
27
27
|
rake (13.0.6)
|
28
28
|
redis (4.6.0)
|
29
29
|
redis-namespace (1.8.2)
|
@@ -37,7 +37,7 @@ GEM
|
|
37
37
|
rspec-expectations (3.11.0)
|
38
38
|
diff-lcs (>= 1.2.0, < 2.0)
|
39
39
|
rspec-support (~> 3.11.0)
|
40
|
-
rspec-mocks (3.11.
|
40
|
+
rspec-mocks (3.11.1)
|
41
41
|
diff-lcs (>= 1.2.0, < 2.0)
|
42
42
|
rspec-support (~> 3.11.0)
|
43
43
|
rspec-support (3.11.0)
|
@@ -55,4 +55,4 @@ DEPENDENCIES
|
|
55
55
|
sidekiq-limit_fetch!
|
56
56
|
|
57
57
|
BUNDLED WITH
|
58
|
-
2.3.
|
58
|
+
2.3.5
|
@@ -6,7 +6,8 @@ class Sidekiq::Manager
|
|
6
6
|
end
|
7
7
|
|
8
8
|
def start
|
9
|
-
|
9
|
+
# In sidekiq 6.5.0 the variable @options has been renamed to @config
|
10
|
+
Sidekiq::LimitFetch::Queues.start @options || @config
|
10
11
|
Sidekiq::LimitFetch::Global::Monitor.start!
|
11
12
|
super
|
12
13
|
end
|
@@ -20,15 +20,17 @@ module Sidekiq::LimitFetch::Queues
|
|
20
20
|
end
|
21
21
|
|
22
22
|
def acquire
|
23
|
-
|
24
|
-
|
25
|
-
.
|
23
|
+
queues = saved
|
24
|
+
queues ||= Sidekiq::LimitFetch.redis_retryable do
|
25
|
+
selector.acquire(ordered_queues, namespace)
|
26
|
+
end
|
27
|
+
save queues
|
28
|
+
queues.map { |it| "queue:#{it}" }
|
26
29
|
end
|
27
30
|
|
28
31
|
def release_except(full_name)
|
29
32
|
queues = restore
|
30
33
|
queues.delete full_name[/queue:(.*)/, 1] if full_name
|
31
|
-
|
32
34
|
Sidekiq::LimitFetch.redis_retryable do
|
33
35
|
selector.release queues, namespace
|
34
36
|
end
|
@@ -141,13 +143,17 @@ module Sidekiq::LimitFetch::Queues
|
|
141
143
|
Sidekiq::LimitFetch::Global::Selector
|
142
144
|
end
|
143
145
|
|
146
|
+
def saved
|
147
|
+
Thread.current[THREAD_KEY]
|
148
|
+
end
|
149
|
+
|
144
150
|
def save(queues)
|
145
151
|
Thread.current[THREAD_KEY] = queues
|
146
152
|
end
|
147
153
|
|
148
154
|
def restore
|
149
|
-
|
155
|
+
saved || []
|
150
156
|
ensure
|
151
|
-
|
157
|
+
save nil
|
152
158
|
end
|
153
159
|
end
|
@@ -1,7 +1,11 @@
|
|
1
1
|
module Sidekiq
|
2
2
|
class LimitFetch::UnitOfWork < BasicFetch::UnitOfWork
|
3
3
|
def initialize(queue, job)
|
4
|
-
|
4
|
+
if post_6_5?
|
5
|
+
super(queue, job, Sidekiq)
|
6
|
+
else
|
7
|
+
super
|
8
|
+
end
|
5
9
|
redis_retryable { Queue[queue_name].increase_busy }
|
6
10
|
end
|
7
11
|
|
@@ -17,6 +21,10 @@ module Sidekiq
|
|
17
21
|
|
18
22
|
private
|
19
23
|
|
24
|
+
def post_6_5?
|
25
|
+
Gem::Version.new(Sidekiq::VERSION) >= Gem::Version.new('6.5.0')
|
26
|
+
end
|
27
|
+
|
20
28
|
def redis_retryable(&block)
|
21
29
|
Sidekiq::LimitFetch.redis_retryable(&block)
|
22
30
|
end
|
data/lib/sidekiq/limit_fetch.rb
CHANGED
@@ -14,6 +14,8 @@ module Sidekiq::LimitFetch
|
|
14
14
|
require_relative 'extensions/queue'
|
15
15
|
require_relative 'extensions/manager'
|
16
16
|
|
17
|
+
TIMEOUT = Sidekiq::BasicFetch::TIMEOUT
|
18
|
+
|
17
19
|
extend self
|
18
20
|
|
19
21
|
def new(_)
|
@@ -26,26 +28,42 @@ module Sidekiq::LimitFetch
|
|
26
28
|
UnitOfWork.new(queue, job) if job
|
27
29
|
end
|
28
30
|
|
31
|
+
def config
|
32
|
+
# Post 6.5, Sidekiq.options is deprecated and replaced with passing Sidekiq directly
|
33
|
+
post_6_5? ? Sidekiq : Sidekiq.options
|
34
|
+
end
|
35
|
+
|
29
36
|
# Backwards compatibility for sidekiq v6.1.0
|
30
37
|
# @see https://github.com/mperham/sidekiq/pull/4602
|
31
38
|
def bulk_requeue(*args)
|
32
39
|
if Sidekiq::BasicFetch.respond_to?(:bulk_requeue) # < 6.1.0
|
33
40
|
Sidekiq::BasicFetch.bulk_requeue(*args)
|
34
41
|
else # 6.1.0+
|
35
|
-
Sidekiq::BasicFetch.new(
|
42
|
+
Sidekiq::BasicFetch.new(config).bulk_requeue(*args)
|
36
43
|
end
|
37
44
|
end
|
38
45
|
|
39
46
|
def redis_retryable
|
40
47
|
yield
|
41
48
|
rescue Redis::BaseConnectionError
|
42
|
-
sleep
|
49
|
+
sleep TIMEOUT
|
43
50
|
retry
|
51
|
+
rescue Redis::CommandError => error
|
52
|
+
# If Redis was restarted and is still loading its snapshot,
|
53
|
+
# then we should treat this as a temporary connection error too.
|
54
|
+
if error.message =~ /^LOADING/
|
55
|
+
sleep TIMEOUT
|
56
|
+
retry
|
57
|
+
else
|
58
|
+
raise
|
59
|
+
end
|
44
60
|
end
|
45
61
|
|
46
62
|
private
|
47
63
|
|
48
|
-
|
64
|
+
def post_6_5?
|
65
|
+
@post_6_5 ||= Gem::Version.new(Sidekiq::VERSION) >= Gem::Version.new('6.5.0')
|
66
|
+
end
|
49
67
|
|
50
68
|
def redis_brpop(queues)
|
51
69
|
if queues.empty?
|
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 = '4.
|
3
|
+
gem.version = '4.3.0'
|
4
4
|
gem.license = 'MIT'
|
5
5
|
gem.authors = ['Dean Perry', 'brainopia']
|
6
6
|
gem.email = 'dean@deanpcmad.com'
|
@@ -8,6 +8,10 @@ Gem::Specification.new do |gem|
|
|
8
8
|
gem.homepage = 'https://github.com/deanpcmad/sidekiq-limit_fetch'
|
9
9
|
gem.description = "Sidekiq strategy to restrict number of workers which are able to run specified queues simultaneously."
|
10
10
|
|
11
|
+
gem.metadata["homepage_uri"] = gem.homepage
|
12
|
+
gem.metadata["source_code_uri"] = "https://github.com/deanpcmad/sidekiq-limit_fetch"
|
13
|
+
gem.metadata["changelog_uri"] = "https://github.com/deanpcmad/sidekiq-limit_fetch/blob/master/CHANGELOG.md"
|
14
|
+
|
11
15
|
gem.files = `git ls-files`.split($/)
|
12
16
|
gem.test_files = gem.files.grep %r{^spec/}
|
13
17
|
gem.require_paths = %w(lib)
|
@@ -15,61 +15,72 @@ RSpec.describe Sidekiq::LimitFetch::Queues do
|
|
15
15
|
|
16
16
|
before { subject.start options }
|
17
17
|
|
18
|
+
def in_thread(&block)
|
19
|
+
thr = Thread.new(&block)
|
20
|
+
thr.join
|
21
|
+
end
|
22
|
+
|
18
23
|
it 'should acquire queues' do
|
19
|
-
subject.acquire
|
24
|
+
in_thread { subject.acquire }
|
20
25
|
expect(Sidekiq::Queue['queue1'].probed).to eq 1
|
21
26
|
expect(Sidekiq::Queue['queue2'].probed).to eq 1
|
22
27
|
end
|
23
28
|
|
24
29
|
it 'should acquire dynamically blocking queues' do
|
25
|
-
subject.acquire
|
30
|
+
in_thread { subject.acquire }
|
26
31
|
expect(Sidekiq::Queue['queue1'].probed).to eq 1
|
27
32
|
expect(Sidekiq::Queue['queue2'].probed).to eq 1
|
28
33
|
|
29
34
|
Sidekiq::Queue['queue1'].block
|
30
35
|
|
31
|
-
subject.acquire
|
36
|
+
in_thread { subject.acquire }
|
32
37
|
expect(Sidekiq::Queue['queue1'].probed).to eq 2
|
33
38
|
expect(Sidekiq::Queue['queue2'].probed).to eq 1
|
34
39
|
end
|
35
40
|
|
36
41
|
it 'should block except given queues' do
|
37
42
|
Sidekiq::Queue['queue1'].block_except 'queue2'
|
38
|
-
subject.acquire
|
43
|
+
in_thread { subject.acquire }
|
39
44
|
expect(Sidekiq::Queue['queue1'].probed).to eq 1
|
40
45
|
expect(Sidekiq::Queue['queue2'].probed).to eq 1
|
41
46
|
|
42
47
|
Sidekiq::Queue['queue1'].block_except 'queue404'
|
43
|
-
subject.acquire
|
48
|
+
in_thread { subject.acquire }
|
44
49
|
expect(Sidekiq::Queue['queue1'].probed).to eq 2
|
45
50
|
expect(Sidekiq::Queue['queue2'].probed).to eq 1
|
46
51
|
end
|
47
52
|
|
48
53
|
it 'should release queues' do
|
49
|
-
|
50
|
-
|
54
|
+
in_thread {
|
55
|
+
subject.acquire
|
56
|
+
subject.release_except nil
|
57
|
+
}
|
51
58
|
expect(Sidekiq::Queue['queue1'].probed).to eq 0
|
52
59
|
expect(Sidekiq::Queue['queue2'].probed).to eq 0
|
53
60
|
end
|
54
61
|
|
55
62
|
it 'should release queues except selected' do
|
56
|
-
|
57
|
-
|
63
|
+
in_thread {
|
64
|
+
subject.acquire
|
65
|
+
subject.release_except 'queue:queue1'
|
66
|
+
}
|
58
67
|
expect(Sidekiq::Queue['queue1'].probed).to eq 1
|
59
68
|
expect(Sidekiq::Queue['queue2'].probed).to eq 0
|
60
69
|
end
|
61
70
|
|
62
71
|
it 'should release when no queues was acquired' do
|
63
72
|
queues.each {|name| Sidekiq::Queue[name].pause }
|
64
|
-
|
65
|
-
|
73
|
+
in_thread {
|
74
|
+
subject.acquire
|
75
|
+
expect { subject.release_except nil }.not_to raise_exception
|
76
|
+
}
|
66
77
|
end
|
67
78
|
|
68
79
|
context 'blocking' do
|
69
80
|
let(:blocking) { %w(queue1) }
|
70
81
|
|
71
82
|
it 'should acquire blocking queues' do
|
72
|
-
3.times { subject.acquire }
|
83
|
+
3.times { in_thread { subject.acquire } }
|
73
84
|
expect(Sidekiq::Queue['queue1'].probed).to eq 3
|
74
85
|
expect(Sidekiq::Queue['queue2'].probed).to eq 1
|
75
86
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: sidekiq-limit_fetch
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 4.
|
4
|
+
version: 4.3.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Dean Perry
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2022-
|
12
|
+
date: 2022-08-16 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: sidekiq
|
@@ -112,8 +112,9 @@ files:
|
|
112
112
|
- ".gitignore"
|
113
113
|
- ".rspec"
|
114
114
|
- Appraisals
|
115
|
+
- CHANGELOG.md
|
115
116
|
- Gemfile
|
116
|
-
- LICENSE
|
117
|
+
- LICENSE
|
117
118
|
- README.md
|
118
119
|
- Rakefile
|
119
120
|
- bench/compare.rb
|
@@ -129,12 +130,6 @@ files:
|
|
129
130
|
- demo/config/boot.rb
|
130
131
|
- demo/config/environment.rb
|
131
132
|
- demo/config/environments/development.rb
|
132
|
-
- gemfiles/sidekiq_5.0.gemfile
|
133
|
-
- gemfiles/sidekiq_5.0.gemfile.lock
|
134
|
-
- gemfiles/sidekiq_5.1.gemfile
|
135
|
-
- gemfiles/sidekiq_5.1.gemfile.lock
|
136
|
-
- gemfiles/sidekiq_5.2.gemfile
|
137
|
-
- gemfiles/sidekiq_5.2.gemfile.lock
|
138
133
|
- gemfiles/sidekiq_6.0.gemfile
|
139
134
|
- gemfiles/sidekiq_6.0.gemfile.lock
|
140
135
|
- gemfiles/sidekiq_6.1.gemfile
|
@@ -145,6 +140,8 @@ files:
|
|
145
140
|
- gemfiles/sidekiq_6.3.gemfile.lock
|
146
141
|
- gemfiles/sidekiq_6.4.gemfile
|
147
142
|
- gemfiles/sidekiq_6.4.gemfile.lock
|
143
|
+
- gemfiles/sidekiq_6.5.gemfile
|
144
|
+
- gemfiles/sidekiq_6.5.gemfile.lock
|
148
145
|
- gemfiles/sidekiq_master.gemfile
|
149
146
|
- gemfiles/sidekiq_master.gemfile.lock
|
150
147
|
- lib/sidekiq-limit_fetch.rb
|
@@ -167,7 +164,10 @@ files:
|
|
167
164
|
homepage: https://github.com/deanpcmad/sidekiq-limit_fetch
|
168
165
|
licenses:
|
169
166
|
- MIT
|
170
|
-
metadata:
|
167
|
+
metadata:
|
168
|
+
homepage_uri: https://github.com/deanpcmad/sidekiq-limit_fetch
|
169
|
+
source_code_uri: https://github.com/deanpcmad/sidekiq-limit_fetch
|
170
|
+
changelog_uri: https://github.com/deanpcmad/sidekiq-limit_fetch/blob/master/CHANGELOG.md
|
171
171
|
post_install_message:
|
172
172
|
rdoc_options: []
|
173
173
|
require_paths:
|
@@ -183,7 +183,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
183
183
|
- !ruby/object:Gem::Version
|
184
184
|
version: '0'
|
185
185
|
requirements: []
|
186
|
-
rubygems_version: 3.
|
186
|
+
rubygems_version: 3.3.7
|
187
187
|
signing_key:
|
188
188
|
specification_version: 4
|
189
189
|
summary: Sidekiq strategy to support queue limits
|
data/LICENSE.txt
DELETED
@@ -1,22 +0,0 @@
|
|
1
|
-
Copyright (c) 2013 brainopia
|
2
|
-
|
3
|
-
MIT License
|
4
|
-
|
5
|
-
Permission is hereby granted, free of charge, to any person obtaining
|
6
|
-
a copy of this software and associated documentation files (the
|
7
|
-
"Software"), to deal in the Software without restriction, including
|
8
|
-
without limitation the rights to use, copy, modify, merge, publish,
|
9
|
-
distribute, sublicense, and/or sell copies of the Software, and to
|
10
|
-
permit persons to whom the Software is furnished to do so, subject to
|
11
|
-
the following conditions:
|
12
|
-
|
13
|
-
The above copyright notice and this permission notice shall be
|
14
|
-
included in all copies or substantial portions of the Software.
|
15
|
-
|
16
|
-
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
17
|
-
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
18
|
-
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
19
|
-
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
20
|
-
LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
21
|
-
OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
22
|
-
WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
@@ -1,57 +0,0 @@
|
|
1
|
-
PATH
|
2
|
-
remote: ..
|
3
|
-
specs:
|
4
|
-
sidekiq-limit_fetch (3.4.0)
|
5
|
-
redis (>= 4.6.0)
|
6
|
-
sidekiq (>= 4)
|
7
|
-
|
8
|
-
GEM
|
9
|
-
remote: https://rubygems.org/
|
10
|
-
specs:
|
11
|
-
appraisal (2.4.1)
|
12
|
-
bundler
|
13
|
-
rake
|
14
|
-
thor (>= 0.14.0)
|
15
|
-
concurrent-ruby (1.1.10)
|
16
|
-
connection_pool (2.2.5)
|
17
|
-
diff-lcs (1.5.0)
|
18
|
-
rack (2.2.3)
|
19
|
-
rack-protection (2.2.0)
|
20
|
-
rack
|
21
|
-
rake (13.0.6)
|
22
|
-
redis (4.6.0)
|
23
|
-
redis-namespace (1.8.2)
|
24
|
-
redis (>= 3.0.4)
|
25
|
-
rspec (3.11.0)
|
26
|
-
rspec-core (~> 3.11.0)
|
27
|
-
rspec-expectations (~> 3.11.0)
|
28
|
-
rspec-mocks (~> 3.11.0)
|
29
|
-
rspec-core (3.11.0)
|
30
|
-
rspec-support (~> 3.11.0)
|
31
|
-
rspec-expectations (3.11.0)
|
32
|
-
diff-lcs (>= 1.2.0, < 2.0)
|
33
|
-
rspec-support (~> 3.11.0)
|
34
|
-
rspec-mocks (3.11.0)
|
35
|
-
diff-lcs (>= 1.2.0, < 2.0)
|
36
|
-
rspec-support (~> 3.11.0)
|
37
|
-
rspec-support (3.11.0)
|
38
|
-
sidekiq (5.0.5)
|
39
|
-
concurrent-ruby (~> 1.0)
|
40
|
-
connection_pool (~> 2.2, >= 2.2.0)
|
41
|
-
rack-protection (>= 1.5.0)
|
42
|
-
redis (>= 3.3.4, < 5)
|
43
|
-
thor (1.2.1)
|
44
|
-
|
45
|
-
PLATFORMS
|
46
|
-
x86_64-linux
|
47
|
-
|
48
|
-
DEPENDENCIES
|
49
|
-
appraisal
|
50
|
-
rake
|
51
|
-
redis-namespace (~> 1.5, >= 1.5.2)
|
52
|
-
rspec
|
53
|
-
sidekiq (~> 5.0.0)
|
54
|
-
sidekiq-limit_fetch!
|
55
|
-
|
56
|
-
BUNDLED WITH
|
57
|
-
2.3.6
|
@@ -1,57 +0,0 @@
|
|
1
|
-
PATH
|
2
|
-
remote: ..
|
3
|
-
specs:
|
4
|
-
sidekiq-limit_fetch (3.4.0)
|
5
|
-
redis (>= 4.6.0)
|
6
|
-
sidekiq (>= 4)
|
7
|
-
|
8
|
-
GEM
|
9
|
-
remote: https://rubygems.org/
|
10
|
-
specs:
|
11
|
-
appraisal (2.4.1)
|
12
|
-
bundler
|
13
|
-
rake
|
14
|
-
thor (>= 0.14.0)
|
15
|
-
concurrent-ruby (1.1.10)
|
16
|
-
connection_pool (2.2.5)
|
17
|
-
diff-lcs (1.5.0)
|
18
|
-
rack (2.2.3)
|
19
|
-
rack-protection (2.2.0)
|
20
|
-
rack
|
21
|
-
rake (13.0.6)
|
22
|
-
redis (4.6.0)
|
23
|
-
redis-namespace (1.8.2)
|
24
|
-
redis (>= 3.0.4)
|
25
|
-
rspec (3.11.0)
|
26
|
-
rspec-core (~> 3.11.0)
|
27
|
-
rspec-expectations (~> 3.11.0)
|
28
|
-
rspec-mocks (~> 3.11.0)
|
29
|
-
rspec-core (3.11.0)
|
30
|
-
rspec-support (~> 3.11.0)
|
31
|
-
rspec-expectations (3.11.0)
|
32
|
-
diff-lcs (>= 1.2.0, < 2.0)
|
33
|
-
rspec-support (~> 3.11.0)
|
34
|
-
rspec-mocks (3.11.0)
|
35
|
-
diff-lcs (>= 1.2.0, < 2.0)
|
36
|
-
rspec-support (~> 3.11.0)
|
37
|
-
rspec-support (3.11.0)
|
38
|
-
sidekiq (5.1.3)
|
39
|
-
concurrent-ruby (~> 1.0)
|
40
|
-
connection_pool (~> 2.2, >= 2.2.0)
|
41
|
-
rack-protection (>= 1.5.0)
|
42
|
-
redis (>= 3.3.5, < 5)
|
43
|
-
thor (1.2.1)
|
44
|
-
|
45
|
-
PLATFORMS
|
46
|
-
x86_64-linux
|
47
|
-
|
48
|
-
DEPENDENCIES
|
49
|
-
appraisal
|
50
|
-
rake
|
51
|
-
redis-namespace (~> 1.5, >= 1.5.2)
|
52
|
-
rspec
|
53
|
-
sidekiq (~> 5.1.0)
|
54
|
-
sidekiq-limit_fetch!
|
55
|
-
|
56
|
-
BUNDLED WITH
|
57
|
-
2.3.6
|