redis_locks 0.0.2 → 0.0.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/Gemfile.lock +1 -1
- data/lib/redis_locks/mutex.rb +16 -10
- data/lib/redis_locks/version.rb +1 -1
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 9c5d583e881ddb03eb3a27a20ec98600b66d756d
|
4
|
+
data.tar.gz: c2553b07d1bc3e33918ec0084410f4adeffc666d
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 04ba8f31d89668b2c872de19c14ee8896288db1f14de23301fa2b74bd9a27ea2305055b6f9105f4e3cabb304c3739c39dcf8a430a96d8a1661f96820636b9531
|
7
|
+
data.tar.gz: 240bdc28a11410e5a894687e28910d37d14f872fbfc2d762b56b9b80f8235134554d58151c52eb6186c97d0ac5afba5c3c36d31d84ec88c8881aa06b86f9e1fc
|
data/Gemfile.lock
CHANGED
data/lib/redis_locks/mutex.rb
CHANGED
@@ -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
|
-
|
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
|
-
@
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
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
|
data/lib/redis_locks/version.rb
CHANGED
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.
|
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-
|
11
|
+
date: 2016-05-16 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: redis
|