sidekiq-throttled 1.2.0 → 1.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/README.adoc +13 -3
- data/lib/sidekiq/throttled/patches/basic_fetch.rb +8 -16
- data/lib/sidekiq/throttled/patches/super_fetch.rb +52 -0
- data/lib/sidekiq/throttled/patches/throttled_retriever.rb +26 -0
- data/lib/sidekiq/throttled/strategy_collection.rb +6 -6
- data/lib/sidekiq/throttled/version.rb +1 -1
- data/lib/sidekiq/throttled.rb +1 -0
- metadata +7 -5
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 433460cfaea479faf45edc665c6f8d7d025b3e35ccdf18a32061a0b3d3c42e68
|
4
|
+
data.tar.gz: 4e36f4c938d7145646e04f1de6d483bdec5a4c18254c3153be3556285b779fbf
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 3ba640f6b15fa32eb21eccda8a319357439b7367fea6c0e4d4125e0e2cd5e91fbb822768d2171c57ac0cfbe0ba640b1d21960c6e2ea317997869c8f06187aec9
|
7
|
+
data.tar.gz: bd28f31c6222b3f378e1e7a2d081cc9f05c4feb13b7be8b1b54ee91976a66b2263884837f3149dddcc6b047129a0311b65135433511b0dc3ed29d47ed88346ea
|
data/README.adoc
CHANGED
@@ -107,7 +107,7 @@ end
|
|
107
107
|
* `Sidekiq::Throttled::Middlewares::Server`
|
108
108
|
|
109
109
|
The middleware is automatically injected when you require `sidekiq/throttled`.
|
110
|
-
In rare cases this
|
110
|
+
In rare cases, when this causes an issue, you can change middleware order manually:
|
111
111
|
|
112
112
|
[source,ruby]
|
113
113
|
----
|
@@ -115,8 +115,7 @@ Sidekiq.configure_server do |config|
|
|
115
115
|
# ...
|
116
116
|
|
117
117
|
config.server_middleware do |chain|
|
118
|
-
chain.
|
119
|
-
chain.add(Sidekiq::Throttled::Middlewares::Server)
|
118
|
+
chain.prepend(Sidekiq::Throttled::Middlewares::Server)
|
120
119
|
end
|
121
120
|
end
|
122
121
|
----
|
@@ -271,6 +270,7 @@ This library aims to support and is tested against the following Ruby versions:
|
|
271
270
|
* Ruby 3.0.x
|
272
271
|
* Ruby 3.1.x
|
273
272
|
* Ruby 3.2.x
|
273
|
+
* Ruby 3.3.x
|
274
274
|
|
275
275
|
If something doesn't work on one of these versions, it's a bug.
|
276
276
|
|
@@ -295,6 +295,11 @@ This library aims to support and work with following Sidekiq versions:
|
|
295
295
|
* Sidekiq 7.1.x
|
296
296
|
* Sidekiq 7.2.x
|
297
297
|
|
298
|
+
And the following Sidekiq Pro versions:
|
299
|
+
|
300
|
+
* Sidekiq Pro 7.0.x
|
301
|
+
* Sidekiq Pro 7.1.x
|
302
|
+
* Sidekiq Pro 7.2.x
|
298
303
|
|
299
304
|
== Development
|
300
305
|
|
@@ -303,6 +308,11 @@ This library aims to support and work with following Sidekiq versions:
|
|
303
308
|
bundle exec appraisal install
|
304
309
|
bundle exec rake
|
305
310
|
|
311
|
+
=== Sidekiq-Pro
|
312
|
+
|
313
|
+
If you're working on Sidekiq-Pro support make sure to copy `.rspec-sidekiq-pro`
|
314
|
+
to `.rspec-local` and that you have Sidekiq-Pro license in the global config,
|
315
|
+
or in the `BUNDLE_GEMS\__CONTRIBSYS__COM` env variable.
|
306
316
|
|
307
317
|
== Contributing
|
308
318
|
|
@@ -3,25 +3,14 @@
|
|
3
3
|
require "sidekiq"
|
4
4
|
require "sidekiq/fetch"
|
5
5
|
|
6
|
+
require_relative "./throttled_retriever"
|
7
|
+
|
6
8
|
module Sidekiq
|
7
9
|
module Throttled
|
8
10
|
module Patches
|
9
11
|
module BasicFetch
|
10
|
-
|
11
|
-
|
12
|
-
# @return [Sidekiq::Throttled::UnitOfWork, nil]
|
13
|
-
def retrieve_work
|
14
|
-
work = super
|
15
|
-
|
16
|
-
if work && Throttled.throttled?(work.job)
|
17
|
-
Throttled.cooldown&.notify_throttled(work.queue)
|
18
|
-
requeue_throttled(work)
|
19
|
-
return nil
|
20
|
-
end
|
21
|
-
|
22
|
-
Throttled.cooldown&.notify_admitted(work.queue) if work
|
23
|
-
|
24
|
-
work
|
12
|
+
def self.prepended(base)
|
13
|
+
base.prepend(ThrottledRetriever)
|
25
14
|
end
|
26
15
|
|
27
16
|
private
|
@@ -43,7 +32,10 @@ module Sidekiq
|
|
43
32
|
# @param [Array<String>] queues
|
44
33
|
# @return [Array<String>]
|
45
34
|
def queues_cmd
|
46
|
-
|
35
|
+
throttled_queues = Throttled.cooldown&.queues
|
36
|
+
return super if throttled_queues.nil? || throttled_queues.empty?
|
37
|
+
|
38
|
+
super - throttled_queues
|
47
39
|
end
|
48
40
|
end
|
49
41
|
end
|
@@ -0,0 +1,52 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require "sidekiq"
|
4
|
+
|
5
|
+
require_relative "./throttled_retriever"
|
6
|
+
|
7
|
+
module Sidekiq
|
8
|
+
module Throttled
|
9
|
+
module Patches
|
10
|
+
module SuperFetch
|
11
|
+
def self.prepended(base)
|
12
|
+
base.prepend(ThrottledRetriever)
|
13
|
+
end
|
14
|
+
|
15
|
+
private
|
16
|
+
|
17
|
+
# Calls SuperFetch UnitOfWork's requeue to remove the job from the
|
18
|
+
# temporary queue and push job back to the head of the queue, so that
|
19
|
+
# the job won't be tried immediately after it was requeued (in most cases).
|
20
|
+
#
|
21
|
+
# @note This is triggered when job is throttled.
|
22
|
+
#
|
23
|
+
# @return [void]
|
24
|
+
def requeue_throttled(work)
|
25
|
+
# SuperFetch UnitOfWork's requeue will remove it from the temporary
|
26
|
+
# queue and then requeue it, so no acknowledgement call is needed.
|
27
|
+
work.requeue
|
28
|
+
end
|
29
|
+
|
30
|
+
# Returns list of non-paused queues to try to fetch jobs from.
|
31
|
+
#
|
32
|
+
# @note It may return an empty array.
|
33
|
+
# @return [Array<Array(String, String)>]
|
34
|
+
def active_queues
|
35
|
+
# Create a hash of throttled queues for fast lookup
|
36
|
+
throttled_queues = Throttled.cooldown&.queues&.to_h { |queue| [queue, true] }
|
37
|
+
return super if throttled_queues.nil? || throttled_queues.empty?
|
38
|
+
|
39
|
+
# Reject throttled queues from the list of active queues
|
40
|
+
super.reject { |queue, _private_queue| throttled_queues[queue] }
|
41
|
+
end
|
42
|
+
end
|
43
|
+
end
|
44
|
+
end
|
45
|
+
end
|
46
|
+
|
47
|
+
begin
|
48
|
+
require "sidekiq/pro/super_fetch"
|
49
|
+
Sidekiq::Pro::SuperFetch.prepend(Sidekiq::Throttled::Patches::SuperFetch)
|
50
|
+
rescue LoadError
|
51
|
+
# Sidekiq Pro is not available
|
52
|
+
end
|
@@ -0,0 +1,26 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Sidekiq
|
4
|
+
module Throttled
|
5
|
+
module Patches
|
6
|
+
module ThrottledRetriever
|
7
|
+
# Retrieves job from redis.
|
8
|
+
#
|
9
|
+
# @return [Sidekiq::BasicFetch::UnitOfWork, nil]
|
10
|
+
def retrieve_work
|
11
|
+
work = super
|
12
|
+
|
13
|
+
if work && Throttled.throttled?(work.job)
|
14
|
+
Throttled.cooldown&.notify_throttled(work.queue)
|
15
|
+
requeue_throttled(work)
|
16
|
+
return nil
|
17
|
+
end
|
18
|
+
|
19
|
+
Throttled.cooldown&.notify_admitted(work.queue) if work
|
20
|
+
|
21
|
+
work
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
@@ -26,8 +26,8 @@ module Sidekiq
|
|
26
26
|
|
27
27
|
# @param [#call] block
|
28
28
|
# Iterates each strategy in collection
|
29
|
-
def each(
|
30
|
-
@strategies.each(
|
29
|
+
def each(...)
|
30
|
+
@strategies.each(...)
|
31
31
|
end
|
32
32
|
|
33
33
|
# @return [Boolean] whenever any strategy in collection has dynamic config
|
@@ -37,14 +37,14 @@ module Sidekiq
|
|
37
37
|
|
38
38
|
# @return [Boolean] whenever job is throttled or not
|
39
39
|
# by any strategy in collection.
|
40
|
-
def throttled?(
|
41
|
-
any? { |s| s.throttled?(
|
40
|
+
def throttled?(...)
|
41
|
+
any? { |s| s.throttled?(...) }
|
42
42
|
end
|
43
43
|
|
44
44
|
# Marks job as being processed.
|
45
45
|
# @return [void]
|
46
|
-
def finalize!(
|
47
|
-
each { |c| c.finalize!(
|
46
|
+
def finalize!(...)
|
47
|
+
each { |c| c.finalize!(...) }
|
48
48
|
end
|
49
49
|
|
50
50
|
# Resets count of jobs of all avaliable strategies
|
data/lib/sidekiq/throttled.rb
CHANGED
@@ -7,6 +7,7 @@ require_relative "./throttled/cooldown"
|
|
7
7
|
require_relative "./throttled/job"
|
8
8
|
require_relative "./throttled/middlewares/server"
|
9
9
|
require_relative "./throttled/patches/basic_fetch"
|
10
|
+
require_relative "./throttled/patches/super_fetch"
|
10
11
|
require_relative "./throttled/registry"
|
11
12
|
require_relative "./throttled/version"
|
12
13
|
require_relative "./throttled/worker"
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: sidekiq-throttled
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.
|
4
|
+
version: 1.3.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Alexey Zapparov
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2024-01-18 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: concurrent-ruby
|
@@ -69,6 +69,8 @@ files:
|
|
69
69
|
- lib/sidekiq/throttled/job.rb
|
70
70
|
- lib/sidekiq/throttled/middlewares/server.rb
|
71
71
|
- lib/sidekiq/throttled/patches/basic_fetch.rb
|
72
|
+
- lib/sidekiq/throttled/patches/super_fetch.rb
|
73
|
+
- lib/sidekiq/throttled/patches/throttled_retriever.rb
|
72
74
|
- lib/sidekiq/throttled/registry.rb
|
73
75
|
- lib/sidekiq/throttled/strategy.rb
|
74
76
|
- lib/sidekiq/throttled/strategy/base.rb
|
@@ -87,9 +89,9 @@ licenses:
|
|
87
89
|
- MIT
|
88
90
|
metadata:
|
89
91
|
homepage_uri: https://github.com/ixti/sidekiq-throttled
|
90
|
-
source_code_uri: https://github.com/ixti/sidekiq-throttled/tree/v1.
|
92
|
+
source_code_uri: https://github.com/ixti/sidekiq-throttled/tree/v1.3.0
|
91
93
|
bug_tracker_uri: https://github.com/ixti/sidekiq-throttled/issues
|
92
|
-
changelog_uri: https://github.com/ixti/sidekiq-throttled/blob/v1.
|
94
|
+
changelog_uri: https://github.com/ixti/sidekiq-throttled/blob/v1.3.0/CHANGES.md
|
93
95
|
rubygems_mfa_required: 'true'
|
94
96
|
post_install_message:
|
95
97
|
rdoc_options: []
|
@@ -106,7 +108,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
106
108
|
- !ruby/object:Gem::Version
|
107
109
|
version: '0'
|
108
110
|
requirements: []
|
109
|
-
rubygems_version: 3.
|
111
|
+
rubygems_version: 3.5.4
|
110
112
|
signing_key:
|
111
113
|
specification_version: 4
|
112
114
|
summary: Concurrency and rate-limit throttling for Sidekiq
|