sidekiq-pauzer 5.0.0 → 5.2.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 +25 -22
- data/lib/sidekiq/pauzer/queues.rb +25 -65
- data/lib/sidekiq/pauzer/repository.rb +52 -0
- data/lib/sidekiq/pauzer/version.rb +1 -1
- data/lib/sidekiq/pauzer.rb +27 -27
- metadata +6 -5
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 98787fef3e8c9b2177b4d60ddff1c6f5cd9183bd574581606b545f3415073b8f
|
4
|
+
data.tar.gz: b9d2a052d852cf0b44d07bafd4162dbe76170d14586614a5fe7b5123d39e6513
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: ba93ae7964585e0a89692ba06143704c52d45854ae51df91e7ff3cbe6596cae3ad1e58f505b352bf2f5abc35e4e9854c3a54294d7dbb5f6862698d34fb92057b
|
7
|
+
data.tar.gz: 978230c92240e7762db583e1854bcecdaa61496167ffb14d5f92dffcff655bb618566919a915b3c26e94ca2daba0ecd482a6da94d5ae67f6847903ba038ee632
|
data/README.adoc
CHANGED
@@ -77,35 +77,38 @@ NOTE: If you are using custom Sidekiq views path, then you will need to call
|
|
77
77
|
(after requiring `sidekiq/pauzer/web`): `Sidekiq::Pauzer::Web.unpatch_views!`.
|
78
78
|
|
79
79
|
|
80
|
-
==
|
81
|
-
|
82
|
-
This library aims to support and is tested against
|
83
|
-
|
84
|
-
*
|
85
|
-
|
86
|
-
|
80
|
+
== Compatibility
|
81
|
+
|
82
|
+
This library aims to support and is tested against:
|
83
|
+
|
84
|
+
* https://www.ruby-lang.org[Ruby]
|
85
|
+
** MRI 3.0.x
|
86
|
+
** MRI 3.1.x
|
87
|
+
** MRI 3.2.x
|
88
|
+
** MRI 3.3.x
|
89
|
+
* https://github.com/sidekiq/sidekiq[Sidekiq]
|
90
|
+
** 7.2.x
|
91
|
+
** 7.3.x
|
92
|
+
* https://redis.io[Redis]
|
93
|
+
** 6.2.x
|
94
|
+
** 7.0.x
|
95
|
+
** 7.2.x
|
87
96
|
|
88
97
|
If something doesn't work on one of these versions, it's a bug.
|
89
98
|
|
90
|
-
This library may inadvertently work (or seem to work) on other Ruby
|
91
|
-
however support will only be provided for the versions listed
|
99
|
+
This library may inadvertently work (or seem to work) on other Ruby, Redis, and
|
100
|
+
Sidekiq versions, however support will only be provided for the versions listed
|
101
|
+
above.
|
92
102
|
|
93
|
-
If you would like this library to support another Ruby
|
94
|
-
|
95
|
-
|
96
|
-
|
97
|
-
|
98
|
-
|
103
|
+
If you would like this library to support another Ruby, Redis, or Sidekiq
|
104
|
+
version, you may volunteer to be a maintainer. Being a maintainer entails making
|
105
|
+
sure all tests run and pass on that implementation. When something breaks on
|
106
|
+
your implementation, you will be responsible for providing patches in a timely
|
107
|
+
fashion. If critical issues for a particular implementation exist at the time of
|
108
|
+
a major release, support for that Ruby, Redis, and/or Sidekiq version may be
|
99
109
|
dropped.
|
100
110
|
|
101
111
|
|
102
|
-
== Supported Sidekiq Versions
|
103
|
-
|
104
|
-
This library aims to support and work with following Sidekiq versions:
|
105
|
-
|
106
|
-
* Sidekiq 7.2.x
|
107
|
-
|
108
|
-
|
109
112
|
== Development
|
110
113
|
|
111
114
|
bundle install
|
@@ -6,93 +6,53 @@ require "concurrent"
|
|
6
6
|
module Sidekiq
|
7
7
|
module Pauzer
|
8
8
|
# @api internal
|
9
|
+
# Eventually consistent list of paused queues. Used by Sidekiq fetchers to
|
10
|
+
# avoid hitting Redis on every fetch call.
|
9
11
|
class Queues
|
10
|
-
extend Forwardable
|
11
12
|
include Enumerable
|
12
13
|
|
13
|
-
#
|
14
|
-
#
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
@config = config
|
20
|
-
@names = [].freeze
|
21
|
-
@names_mutex = Mutex.new
|
22
|
-
@refresher = nil
|
23
|
-
@refresher_mutex = Mutex.new
|
14
|
+
# @param refresh_rate [Float]
|
15
|
+
# @param repository [Repository]
|
16
|
+
def initialize(refresh_rate, repository:)
|
17
|
+
@refresher = Concurrent::TimerTask.new(execution_interval: refresh_rate, run_now: true) do
|
18
|
+
repository.to_a.freeze
|
19
|
+
end
|
24
20
|
end
|
25
21
|
|
22
|
+
# @overload each
|
23
|
+
# @return [Enumerator<String>]
|
24
|
+
#
|
25
|
+
# @overload each(&block)
|
26
|
+
# For a block { |queue_name| ... }
|
27
|
+
# @yieldparam queue_name [String]
|
28
|
+
# @return [self]
|
26
29
|
def each(&block)
|
27
30
|
return to_enum __method__ unless block
|
28
31
|
|
29
32
|
start_refresher unless refresher_running?
|
30
|
-
@
|
31
|
-
|
32
|
-
self
|
33
|
-
end
|
34
|
-
|
35
|
-
# @param name [#to_s]
|
36
|
-
# @return [Queues] self
|
37
|
-
def pause!(name)
|
38
|
-
redis_call("SADD", Pauzer::REDIS_KEY, name.to_s)
|
39
|
-
refresh
|
40
|
-
self
|
41
|
-
end
|
33
|
+
@refresher.value&.each(&block)
|
42
34
|
|
43
|
-
# @param name [#to_s]
|
44
|
-
# @return [Queues] self
|
45
|
-
def unpause!(name)
|
46
|
-
redis_call("SREM", Pauzer::REDIS_KEY, name.to_s)
|
47
|
-
refresh
|
48
35
|
self
|
49
36
|
end
|
50
37
|
|
51
|
-
#
|
52
|
-
#
|
53
|
-
|
54
|
-
include?(name.to_s)
|
55
|
-
end
|
56
|
-
|
38
|
+
# Starts paused queues list async poller.
|
39
|
+
#
|
40
|
+
# @return [self]
|
57
41
|
def start_refresher
|
58
|
-
@
|
59
|
-
@refresher&.shutdown
|
60
|
-
@refresher = Concurrent::TimerTask.execute(execution_interval: refresh_rate, run_now: true) { refresh }
|
61
|
-
end
|
62
|
-
|
42
|
+
@refresher.execute
|
63
43
|
self
|
64
44
|
end
|
65
45
|
|
46
|
+
# Stops paused queues list async poller.
|
47
|
+
#
|
48
|
+
# @return [self]
|
66
49
|
def stop_refresher
|
67
|
-
@
|
68
|
-
@refresher&.shutdown
|
69
|
-
@refresher = nil
|
70
|
-
end
|
71
|
-
|
50
|
+
@refresher.shutdown
|
72
51
|
self
|
73
52
|
end
|
74
53
|
|
75
54
|
def refresher_running?
|
76
|
-
@
|
77
|
-
@refresher&.running? || false
|
78
|
-
end
|
79
|
-
end
|
80
|
-
|
81
|
-
private
|
82
|
-
|
83
|
-
# @return [nil]
|
84
|
-
def refresh
|
85
|
-
names = redis_call("SMEMBERS", Pauzer::REDIS_KEY).to_a
|
86
|
-
|
87
|
-
@names_mutex.synchronize do
|
88
|
-
@names = names.each(&:freeze).freeze
|
89
|
-
end
|
90
|
-
|
91
|
-
nil
|
92
|
-
end
|
93
|
-
|
94
|
-
def redis_call(...)
|
95
|
-
Sidekiq.redis { |conn| conn.call(...) }
|
55
|
+
@refresher.running?
|
96
56
|
end
|
97
57
|
end
|
98
58
|
end
|
@@ -0,0 +1,52 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Sidekiq
|
4
|
+
module Pauzer
|
5
|
+
class Repository
|
6
|
+
include Enumerable
|
7
|
+
|
8
|
+
REDIS_KEY = "sidekiq-pauzer"
|
9
|
+
|
10
|
+
# @overload each
|
11
|
+
# @return [Enumerator<String>]
|
12
|
+
#
|
13
|
+
# @overload each(&block)
|
14
|
+
# For a block { |queue_name| ... }
|
15
|
+
# @yieldparam queue_name [String]
|
16
|
+
# @return [self]
|
17
|
+
def each
|
18
|
+
return to_enum __method__ unless block_given?
|
19
|
+
|
20
|
+
redis_call("SMEMBERS", REDIS_KEY).each { yield _1.freeze }
|
21
|
+
|
22
|
+
self
|
23
|
+
end
|
24
|
+
|
25
|
+
# @param queue_name [#to_s]
|
26
|
+
# @return [void]
|
27
|
+
def add(queue_name)
|
28
|
+
redis_call("SADD", REDIS_KEY, queue_name.to_s)
|
29
|
+
nil
|
30
|
+
end
|
31
|
+
|
32
|
+
# @param queue_name [#to_s]
|
33
|
+
# @return [void]
|
34
|
+
def delete(queue_name)
|
35
|
+
redis_call("SREM", REDIS_KEY, queue_name.to_s)
|
36
|
+
nil
|
37
|
+
end
|
38
|
+
|
39
|
+
# @param name [#to_s]
|
40
|
+
# @return [void]
|
41
|
+
def include?(queue_name)
|
42
|
+
redis_call("SISMEMBER", REDIS_KEY, queue_name.to_s).positive?
|
43
|
+
end
|
44
|
+
|
45
|
+
private
|
46
|
+
|
47
|
+
def redis_call(...)
|
48
|
+
Sidekiq.redis { _1.call(...) }
|
49
|
+
end
|
50
|
+
end
|
51
|
+
end
|
52
|
+
end
|
data/lib/sidekiq/pauzer.rb
CHANGED
@@ -1,52 +1,51 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
-
require "forwardable"
|
4
3
|
require "sidekiq"
|
5
4
|
require "sidekiq/api"
|
6
5
|
|
7
|
-
require_relative "./pauzer/config"
|
8
|
-
require_relative "./pauzer/patches/basic_fetch"
|
9
|
-
require_relative "./pauzer/patches/queue"
|
10
|
-
require_relative "./pauzer/queues"
|
11
|
-
require_relative "./pauzer/version"
|
12
|
-
|
13
6
|
begin
|
7
|
+
# :nocov:
|
14
8
|
require "sidekiq-ent/version"
|
9
|
+
raise "sidekiq-pauzer is incompatible with Sidekiq Enterprise"
|
10
|
+
# :nocov:
|
15
11
|
rescue LoadError
|
16
12
|
# All good - no compatibility issues
|
17
13
|
end
|
18
14
|
|
19
15
|
begin
|
16
|
+
# :nocov:
|
20
17
|
require "sidekiq/pro/version"
|
18
|
+
raise "sidekiq-pauzer is incompatible with Sidekiq Pro"
|
19
|
+
# :nocov:
|
21
20
|
rescue LoadError
|
22
21
|
# All good - no compatibility issues
|
23
22
|
end
|
24
23
|
|
25
|
-
|
26
|
-
|
24
|
+
require_relative "./pauzer/config"
|
25
|
+
require_relative "./pauzer/patches/basic_fetch"
|
26
|
+
require_relative "./pauzer/patches/queue"
|
27
|
+
require_relative "./pauzer/queues"
|
28
|
+
require_relative "./pauzer/repository"
|
29
|
+
require_relative "./pauzer/version"
|
27
30
|
|
28
31
|
module Sidekiq
|
29
32
|
module Pauzer
|
30
|
-
REDIS_KEY = "sidekiq-pauzer"
|
31
|
-
|
32
33
|
MUTEX = Mutex.new
|
33
34
|
private_constant :MUTEX
|
34
35
|
|
35
|
-
@config
|
36
|
-
@
|
36
|
+
@config = Config.new.freeze
|
37
|
+
@repository = Repository.new
|
38
|
+
@queues = Queues.new(@config.refresh_rate, repository: @repository)
|
37
39
|
|
38
40
|
class << self
|
39
|
-
extend Forwardable
|
40
|
-
|
41
41
|
# @example
|
42
42
|
# Sidekiq::Pauzer.pause!("minor")
|
43
43
|
# Sidekiq::Pauzer.paused?("minor") # => true
|
44
44
|
#
|
45
|
-
# @param (see
|
45
|
+
# @param (see Repository#add)
|
46
46
|
# @return [void]
|
47
|
-
def pause!(
|
48
|
-
@
|
49
|
-
|
47
|
+
def pause!(queue_name)
|
48
|
+
@repository.add(queue_name)
|
50
49
|
nil
|
51
50
|
end
|
52
51
|
|
@@ -56,11 +55,10 @@ module Sidekiq
|
|
56
55
|
# Sidekiq::Pauzer.unpause!("minor")
|
57
56
|
# Sidekiq::Pauzer.paused?("minor") # => false
|
58
57
|
#
|
59
|
-
# @param (see
|
58
|
+
# @param (see Repository#delete)
|
60
59
|
# @return [void]
|
61
|
-
def unpause!(
|
62
|
-
@
|
63
|
-
|
60
|
+
def unpause!(queue_name)
|
61
|
+
@repository.delete(queue_name)
|
64
62
|
nil
|
65
63
|
end
|
66
64
|
|
@@ -69,11 +67,13 @@ module Sidekiq
|
|
69
67
|
# Sidekiq::Pauzer.paused?("minor") # => true
|
70
68
|
# Sidekiq::Pauzer.paused?("threat") # => false
|
71
69
|
#
|
72
|
-
# @see
|
73
|
-
def paused?(
|
74
|
-
@
|
70
|
+
# @return (see Repository#include?)
|
71
|
+
def paused?(queue_name)
|
72
|
+
@repository.include?(queue_name)
|
75
73
|
end
|
76
74
|
|
75
|
+
# Eventually consistent list of paused queues.
|
76
|
+
#
|
77
77
|
# @example
|
78
78
|
# Sidekiq::Pauzer.pause!("minor")
|
79
79
|
# Sidekiq::Pauzer.paused_queues # => ["minor"]
|
@@ -121,7 +121,7 @@ module Sidekiq
|
|
121
121
|
|
122
122
|
def reinit_queues
|
123
123
|
@queues.stop_refresher
|
124
|
-
@queues = Queues.new(@config)
|
124
|
+
@queues = Queues.new(@config.refresh_rate, repository: @repository)
|
125
125
|
end
|
126
126
|
end
|
127
127
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: sidekiq-pauzer
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 5.
|
4
|
+
version: 5.2.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-11-22 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: concurrent-ruby
|
@@ -55,6 +55,7 @@ files:
|
|
55
55
|
- lib/sidekiq/pauzer/patches/web_action.rb
|
56
56
|
- lib/sidekiq/pauzer/patches/web_application.rb
|
57
57
|
- lib/sidekiq/pauzer/queues.rb
|
58
|
+
- lib/sidekiq/pauzer/repository.rb
|
58
59
|
- lib/sidekiq/pauzer/version.rb
|
59
60
|
- lib/sidekiq/pauzer/web.rb
|
60
61
|
- web/views/queues.erb
|
@@ -63,9 +64,9 @@ licenses:
|
|
63
64
|
- MIT
|
64
65
|
metadata:
|
65
66
|
homepage_uri: https://github.com/ixti/sidekiq-pauzer
|
66
|
-
source_code_uri: https://github.com/ixti/sidekiq-pauzer/tree/v5.
|
67
|
+
source_code_uri: https://github.com/ixti/sidekiq-pauzer/tree/v5.2.0
|
67
68
|
bug_tracker_uri: https://github.com/ixti/sidekiq-pauzer/issues
|
68
|
-
changelog_uri: https://github.com/ixti/sidekiq-pauzer/blob/v5.
|
69
|
+
changelog_uri: https://github.com/ixti/sidekiq-pauzer/blob/v5.2.0/CHANGES.md
|
69
70
|
rubygems_mfa_required: 'true'
|
70
71
|
post_install_message:
|
71
72
|
rdoc_options: []
|
@@ -82,7 +83,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
82
83
|
- !ruby/object:Gem::Version
|
83
84
|
version: '0'
|
84
85
|
requirements: []
|
85
|
-
rubygems_version: 3.
|
86
|
+
rubygems_version: 3.5.22
|
86
87
|
signing_key:
|
87
88
|
specification_version: 4
|
88
89
|
summary: Enhance Sidekiq with queue pausing
|