dlm 0.1.0
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 +7 -0
- data/dlm.rb +38 -0
- metadata +44 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: b12c90272ad819753ab9ce459ffb166a0a7f787e
|
4
|
+
data.tar.gz: 758425312b4663c1489c927361ed10b962ee8471
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: 0d70e8423ddb0f7de027c77d403e5214b81d0d02077e19ae99462afd4b8fe58fedd7f91a9df84385f8515dc0933dc0c39555306b6c72bc0b33725eb3dc8407e7
|
7
|
+
data.tar.gz: 7bb9046cfab1fbd78d1b76cd05fb1f1a8a78a23dd308acb48a817edbe6b20ef2125874779c5950ddb6241ad761bf9adbabc93fc48e6f1f25736d648a492f8a5c
|
data/dlm.rb
ADDED
@@ -0,0 +1,38 @@
|
|
1
|
+
require 'redis'
|
2
|
+
|
3
|
+
class DLMLockTaken < StandardError
|
4
|
+
end
|
5
|
+
|
6
|
+
class DLM
|
7
|
+
def initialize(redis=Redis.new)
|
8
|
+
@redis = redis
|
9
|
+
end
|
10
|
+
|
11
|
+
def lock(what, block = false, lockinfo = 1)
|
12
|
+
if block
|
13
|
+
self.wait(what)
|
14
|
+
end
|
15
|
+
ret = @redis.set("dlm_#{what}", lockinfo, :nx => true)
|
16
|
+
raise DLMLockTaken, "Lock is already taken for #{what}: dlm_#{what}" unless ret
|
17
|
+
end
|
18
|
+
|
19
|
+
def wait(what)
|
20
|
+
while ! @redis.get("dlm_#{what}").nil?
|
21
|
+
sleep(0.1)
|
22
|
+
end
|
23
|
+
end
|
24
|
+
|
25
|
+
def lockinfo(what)
|
26
|
+
@redis.get("dlm_#{what}")
|
27
|
+
end
|
28
|
+
|
29
|
+
def unlock(what)
|
30
|
+
@redis.del("dlm_#{what}")
|
31
|
+
end
|
32
|
+
|
33
|
+
def unlockall
|
34
|
+
keys = @redis.keys("dlm_*")
|
35
|
+
@redis.del(keys) unless keys.empty?
|
36
|
+
end
|
37
|
+
|
38
|
+
end
|
metadata
ADDED
@@ -0,0 +1,44 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: dlm
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.1.0
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Sascha Spreitzer
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
date: 2018-05-14 00:00:00.000000000 Z
|
12
|
+
dependencies: []
|
13
|
+
description: Conservative redis based ruby distributed lock manager
|
14
|
+
email: sascha@redhat.com
|
15
|
+
executables: []
|
16
|
+
extensions: []
|
17
|
+
extra_rdoc_files: []
|
18
|
+
files:
|
19
|
+
- dlm.rb
|
20
|
+
homepage: http://github.com/sspreitzer/dlm
|
21
|
+
licenses:
|
22
|
+
- MIT
|
23
|
+
metadata: {}
|
24
|
+
post_install_message:
|
25
|
+
rdoc_options: []
|
26
|
+
require_paths:
|
27
|
+
- lib
|
28
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
29
|
+
requirements:
|
30
|
+
- - ">="
|
31
|
+
- !ruby/object:Gem::Version
|
32
|
+
version: '0'
|
33
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
34
|
+
requirements:
|
35
|
+
- - ">="
|
36
|
+
- !ruby/object:Gem::Version
|
37
|
+
version: '0'
|
38
|
+
requirements: []
|
39
|
+
rubyforge_project:
|
40
|
+
rubygems_version: 2.6.14
|
41
|
+
signing_key:
|
42
|
+
specification_version: 4
|
43
|
+
summary: Distributed Lock Manager
|
44
|
+
test_files: []
|