sidekiq_alive 2.2.2 → 2.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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 6e6b5e84ff746dd5d962f51625919178bc7495308abda9f7a1115adc09604bdb
4
- data.tar.gz: 0764a954ba5e287bfe0086229973582c2dd64ee8e053bd477215dbcbd419ee02
3
+ metadata.gz: 562294aa960a1c1cd11b0a020b0f7cce26f09ee4c2faeb7044e21fd9bf3be8c5
4
+ data.tar.gz: c31918f4c756cc551a3dcab2ea0d2c781c394e23e463c0a2c72ae68bfb52cd16
5
5
  SHA512:
6
- metadata.gz: ad276a94133bef97bfa64532d526f159253071d2ec0ee9447124ab64d10534e2aae634f31e0b390c68a92fb5d5aad544ac4b185c7ac8a74de582042322fbae2a
7
- data.tar.gz: 20408e4c55d5fe5299d71ad7c1a81ebe550abce762875ca23b27b3d7ef40799d3859ff8cd33fda4a40d922c93552c2caaaadcf3d755778166ed8edd4dff5bfa0
6
+ metadata.gz: 595baafc8b0499bb8f900cdaf3eac250d623ba3b51d65b4510d311b2913b1e0560fc967c63dbeaf9145cab43527a5d133b7af6127492103e0caf8538b61ed55e
7
+ data.tar.gz: 05deade6b05eb839fb0c6d1c0d08768b2141cc24c61cdd2edc1aa453338b12bc7b5bce3a8d19692968a7f85939541519fb6c70eb759273c1b2fe5afffce8b413
@@ -7,7 +7,19 @@ module SidekiqAlive
7
7
  raise(NotImplementedError)
8
8
  end
9
9
 
10
- def match(key)
10
+ def zadd(set_key, ex, key)
11
+ raise(NotImplementedError)
12
+ end
13
+
14
+ def zrange(set_key, start, stop)
15
+ raise(NotImplementedError)
16
+ end
17
+
18
+ def zrangebyscore(set_key, min, max)
19
+ raise(NotImplementedError)
20
+ end
21
+
22
+ def zrem(set_key, key)
11
23
  raise(NotImplementedError)
12
24
  end
13
25
 
@@ -16,7 +28,7 @@ module SidekiqAlive
16
28
  end
17
29
 
18
30
  def ttl(...)
19
- Sidekiq.redis { |redis| redis.ttl(...) }
31
+ redis { |r| r.ttl(...) }
20
32
  end
21
33
  end
22
34
  end
@@ -7,20 +7,45 @@ module SidekiqAlive
7
7
  # Wrapper for `redis-client` gem used by `sidekiq` > 7
8
8
  # https://github.com/redis-rb/redis-client
9
9
  class RedisClientGem < Base
10
+ def initialize
11
+ super
12
+
13
+ @capsule = Sidekiq.default_configuration.capsules[CAPSULE_NAME]
14
+ end
15
+
10
16
  def set(key, time:, ex:)
11
- Sidekiq.redis { |redis| redis.call("SET", key, time, ex: ex) }
17
+ redis { |r| r.call("SET", key, time, ex: ex) }
12
18
  end
13
19
 
14
20
  def get(key)
15
- Sidekiq.redis { |redis| redis.call("GET", key) }
21
+ redis { |r| r.call("GET", key) }
22
+ end
23
+
24
+ def zadd(set_key, ex, key)
25
+ redis { |r| r.call("ZADD", set_key, ex, key) }
26
+ end
27
+
28
+ def zrange(set_key, start, stop)
29
+ redis { |r| r.call("ZRANGE", set_key, start, stop) }
30
+ end
31
+
32
+ def zrangebyscore(set_key, min, max)
33
+ redis { |r| r.call("ZRANGEBYSCORE", set_key, min, max) }
16
34
  end
17
35
 
18
- def match(key)
19
- Sidekiq.redis { |redis| redis.scan("MATCH", key).map { |key| key } }
36
+ def zrem(set_key, key)
37
+ redis { |r| r.call("ZREM", set_key, key) }
20
38
  end
21
39
 
22
40
  def delete(key)
23
- Sidekiq.redis { |redis| redis.call("DEL", key) }
41
+ redis { |r| r.call("DEL", key) }
42
+ end
43
+
44
+ private
45
+
46
+ def redis(&block)
47
+ # Default to Sidekiq.redis if capsule is not configured yet but redis adapter is accessed
48
+ (@capsule || Sidekiq).redis(&block)
24
49
  end
25
50
  end
26
51
  end
@@ -8,33 +8,37 @@ module SidekiqAlive
8
8
  # https://github.com/redis/redis-rb
9
9
  class RedisGem < Base
10
10
  def set(key, time:, ex:)
11
- redis.set(key, time, ex: ex)
11
+ redis { |r| r.set(key, time, ex: ex) }
12
12
  end
13
13
 
14
14
  def get(key)
15
- redis.get(key)
15
+ redis { |r| r.get(key) }
16
16
  end
17
17
 
18
- def match(key)
19
- keys = []
20
- cursor = 0
18
+ def zadd(set_key, ex, key)
19
+ redis { |r| r.zadd(set_key, ex, key) }
20
+ end
21
+
22
+ def zrange(set_key, start, stop)
23
+ redis { |r| r.zrange(set_key, start, stop) }
24
+ end
25
+
26
+ def zrangebyscore(set_key, min, max)
27
+ redis { |r| r.zrangebyscore(set_key, min, max) }
28
+ end
21
29
 
22
- loop do
23
- cursor, found_keys = redis.scan(cursor, match: key, count: 1000)
24
- keys += found_keys if found_keys
25
- break if cursor.to_i == 0
26
- end
27
- keys
30
+ def zrem(set_key, key)
31
+ redis { |r| r.zrem(set_key, key) }
28
32
  end
29
33
 
30
34
  def delete(key)
31
- redis.del(key)
35
+ redis { |r| r.del(key) }
32
36
  end
33
37
 
34
38
  private
35
39
 
36
- def redis
37
- Sidekiq.redis { |redis| redis }
40
+ def redis(&block)
41
+ Sidekiq.redis(&block)
38
42
  end
39
43
  end
40
44
  end
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module SidekiqAlive
4
- VERSION = "2.2.2"
4
+ VERSION = "2.3.0"
5
5
  end
data/lib/sidekiq_alive.rb CHANGED
@@ -9,25 +9,28 @@ require "sidekiq_alive/helpers"
9
9
  require "sidekiq_alive/redis"
10
10
 
11
11
  module SidekiqAlive
12
+ HOSTNAME_REGISTRY = "sidekiq-alive-hostnames"
13
+ CAPSULE_NAME = "sidekiq-alive"
14
+
12
15
  class << self
13
16
  def start
14
17
  Sidekiq.configure_server do |sq_config|
15
18
  sq_config.on(:startup) do
16
19
  SidekiqAlive::Worker.sidekiq_options(queue: current_queue)
17
- if Helpers.sidekiq_7
18
- sq_config.queues
19
- else
20
- sq_config.respond_to?(:[]) ? sq_config[:queues] : sq_config.options[:queues]
21
- end.unshift(current_queue)
22
20
 
23
- # If no weight is set, webui might not show this queue for given instance/process.
24
21
  if Helpers.sidekiq_7
25
- sq_config.default_capsule.weights[current_queue] = 1
22
+ sq_config.capsule(CAPSULE_NAME) do |cap|
23
+ cap.concurrency = 2
24
+ cap.queues = [current_queue]
25
+ end
26
+ else
27
+ (sq_config.respond_to?(:[]) ? sq_config[:queues] : sq_config.options[:queues]).unshift(current_queue)
26
28
  end
27
29
 
28
30
  logger.info(startup_info)
29
31
 
30
32
  register_current_instance
33
+
31
34
  store_alive_key
32
35
  # Passing the hostname argument it's only for debugging enqueued jobs
33
36
  SidekiqAlive::Worker.perform_async(hostname)
@@ -63,11 +66,13 @@ module SidekiqAlive
63
66
  # Delete any pending jobs for this instance
64
67
  logger.info(shutdown_info)
65
68
  purge_pending_jobs
66
- redis.delete(current_instance_register_key)
69
+ redis.zrem(HOSTNAME_REGISTRY, current_instance_register_key)
67
70
  end
68
71
 
69
72
  def registered_instances
70
- redis.match("#{config.registered_instance_key}::*")
73
+ # before we return we make sure we expire old keys
74
+ expire_old_keys
75
+ redis.zrange(HOSTNAME_REGISTRY, 0, -1)
71
76
  end
72
77
 
73
78
  def purge_pending_jobs
@@ -136,6 +141,7 @@ module SidekiqAlive
136
141
  port: config.port,
137
142
  ttl: config.time_to_live,
138
143
  queue: current_queue,
144
+ register_set: HOSTNAME_REGISTRY,
139
145
  liveness_key: current_lifeness_key,
140
146
  register_key: current_instance_register_key,
141
147
  }
@@ -144,11 +150,21 @@ module SidekiqAlive
144
150
  end
145
151
 
146
152
  def successful_startup_text
147
- "Successfully started sidekiq-alive, registered with key: #{current_instance_register_key}"
153
+ "Successfully started sidekiq-alive, registered with key: "\
154
+ "#{current_instance_register_key} on set #{HOSTNAME_REGISTRY}"
155
+ end
156
+
157
+ def expire_old_keys
158
+ # we get every key that should be expired by now
159
+ keys_to_expire = redis.zrangebyscore(HOSTNAME_REGISTRY, 0, Time.now.to_i)
160
+ # then we remove it
161
+ keys_to_expire.each { |key| redis.zrem(HOSTNAME_REGISTRY, key) }
148
162
  end
149
163
 
150
164
  def register_instance(instance_name)
151
- redis.set(instance_name, time: Time.now.to_i, ex: config.registration_ttl.to_i)
165
+ expiration = Time.now.to_i + config.registration_ttl.to_i
166
+ redis.zadd(HOSTNAME_REGISTRY, expiration, instance_name)
167
+ expire_old_keys
152
168
  end
153
169
  end
154
170
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: sidekiq_alive
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.2.2
4
+ version: 2.3.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Andrejs Cunskis
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2023-05-25 00:00:00.000000000 Z
12
+ date: 2023-09-07 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: bundler
@@ -87,14 +87,14 @@ dependencies:
87
87
  requirements:
88
88
  - - "~>"
89
89
  - !ruby/object:Gem::Version
90
- version: '3.0'
90
+ version: '4.0'
91
91
  type: :development
92
92
  prerelease: false
93
93
  version_requirements: !ruby/object:Gem::Requirement
94
94
  requirements:
95
95
  - - "~>"
96
96
  - !ruby/object:Gem::Version
97
- version: '3.0'
97
+ version: '4.0'
98
98
  - !ruby/object:Gem::Dependency
99
99
  name: rubocop-shopify
100
100
  requirement: !ruby/object:Gem::Requirement
@@ -213,7 +213,7 @@ metadata:
213
213
  homepage_uri: https://github.com/arturictus/sidekiq_alive
214
214
  source_code_uri: https://github.com/arturictus/sidekiq_alive
215
215
  changelog_uri: https://github.com/arturictus/sidekiq_alive/releases
216
- documentation_uri: https://github.com/arturictus/sidekiq_alive/blob/v2.2.2/README.md
216
+ documentation_uri: https://github.com/arturictus/sidekiq_alive/blob/v2.3.0/README.md
217
217
  bug_tracker_uri: https://github.com/arturictus/sidekiq_alive/issues
218
218
  post_install_message:
219
219
  rdoc_options: []