redis_locks 0.0.2 → 0.0.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
  SHA1:
3
- metadata.gz: e975e1077350b297e9a2e29dd2c1874ee36015cd
4
- data.tar.gz: 43c25d4b9302e7530cbbfcaa12c9f75f81ad51b8
3
+ metadata.gz: 9c5d583e881ddb03eb3a27a20ec98600b66d756d
4
+ data.tar.gz: c2553b07d1bc3e33918ec0084410f4adeffc666d
5
5
  SHA512:
6
- metadata.gz: 836660edb41f89794435460298714126fb583cfe95655c6d915061a2d42660412309804724fcf2c2749be0b59daa20bb446e6014d499ef8b85f058394b6c3363
7
- data.tar.gz: f3ca402e401fbfc4a2cdac4167dc714ba327a7d58eb36d7b101fa875d2e77946d15c2876c757fb1523164e06a57c791e5df7e23b6d6da483e692d4b114569aff
6
+ metadata.gz: 04ba8f31d89668b2c872de19c14ee8896288db1f14de23301fa2b74bd9a27ea2305055b6f9105f4e3cabb304c3739c39dcf8a430a96d8a1661f96820636b9531
7
+ data.tar.gz: 240bdc28a11410e5a894687e28910d37d14f872fbfc2d762b56b9b80f8235134554d58151c52eb6186c97d0ac5afba5c3c36d31d84ec88c8881aa06b86f9e1fc
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- redis_locks (0.0.1)
4
+ redis_locks (0.0.3)
5
5
  redis
6
6
 
7
7
  GEM
@@ -20,15 +20,22 @@ module RedisLocks
20
20
  def lock(expires_at: nil, &block)
21
21
  now = Time.now.utc.to_i
22
22
  locked = false
23
- expires_at ||= now + @expires_in
23
+
24
+ if expires_at
25
+ expires_at = expires_at.to_i
26
+ else
27
+ expires_at = now + @expires_in
28
+ end
24
29
 
25
30
  if @redis.setnx(@key, expires_at)
26
31
  @redis.expire(@key, expires_at - now)
32
+ @expires_at = expires_at
27
33
  locked = true
28
34
  else # it was locked
29
35
  if (old_value = @redis.get(@key)).to_i <= now
30
36
  # lock has expired
31
37
  if @redis.getset(@key, expires_at) == old_value
38
+ @expires_at = expires_at
32
39
  locked = true
33
40
  end
34
41
  end
@@ -46,16 +53,15 @@ module RedisLocks
46
53
  end
47
54
 
48
55
  def unlock
49
- @redis.watch(@key) do
50
- # only delete the key if it's still valid, and will be for another 2 seconds
51
- if @redis.get(@key).to_i > Time.now.utc.to_i + 2
52
- @redis.multi do |multi|
53
- multi.del(@key)
54
- end
55
- else
56
- @redis.unwatch
57
- end
56
+ return unless @expires_at
57
+
58
+ # To prevent deleting a lock acquired from another process, only delete
59
+ # the key if it's still valid, and will be for another 2 seconds
60
+ if Time.now.utc.to_i - 2 < @expires_at
61
+ @redis.del(@key)
58
62
  end
63
+
64
+ @expires_at = nil
59
65
  end
60
66
 
61
67
  private
@@ -1,3 +1,3 @@
1
1
  module RedisLocks
2
- VERSION = '0.0.2'
2
+ VERSION = '0.0.3'
3
3
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: redis_locks
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.2
4
+ version: 0.0.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - Academia.edu
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2016-05-15 00:00:00.000000000 Z
11
+ date: 2016-05-16 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: redis