sidekiq-throttled 1.0.0.alpha → 1.0.0.alpha.1

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 7659ca0e722a87bc85f4e9d73a38075cf005b72515bbaf06604eabaab77d8fdd
4
- data.tar.gz: 28c53a85bb5d346d09d8ec08c6d23cecc687b6ec35e4c9779c07eba32bc635d6
3
+ metadata.gz: 714915692e57a08eeea5dd0e0be79f3becfa915669f559f3457509073b89e4fe
4
+ data.tar.gz: 190b4e6d013712725bb64277c00c74c82da5149f73368dbb19890090d638a372
5
5
  SHA512:
6
- metadata.gz: 2b03a9d8f51981c778c4a7b0fb84d7c20dabf902eefb00518a98a4c5a028119e820cd93920946516a51e0a399e05cf2692d12e7b59b814b37045b4dc6f852c43
7
- data.tar.gz: 37478b95ae4f5426f82dceec1aa918722772c9a2c785b7c94420460b897c52cc0eee1cce02f5d03214c5d28113c3c798f5c13e31fb342ae935d92a07bc60f9b7
6
+ metadata.gz: 7627db53db315ec4acdaf15e715186522c3dbbdc4084aadd65cd0f081845b247f92eb106bcf2e5bf41b5098400adaed00377104b21205b5914495bcacff9d625
7
+ data.tar.gz: 1caca54490b41115389b6ce111c4264a911aba84f656546bce0c62846d6f3828c91a1c681bfb0520f04230c6e113b9d1cd5553c500e6a65a7f6d77c2d36903a2
@@ -0,0 +1,60 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "sidekiq"
4
+ require "sidekiq/fetch"
5
+
6
+ module Sidekiq
7
+ module Throttled
8
+ module Patches
9
+ module BasicFetch
10
+ class << self
11
+ def apply!
12
+ Sidekiq::BasicFetch.prepend(self) unless Sidekiq::BasicFetch.include?(self)
13
+ end
14
+ end
15
+
16
+ # Retrieves job from redis.
17
+ #
18
+ # @return [Sidekiq::Throttled::UnitOfWork, nil]
19
+ def retrieve_work
20
+ work = super
21
+
22
+ if work && Throttled.throttled?(work.job)
23
+ requeue_throttled(work)
24
+ return nil
25
+ end
26
+
27
+ work
28
+ end
29
+
30
+ private
31
+
32
+ # Pushes job back to the head of the queue, so that job won't be tried
33
+ # immediately after it was requeued (in most cases).
34
+ #
35
+ # @note This is triggered when job is throttled. So it is same operation
36
+ # Sidekiq performs upon `Sidekiq::Worker.perform_async` call.
37
+ #
38
+ # @return [void]
39
+ def requeue_throttled(work)
40
+ redis { |conn| conn.lpush(work.queue, work.job) }
41
+ end
42
+
43
+ # Returns list of queues to try to fetch jobs from.
44
+ #
45
+ # @note It may return an empty array.
46
+ # @param [Array<String>] queues
47
+ # @return [Array<String>]
48
+ def queues_cmd
49
+ queues = super
50
+
51
+ # TODO: Refactor to be prepended as an integration mixin during configuration stage
52
+ # Or via configurable queues reducer
53
+ queues -= Sidekiq::Pauzer.paused_queues.map { |name| "queue:#{name}" } if defined?(Sidekiq::Pauzer)
54
+
55
+ queues
56
+ end
57
+ end
58
+ end
59
+ end
60
+ end
@@ -19,8 +19,7 @@ module Sidekiq
19
19
  # @param [#to_s] name
20
20
  # @param [#call] key_suffix Dynamic key suffix generator.
21
21
  def initialize(strategies, strategy:, name:, key_suffix:)
22
- strategies = (strategies.is_a?(Hash) ? [strategies] : Array(strategies))
23
- @strategies = strategies.map do |options|
22
+ @strategies = (strategies.is_a?(Hash) ? [strategies] : Array(strategies)).map do |options|
24
23
  make_strategy(strategy, name, key_suffix, options)
25
24
  end
26
25
  end
@@ -3,6 +3,6 @@
3
3
  module Sidekiq
4
4
  module Throttled
5
5
  # Gem version
6
- VERSION = "1.0.0.alpha"
6
+ VERSION = "1.0.0.alpha.1"
7
7
  end
8
8
  end
@@ -1,12 +1,10 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- # 3rd party
4
3
  require "sidekiq"
5
4
 
6
- # internal
7
5
  require_relative "./throttled/version"
8
6
  require_relative "./throttled/configuration"
9
- require_relative "./throttled/fetch"
7
+ require_relative "./throttled/patches/basic_fetch"
10
8
  require_relative "./throttled/registry"
11
9
  require_relative "./throttled/job"
12
10
  require_relative "./throttled/middleware"
@@ -52,13 +50,7 @@ module Sidekiq
52
50
  #
53
51
  # @return [void]
54
52
  def setup!
55
- Sidekiq.configure_server do |config|
56
- if Gem::Version.new("7.0.0") <= Gem::Version.new(Sidekiq::VERSION)
57
- config[:fetch_class] = Sidekiq::Throttled::Fetch
58
- else
59
- config[:fetch] = Sidekiq::Throttled::Fetch.new(config)
60
- end
61
- end
53
+ Sidekiq::Throttled::Patches::BasicFetch.apply!
62
54
  end
63
55
 
64
56
  # Tells whenever job is throttled or not.
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.0.0.alpha
4
+ version: 1.0.0.alpha.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Alexey Zapparov
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2023-05-30 00:00:00.000000000 Z
11
+ date: 2023-06-08 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: redis-prescription
@@ -48,12 +48,11 @@ files:
48
48
  - LICENSE
49
49
  - README.adoc
50
50
  - lib/sidekiq/throttled.rb
51
- - lib/sidekiq/throttled/basic_fetch.rb
52
51
  - lib/sidekiq/throttled/configuration.rb
53
52
  - lib/sidekiq/throttled/errors.rb
54
- - lib/sidekiq/throttled/fetch.rb
55
53
  - lib/sidekiq/throttled/job.rb
56
54
  - lib/sidekiq/throttled/middleware.rb
55
+ - lib/sidekiq/throttled/patches/basic_fetch.rb
57
56
  - lib/sidekiq/throttled/registry.rb
58
57
  - lib/sidekiq/throttled/strategy.rb
59
58
  - lib/sidekiq/throttled/strategy/base.rb
@@ -72,9 +71,9 @@ licenses:
72
71
  - MIT
73
72
  metadata:
74
73
  homepage_uri: https://github.com/ixti/sidekiq-throttled
75
- source_code_uri: https://github.com/ixti/sidekiq-throttled/tree/v1.0.0.alpha
74
+ source_code_uri: https://github.com/ixti/sidekiq-throttled/tree/v1.0.0.alpha.1
76
75
  bug_tracker_uri: https://github.com/ixti/sidekiq-throttled/issues
77
- changelog_uri: https://github.com/ixti/sidekiq-throttled/blob/v1.0.0.alpha/CHANGES.md
76
+ changelog_uri: https://github.com/ixti/sidekiq-throttled/blob/v1.0.0.alpha.1/CHANGES.md
78
77
  rubygems_mfa_required: 'true'
79
78
  post_install_message:
80
79
  rdoc_options: []
@@ -1,55 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require "sidekiq"
4
- require "sidekiq/fetch"
5
-
6
- module Sidekiq
7
- module Throttled
8
- # Default Sidekiq's BasicFetch infused with Throttler.
9
- #
10
- # @private
11
- class BasicFetch < Sidekiq::BasicFetch
12
- # Retrieves job from redis.
13
- #
14
- # @return [Sidekiq::Throttled::UnitOfWork, nil]
15
- def retrieve_work
16
- work = super
17
-
18
- if work && Throttled.throttled?(work.job)
19
- requeue_throttled(work)
20
- return nil
21
- end
22
-
23
- work
24
- end
25
-
26
- private
27
-
28
- # Pushes job back to the head of the queue, so that job won't be tried
29
- # immediately after it was requeued (in most cases).
30
- #
31
- # @note This is triggered when job is throttled. So it is same operation
32
- # Sidekiq performs upon `Sidekiq::Worker.perform_async` call.
33
- #
34
- # @return [void]
35
- def requeue_throttled(work)
36
- redis { |conn| conn.lpush(work.queue, work.job) }
37
- end
38
-
39
- # Returns list of queues to try to fetch jobs from.
40
- #
41
- # @note It may return an empty array.
42
- # @param [Array<String>] queues
43
- # @return [Array<String>]
44
- def queues_cmd
45
- queues = super
46
-
47
- # TODO: Refactor to be prepended as an integration mixin during configuration stage
48
- # Or via configurable queues reducer
49
- queues -= Sidekiq::Pauzer.paused_queues.map { |name| "queue:#{name}" } if defined?(Sidekiq::Pauzer)
50
-
51
- queues
52
- end
53
- end
54
- end
55
- end
@@ -1,10 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require_relative "./basic_fetch"
4
-
5
- module Sidekiq
6
- module Throttled
7
- # @deprecated Use Sidekiq::Throttled::BasicFetch
8
- Fetch = BasicFetch
9
- end
10
- end