sidekiq-ultimate 0.0.1.alpha.12 → 0.0.1.alpha.13

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: cda9a7246c8e37b21ee222f0055a30b94eba47868c3c51b7b107b1425eb0ca6d
4
- data.tar.gz: 47b59be61f08cf78eb67ee6096e8eb8faec313863585cea05e5ddc9b55281bf6
3
+ metadata.gz: 6aeaaa91356179d4d35a74d8e2c2b00dba07e40b540d4ece946e6b3cac2c48ef
4
+ data.tar.gz: e8e7b7d548104c54e087623065313c0e358782abdf74a3000847b72e541438fa
5
5
  SHA512:
6
- metadata.gz: 94e44aaea6c605ee52b20551c96da87da53698ef3ec58841791ffbba6840bebde1d31e00afbbbf01821eceb2c39bee8e51decf8cafbab0c06212c5b11fd2f247
7
- data.tar.gz: 6e63e24b398aa950fe0a0228096eecd1797652c09828e5e17c01af37cdc42eca957725f8e4cfa0aa04eea1307cfe093e26f9935194d26129eda73f92d8cb56cb
6
+ metadata.gz: eb63631ceb917bfc4b6514db9bbf4da9cb0682eee9af7fab5b12ef045a16a09bbee18556c313739280778235bfaad7acee626e1a272e5f956ccc1bda19a4cea5
7
+ data.tar.gz: 5f842a8b143080d00c3134677277902ac88630ec01dd7a1ccf4ecae01fc162d3c7594a378a279b6168795597739ae312dc0342aeee3184b13caa4fb898802198
@@ -23,6 +23,9 @@ module Sidekiq
23
23
  LOCK_KEY = "#{MAIN_KEY}:lock"
24
24
  private_constant :LOCK_KEY
25
25
 
26
+ LAST_RUN_KEY = "#{MAIN_KEY}:last_run"
27
+ private_constant :LAST_RUN_KEY
28
+
26
29
  class << self
27
30
  def setup!
28
31
  @identity = Object.new.tap { |o| o.extend Sidekiq::Util }.identity
@@ -86,9 +89,18 @@ module Sidekiq
86
89
  end
87
90
  end
88
91
 
89
- def lock(&block)
92
+ def lock
90
93
  Sidekiq.redis do |redis|
91
- Redis::Lockers.acquire(redis, LOCK_KEY, :ttl => 30_000, &block)
94
+ Redis::Lockers.acquire(redis, LOCK_KEY, :ttl => 30_000) do
95
+ results = redis.pipelined { |r| [r.time, r.get(LAST_RUN_KEY)] }
96
+ distance = results[0][0] - results[1].to_i
97
+
98
+ return unless 60 < distance
99
+
100
+ yield
101
+
102
+ redis.set(LAST_RUN_KEY, redis.time.first)
103
+ end
92
104
  end
93
105
  end
94
106
 
@@ -1,3 +1,7 @@
1
- redis.call(ARGV[1], KEYS[1], ARGV[2])
2
- redis.call("LREM", KEYS[2], -1, ARGV[2])
3
- return 1
1
+ if 1 == redis.call("LREM", KEYS[2], -1, ARGV[2]) then
2
+ redis.call(ARGV[1], KEYS[1], ARGV[2])
3
+ return 1
4
+ end
5
+
6
+ return 0
7
+
@@ -3,6 +3,6 @@
3
3
  module Sidekiq
4
4
  module Ultimate
5
5
  # Gem version.
6
- VERSION = "0.0.1.alpha.12"
6
+ VERSION = "0.0.1.alpha.13"
7
7
  end
8
8
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: sidekiq-ultimate
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.1.alpha.12
4
+ version: 0.0.1.alpha.13
5
5
  platform: ruby
6
6
  authors:
7
7
  - Alexey Zapparov
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2018-09-12 00:00:00.000000000 Z
11
+ date: 2018-10-18 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: concurrent-ruby