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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 91197aecff6a9c46cb3c1435c85bdf1b74e5be216bbd9a89396fbdb6f00beb8b
4
- data.tar.gz: c04884068ab7d1401460dead6edf0c029760dbe89a77d0490ecbbed7164609de
3
+ metadata.gz: 6b27bf285ed86d94c8e18e4f72ef48429b137c2ab0f11f63d108801b62d0a45c
4
+ data.tar.gz: 2cb0c549dd6c1e508fbdacf703267eef14aa75f5d5230d4c497dedd1ea3c5b42
5
5
  SHA512:
6
- metadata.gz: 3a7ee4c386dbdae03b4a41aa2a26d70e8825286708e207486d83f9514c91018c8f2ed7fd00ce9cc698c91d0cf4d682a76e3f3296199047c8b045b9bd5d94f3ba
7
- data.tar.gz: 7cfa3edc88f5ef7dcfd9932894fbd07b3a541366e4c0b53ca5613035eb5c17c8f2e48ac0cdb76df5a2aa9bd4fd3e85c60ff58057835fc3b14b2d068d7a89f6f4
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. Concurrency limit should only be use to in extreme case, you should not use this gem to limit business logic
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
@@ -1,5 +1,5 @@
1
1
  module Sidekiq
2
2
  module ThrottledWorker
3
- VERSION = "0.1.1"
3
+ VERSION = "0.1.2"
4
4
  end
5
5
  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.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: 2020-10-27 00:00:00.000000000 Z
11
+ date: 2021-04-15 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: sidekiq