sidekiq-throttled-worker 0.1.1 → 0.1.2
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/README.md +1 -1
- data/lib/sidekiq/throttled_worker.rb +12 -0
- data/lib/sidekiq/throttled_worker/concurrency.rb +2 -8
- data/lib/sidekiq/throttled_worker/version.rb +1 -1
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 6b27bf285ed86d94c8e18e4f72ef48429b137c2ab0f11f63d108801b62d0a45c
|
4
|
+
data.tar.gz: 2cb0c549dd6c1e508fbdacf703267eef14aa75f5d5230d4c497dedd1ea3c5b42
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: e6b2e56a6e37ceed5fa53024ea56d3a94df020e7f309b6b725a60694077a302185663cbab40e1f61530c9b8f7663300a0d4f79c038eddae4e04e10dc44d518cf
|
7
|
+
data.tar.gz: 1a68946ceffc3d09acf8b539b4bd543d1173f32a3d1d13fd7ec8d4a4ead3f11ffcf3db6a71b4926c3b9a9918a91562d8756d9c32dfccd50e7fce9b0f320f5e44
|
data/README.md
CHANGED
@@ -2,7 +2,7 @@
|
|
2
2
|
|
3
3
|
Sidekiq concurrency limit per worker in whole cluster, inspired by [sidekiq-throttled](https://github.com/sensortower/sidekiq-throttled). This gem only support concurrency, and try to avoid use lua in redis to reduce redis CPU usage.
|
4
4
|
|
5
|
-
This gem was designed to limit concurrency for some sensitive resources, e.g., databases and http requests, without concurrency limit, sidekiq may crush this services. When some worker exceed concurrency limit, this gem may try to slow down sidekiq process.
|
5
|
+
This gem was designed to limit concurrency for some sensitive resources, e.g., databases and http requests, without concurrency limit, sidekiq may crush this services. When some worker exceed concurrency limit, this gem may try to slow down sidekiq process.
|
6
6
|
|
7
7
|
## Installation
|
8
8
|
|
@@ -16,6 +16,18 @@ module Sidekiq
|
|
16
16
|
end
|
17
17
|
end
|
18
18
|
end
|
19
|
+
|
20
|
+
def redis=(hash)
|
21
|
+
@redis = if hash.is_a?(ConnectionPool)
|
22
|
+
hash
|
23
|
+
else
|
24
|
+
Sidekiq::RedisConnection.create(hash)
|
25
|
+
end
|
26
|
+
end
|
27
|
+
|
28
|
+
def redis
|
29
|
+
@redis ||= Sidekiq::RedisConnection.create
|
30
|
+
end
|
19
31
|
end
|
20
32
|
end
|
21
33
|
end
|
@@ -6,10 +6,8 @@ module Sidekiq
|
|
6
6
|
# only allow one worker check limit
|
7
7
|
concurrency = worker_class.get_sidekiq_options["concurrency"]
|
8
8
|
ttl = (worker_class.get_sidekiq_options["concurrency_ttl"] || 900) # assume worker should finish run in 15 minutes, and worker may be block completely max for 15 minutes in extreme case
|
9
|
-
check_limit_key = "sidekiq:throttled_worker:check_limit:#{worker_class}"
|
10
9
|
now = Time.now.to_f
|
11
|
-
Sidekiq.redis do |conn|
|
12
|
-
return true unless conn.set(check_limit_key, 1, nx: true, ex: 60)
|
10
|
+
Sidekiq::ThrottledWorker.redis.with do |conn|
|
13
11
|
conn.zremrangebyscore(concurrency_key(worker_class), "-inf", "(#{now}")
|
14
12
|
return true if conn.zcard(concurrency_key(worker_class)) >= concurrency && conn.zscore(concurrency_key(worker_class), jid).nil?
|
15
13
|
conn.zadd(concurrency_key(worker_class), (now + ttl).to_i, jid)
|
@@ -17,14 +15,10 @@ module Sidekiq
|
|
17
15
|
|
18
16
|
false
|
19
17
|
end
|
20
|
-
ensure
|
21
|
-
Sidekiq.redis do |conn|
|
22
|
-
conn.del(check_limit_key)
|
23
|
-
end
|
24
18
|
end
|
25
19
|
|
26
20
|
def finalize!(worker_class, jid)
|
27
|
-
Sidekiq.redis do |conn|
|
21
|
+
Sidekiq::ThrottledWorker.redis.with do |conn|
|
28
22
|
conn.zrem(concurrency_key(worker_class), jid)
|
29
23
|
end
|
30
24
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: sidekiq-throttled-worker
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- xuxiangyang
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2021-04-15 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: sidekiq
|