daemon_runner 0.4.1 → 0.4.2
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/README.md +1 -1
- data/examples/example_semaphore.rb +23 -3
- data/examples/example_semaphore_release.rb +5 -1
- data/lib/daemon_runner/semaphore.rb +7 -5
- 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: 8f9b54559e80630efbf1a6a5b6f459888cd296f9
|
4
|
+
data.tar.gz: a7f763bdc385cc88ee530550476d9c4baf1a3cd3
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: ed46495953d0fdb759470475c3f25b97428be13a3c25f391a3b3271d18ffd808e69ff2b79dfd949be36b6ca649c436f4413c1dc2dd78ca3a9244b126a861ca85
|
7
|
+
data.tar.gz: 332319f3d280c60481831f5a1d4e8abe0059517bb4bb79bd19d6cb508521f6b9f43b28c1b5300ebc7843432a0016f83d25f1366f8cfc4cbb72a4624b199c1d5f
|
data/README.md
CHANGED
@@ -168,7 +168,7 @@ Locking can be done either via an exclusive lock or a semaphore lock. The major
|
|
168
168
|
**TBD**
|
169
169
|
|
170
170
|
#### Semaphore Lock
|
171
|
-
For an example of how to implement semaphore locking take a look at the [example](/examples/example_semaphore.rb)
|
171
|
+
For an example of how to implement semaphore locking take a look at the [manual locking example](/examples/example_semaphore.rb) and the [slightly more automatic version](/examples/example_semaphore_release.rb).
|
172
172
|
|
173
173
|
|
174
174
|
## Development
|
@@ -5,7 +5,27 @@ require 'dev/consul'
|
|
5
5
|
|
6
6
|
@service = 'myservice'
|
7
7
|
@lock_count = 3
|
8
|
-
@
|
8
|
+
@lock_time = 10
|
9
9
|
|
10
|
-
|
11
|
-
|
10
|
+
::Dev::Consul.run
|
11
|
+
::Dev::Consul.wait
|
12
|
+
|
13
|
+
# Get a new semaphore
|
14
|
+
@semaphore = DaemonRunner::Semaphore.lock(@service, @lock_count)
|
15
|
+
|
16
|
+
# Spawn a thread to handle renewing the lock
|
17
|
+
@renew_thread = @semaphore.renew
|
18
|
+
|
19
|
+
# Do whatever kind of work you want
|
20
|
+
@lock_time.downto(0).each do |i|
|
21
|
+
puts "Releasing lock in #{i} seconds"
|
22
|
+
sleep 1
|
23
|
+
end
|
24
|
+
|
25
|
+
# Kill the thread when you're done
|
26
|
+
@renew_thread.kill
|
27
|
+
|
28
|
+
# Explicitly release the semaphore when you're done
|
29
|
+
@semaphore.release
|
30
|
+
|
31
|
+
::Dev::Consul.stop
|
@@ -5,12 +5,16 @@ require 'dev/consul'
|
|
5
5
|
|
6
6
|
@service = 'myreleaseservice'
|
7
7
|
@lock_count = 3
|
8
|
-
@locked = false
|
9
8
|
@lock_time = 10
|
10
9
|
|
10
|
+
::Dev::Consul.run
|
11
|
+
::Dev::Consul.wait
|
12
|
+
|
11
13
|
DaemonRunner::Semaphore.lock(@service, @lock_count) do
|
12
14
|
@lock_time.downto(0).each do |i|
|
13
15
|
puts "Releasing lock in #{i} seconds"
|
14
16
|
sleep 1
|
15
17
|
end
|
16
18
|
end
|
19
|
+
|
20
|
+
::Dev::Consul.stop
|
@@ -19,17 +19,19 @@ module DaemonRunner
|
|
19
19
|
semaphore = Semaphore.new(options)
|
20
20
|
semaphore.lock
|
21
21
|
if block_given?
|
22
|
-
|
23
|
-
|
22
|
+
begin
|
23
|
+
lock_thr = semaphore.renew
|
24
|
+
yield
|
25
|
+
ensure
|
26
|
+
lock_thr.kill unless lock_thr.nil?
|
27
|
+
semaphore.release
|
28
|
+
end
|
24
29
|
end
|
25
30
|
semaphore
|
26
31
|
rescue Exception => e
|
27
32
|
logger.error e
|
28
33
|
logger.debug e.backtrace.join("\n")
|
29
34
|
raise
|
30
|
-
ensure
|
31
|
-
lock_thr.kill
|
32
|
-
semaphore.release
|
33
35
|
end
|
34
36
|
end
|
35
37
|
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: daemon_runner
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.4.
|
4
|
+
version: 0.4.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Andrew Thompson
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2016-11-
|
11
|
+
date: 2016-11-18 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: logging
|