sidekiq_alive 2.2.1 → 2.2.3

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: d2e582c78da2c8fa6ab33a00ff95b84cb118146e4e6bd91da9571812a29b362a
4
- data.tar.gz: 1e05d528f28a1c73ce5b53bab77b32d5526a759f0e73a490c77606bcd9ea80ee
3
+ metadata.gz: cd90934747b7a9c1ca502f4ad44cdbd25e62477c01b7a3294f4b8c8e2779f27f
4
+ data.tar.gz: 0e05ab99ca8f24ed17209d6d31b37c5feb5202b899a540db550d892f810d65c0
5
5
  SHA512:
6
- metadata.gz: d6cb33070d6b0ea67e4aee822f72bab2f00ef4fd1b930f52ab5f2a6450f146a64d5e4dff3e8c9aed662e5f1a82c32f71a08b70d40f817b297350b19779e016a5
7
- data.tar.gz: 679728e07162ab19a31b9be42b75b430d466afaf76bb15cdfd6265092486ab17f7e1d5259d6467f9dc9eccb75c1d355b5bbb46712ccfec1b1ecad97c7a0bdf8f
6
+ metadata.gz: 3dd8df33e8a8d7055728f4f5a0a5e7a4622c5ea9a56480c0a0859e1c2b8ced78fa9a1dbd708ce98acbf8fc8ecbe396f3c8f64df08009d41c4d41243fe81763f5
7
+ data.tar.gz: e440b167ba6ac102eed86ee2f04273f093ed039e1110b055e0f6f6cefc75068dd0c96aad57fa657384f147a3e78f82b09dbd38357d9f9940fe228a2d0be914a6
@@ -7,22 +7,28 @@ module SidekiqAlive
7
7
  raise(NotImplementedError)
8
8
  end
9
9
 
10
- def match(key)
10
+ def zadd(set_key, ex, key)
11
11
  raise(NotImplementedError)
12
12
  end
13
13
 
14
- def delete(key)
14
+ def zrange(set_key, start, stop)
15
15
  raise(NotImplementedError)
16
16
  end
17
17
 
18
- def ttl(...)
19
- redis.ttl(...)
18
+ def zrangebyscore(set_key, min, max)
19
+ raise(NotImplementedError)
20
+ end
21
+
22
+ def zrem(set_key, key)
23
+ raise(NotImplementedError)
20
24
  end
21
25
 
22
- private
26
+ def delete(key)
27
+ raise(NotImplementedError)
28
+ end
23
29
 
24
- def redis
25
- Sidekiq.redis { |r| r }
30
+ def ttl(...)
31
+ Sidekiq.redis { |redis| redis.ttl(...) }
26
32
  end
27
33
  end
28
34
  end
@@ -8,19 +8,31 @@ module SidekiqAlive
8
8
  # https://github.com/redis-rb/redis-client
9
9
  class RedisClientGem < Base
10
10
  def set(key, time:, ex:)
11
- redis.call("SET", key, time, ex: ex)
11
+ Sidekiq.redis { |redis| redis.call("SET", key, time, ex: ex) }
12
12
  end
13
13
 
14
14
  def get(key)
15
- redis.call("GET", key)
15
+ Sidekiq.redis { |redis| redis.call("GET", key) }
16
16
  end
17
17
 
18
- def match(key)
19
- redis.scan("MATCH", key).map { |key| key }
18
+ def zadd(set_key, ex, key)
19
+ Sidekiq.redis { |redis| redis.call("ZADD", set_key, ex, key) }
20
+ end
21
+
22
+ def zrange(set_key, start, stop)
23
+ Sidekiq.redis { |redis| redis.call("ZRANGE", set_key, start, stop) }
24
+ end
25
+
26
+ def zrangebyscore(set_key, min, max)
27
+ Sidekiq.redis { |redis| redis.call("ZRANGEBYSCORE", set_key, min, max) }
28
+ end
29
+
30
+ def zrem(set_key, key)
31
+ Sidekiq.redis { |redis| redis.call("ZREM", set_key, key) }
20
32
  end
21
33
 
22
34
  def delete(key)
23
- redis.call("DEL", key)
35
+ Sidekiq.redis { |redis| redis.call("DEL", key) }
24
36
  end
25
37
  end
26
38
  end
@@ -15,21 +15,31 @@ module SidekiqAlive
15
15
  redis.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.zadd(set_key, ex, key)
20
+ end
21
+
22
+ def zrange(set_key, start, stop)
23
+ redis.zrange(set_key, start, stop)
24
+ end
25
+
26
+ def zrangebyscore(set_key, min, max)
27
+ redis.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.zrem(set_key, key)
28
32
  end
29
33
 
30
34
  def delete(key)
31
35
  redis.del(key)
32
36
  end
37
+
38
+ private
39
+
40
+ def redis
41
+ Sidekiq.redis { |redis| redis }
42
+ end
33
43
  end
34
44
  end
35
45
  end
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module SidekiqAlive
4
- VERSION = "2.2.1"
4
+ VERSION = "2.2.3"
5
5
  end
data/lib/sidekiq_alive.rb CHANGED
@@ -9,6 +9,7 @@ require "sidekiq_alive/helpers"
9
9
  require "sidekiq_alive/redis"
10
10
 
11
11
  module SidekiqAlive
12
+ HOSTNAME_REGISTRY = "sidekiq-alive-hostnames"
12
13
  class << self
13
14
  def start
14
15
  Sidekiq.configure_server do |sq_config|
@@ -28,6 +29,7 @@ module SidekiqAlive
28
29
  logger.info(startup_info)
29
30
 
30
31
  register_current_instance
32
+
31
33
  store_alive_key
32
34
  # Passing the hostname argument it's only for debugging enqueued jobs
33
35
  SidekiqAlive::Worker.perform_async(hostname)
@@ -63,11 +65,13 @@ module SidekiqAlive
63
65
  # Delete any pending jobs for this instance
64
66
  logger.info(shutdown_info)
65
67
  purge_pending_jobs
66
- redis.delete(current_instance_register_key)
68
+ redis.zrem(HOSTNAME_REGISTRY, current_instance_register_key)
67
69
  end
68
70
 
69
71
  def registered_instances
70
- redis.match("#{config.registered_instance_key}::*")
72
+ # before we return we make sure we expire old keys
73
+ expire_old_keys
74
+ redis.zrange(HOSTNAME_REGISTRY, 0, -1)
71
75
  end
72
76
 
73
77
  def purge_pending_jobs
@@ -136,6 +140,7 @@ module SidekiqAlive
136
140
  port: config.port,
137
141
  ttl: config.time_to_live,
138
142
  queue: current_queue,
143
+ register_set: HOSTNAME_REGISTRY,
139
144
  liveness_key: current_lifeness_key,
140
145
  register_key: current_instance_register_key,
141
146
  }
@@ -144,11 +149,21 @@ module SidekiqAlive
144
149
  end
145
150
 
146
151
  def successful_startup_text
147
- "Successfully started sidekiq-alive, registered with key: #{current_instance_register_key}"
152
+ "Successfully started sidekiq-alive, registered with key: "\
153
+ "#{current_instance_register_key} on set #{HOSTNAME_REGISTRY}"
154
+ end
155
+
156
+ def expire_old_keys
157
+ # we get every key that should be expired by now
158
+ keys_to_expire = redis.zrangebyscore(HOSTNAME_REGISTRY, 0, Time.now.to_i)
159
+ # then we remove it
160
+ keys_to_expire.each { |key| redis.zrem(HOSTNAME_REGISTRY, key) }
148
161
  end
149
162
 
150
163
  def register_instance(instance_name)
151
- redis.set(instance_name, time: Time.now.to_i, ex: config.registration_ttl.to_i)
164
+ expiration = Time.now.to_i + config.registration_ttl.to_i
165
+ redis.zadd(HOSTNAME_REGISTRY, expiration, instance_name)
166
+ expire_old_keys
152
167
  end
153
168
  end
154
169
  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.1
4
+ version: 2.2.3
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-15 00:00:00.000000000 Z
12
+ date: 2023-07-21 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: bundler
@@ -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.1/README.md
216
+ documentation_uri: https://github.com/arturictus/sidekiq_alive/blob/v2.2.3/README.md
217
217
  bug_tracker_uri: https://github.com/arturictus/sidekiq_alive/issues
218
218
  post_install_message:
219
219
  rdoc_options: []