process_lock 0.1.0 → 0.1.1
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.
- data/README.md +19 -69
- data/lib/process_lock/version.rb +1 -1
- data/process_lock.gemspec +1 -1
- metadata +64 -75
data/README.md
CHANGED
@@ -1,8 +1,9 @@
|
|
1
1
|
# ProcessLock
|
2
2
|
|
3
3
|
A simple class to acquire and check process-id file based locks on a unix filesystem.
|
4
|
+
Can also be used to see if a process is already running or designate a master process when running concurrent applications.
|
4
5
|
|
5
|
-
[](https://travis-ci.org/ianheggie/process_lock)
|
6
7
|
|
7
8
|
## Installation
|
8
9
|
|
@@ -21,7 +22,7 @@ Or install it yourself as:
|
|
21
22
|
## Usage
|
22
23
|
|
23
24
|
Create an instance of ProcessLock with a filename as the lock.
|
24
|
-
You may have more than one lock per process.
|
25
|
+
You may have more than one lock (with different names) per process.
|
25
26
|
|
26
27
|
Methods:
|
27
28
|
* acquire - Acquires a lock if it can. Returns true (or value of block if block is passed) if a lock was acquired, otherwise false.
|
@@ -33,11 +34,11 @@ Methods:
|
|
33
34
|
|
34
35
|
Note:
|
35
36
|
* locks don't stack - if we have already acquired the lock subsequent calls will reacquire the lock. releasing an already released lock will fail.
|
36
|
-
* If Rails.root is defined then lock files will be put in tmp/pids
|
37
|
+
* If Rails.root is defined then lock files without path separators (/) will be put in tmp/pids. If no extension is specified then .pid will be appended.
|
37
38
|
|
38
39
|
To acquire a lock, do some work and then release it:
|
39
40
|
|
40
|
-
pl = ProcessLock.new('tmp/name_of_lock.
|
41
|
+
pl = ProcessLock.new('tmp/name_of_lock.lock')
|
41
42
|
|
42
43
|
acquired = pl.acquire do
|
43
44
|
puts "Do some work!"
|
@@ -53,74 +54,23 @@ To acquire a lock, do some work and then release it:
|
|
53
54
|
puts "Do some work!"
|
54
55
|
pl.release
|
55
56
|
|
57
|
+
To allow many worker processes to self organise and identify a leader process. (Simon and my implementation have diverged).
|
56
58
|
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
>> require 'process_lock'
|
62
|
-
=> true
|
63
|
-
>> Process.pid
|
64
|
-
=> 16568
|
65
|
-
>> p = ProcessLock.new('tmp/example.tmp')
|
66
|
-
=> #<ProcessLock:0x00000001489c10 @filename="tmp/example.tmp">
|
67
|
-
>> p.alive?
|
68
|
-
=> false
|
69
|
-
>> p.owner?
|
70
|
-
=> false
|
71
|
-
>> p.read
|
72
|
-
=> 0
|
73
|
-
|
74
|
-
>> p.acquire!
|
59
|
+
IRB 1>>
|
60
|
+
pl = ProcessLock.new('example.tmp')
|
61
|
+
pl.acquire
|
75
62
|
=> true
|
63
|
+
pl.read
|
64
|
+
=> "2435"
|
76
65
|
|
77
|
-
>>
|
78
|
-
|
79
|
-
|
80
|
-
=> true
|
81
|
-
>> p.read
|
82
|
-
=> 16568
|
83
|
-
>> sleep(10)
|
84
|
-
=> 10
|
85
|
-
>> p.release!
|
86
|
-
=> true
|
87
|
-
>> p.alive?
|
88
|
-
=> false
|
89
|
-
>> p.owner?
|
90
|
-
=> false
|
91
|
-
>> p.read
|
92
|
-
=> 0
|
93
|
-
|
94
|
-
2nd irb, run after first has acquired the lock
|
95
|
-
|
96
|
-
>> require 'process_lock'
|
97
|
-
=> true
|
98
|
-
>> Process.pid
|
99
|
-
=> 16569
|
100
|
-
>> q = ProcessLock.new('tmp/example.tmp')
|
101
|
-
=> #<ProcessLock:0x000000026e4090 @filename="tmp/example.tmp">
|
102
|
-
>> q.alive?
|
103
|
-
=> true
|
104
|
-
>> q.owner?
|
105
|
-
=> false
|
106
|
-
>> q.read
|
107
|
-
=> 16568
|
108
|
-
|
109
|
-
>> q.acquire!
|
110
|
-
ProcessLock::AlreadyLocked: Unable to acquire lock
|
111
|
-
from /home/ianh/Projects/Github/ruby-process-lock/lib/process_lock.rb:28:in `acquire!'
|
112
|
-
from (irb):7
|
113
|
-
from /home/ianh/.rbenv/versions/1.9.3-p484/bin/irb:12:in `<main>'
|
114
|
-
|
115
|
-
>> q.alive?
|
116
|
-
=> true
|
117
|
-
>> q.owner?
|
66
|
+
IRB 2>>
|
67
|
+
pl = ProcessLock.new('example.tmp')
|
68
|
+
pl.acquire
|
118
69
|
=> false
|
119
|
-
|
120
|
-
=>
|
121
|
-
>>
|
70
|
+
pl.read
|
71
|
+
=> "2435"
|
122
72
|
|
123
|
-
example.tmp will contain the pid of the
|
73
|
+
example.tmp will contain the pid of the leader process
|
124
74
|
|
125
75
|
## Contributing
|
126
76
|
|
@@ -132,7 +82,7 @@ example.tmp will contain the pid of the running process
|
|
132
82
|
|
133
83
|
## License and contributions
|
134
84
|
|
135
|
-
*
|
136
|
-
* Subsequent work by Ian Heggie: packaged into a gem, added tests and acquire method, fixed
|
85
|
+
* Copyright (c) 2008 Simon Engledew, released under the MIT license: https://github.com/simon-engledew/ruby-process-lock .
|
86
|
+
* Subsequent work by Ian Heggie: packaged into a gem, added tests and acquire method, fixed some bugs.
|
137
87
|
* See git log for other contributers
|
138
88
|
|
data/lib/process_lock/version.rb
CHANGED
data/process_lock.gemspec
CHANGED
@@ -10,7 +10,7 @@ Gem::Specification.new do |spec|
|
|
10
10
|
spec.email = ["ian@heggie.biz"]
|
11
11
|
spec.description = %q{A simple class to aquire and check process-id file based locks on a unix filesystem.}
|
12
12
|
spec.summary = %q{Use process lock to see if a process is already running or designate a master process when running concurrent applications.}
|
13
|
-
spec.homepage = "https://github.com/ianheggie/
|
13
|
+
spec.homepage = "https://github.com/ianheggie/process_lock"
|
14
14
|
spec.license = "MIT"
|
15
15
|
|
16
16
|
spec.files = `git ls-files`.split($/)
|
metadata
CHANGED
@@ -1,77 +1,73 @@
|
|
1
|
-
--- !ruby/object:Gem::Specification
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
2
|
name: process_lock
|
3
|
-
version: !ruby/object:Gem::Version
|
4
|
-
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.1.1
|
5
5
|
prerelease:
|
6
|
-
segments:
|
7
|
-
- 0
|
8
|
-
- 1
|
9
|
-
- 0
|
10
|
-
version: 0.1.0
|
11
6
|
platform: ruby
|
12
|
-
authors:
|
7
|
+
authors:
|
13
8
|
- Simon Engledew
|
14
9
|
- Ian Heggie
|
15
10
|
autorequire:
|
16
11
|
bindir: bin
|
17
12
|
cert_chain: []
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
- !ruby/object:Gem::Dependency
|
13
|
+
date: 2014-02-17 00:00:00.000000000 Z
|
14
|
+
dependencies:
|
15
|
+
- !ruby/object:Gem::Dependency
|
22
16
|
name: bundler
|
23
|
-
|
24
|
-
requirement: &id001 !ruby/object:Gem::Requirement
|
17
|
+
requirement: !ruby/object:Gem::Requirement
|
25
18
|
none: false
|
26
|
-
requirements:
|
19
|
+
requirements:
|
27
20
|
- - ~>
|
28
|
-
- !ruby/object:Gem::Version
|
29
|
-
|
30
|
-
segments:
|
31
|
-
- 1
|
32
|
-
- 3
|
33
|
-
version: "1.3"
|
21
|
+
- !ruby/object:Gem::Version
|
22
|
+
version: '1.3'
|
34
23
|
type: :development
|
35
|
-
version_requirements: *id001
|
36
|
-
- !ruby/object:Gem::Dependency
|
37
|
-
name: rake
|
38
24
|
prerelease: false
|
39
|
-
|
25
|
+
version_requirements: !ruby/object:Gem::Requirement
|
26
|
+
none: false
|
27
|
+
requirements:
|
28
|
+
- - ~>
|
29
|
+
- !ruby/object:Gem::Version
|
30
|
+
version: '1.3'
|
31
|
+
- !ruby/object:Gem::Dependency
|
32
|
+
name: rake
|
33
|
+
requirement: !ruby/object:Gem::Requirement
|
40
34
|
none: false
|
41
|
-
requirements:
|
42
|
-
- -
|
43
|
-
- !ruby/object:Gem::Version
|
44
|
-
|
45
|
-
segments:
|
46
|
-
- 0
|
47
|
-
version: "0"
|
35
|
+
requirements:
|
36
|
+
- - ! '>='
|
37
|
+
- !ruby/object:Gem::Version
|
38
|
+
version: '0'
|
48
39
|
type: :development
|
49
|
-
version_requirements: *id002
|
50
|
-
- !ruby/object:Gem::Dependency
|
51
|
-
name: rspec
|
52
40
|
prerelease: false
|
53
|
-
|
41
|
+
version_requirements: !ruby/object:Gem::Requirement
|
54
42
|
none: false
|
55
|
-
requirements:
|
43
|
+
requirements:
|
44
|
+
- - ! '>='
|
45
|
+
- !ruby/object:Gem::Version
|
46
|
+
version: '0'
|
47
|
+
- !ruby/object:Gem::Dependency
|
48
|
+
name: rspec
|
49
|
+
requirement: !ruby/object:Gem::Requirement
|
50
|
+
none: false
|
51
|
+
requirements:
|
56
52
|
- - ~>
|
57
|
-
- !ruby/object:Gem::Version
|
58
|
-
|
59
|
-
segments:
|
60
|
-
- 2
|
61
|
-
- 0
|
62
|
-
version: "2.0"
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: '2.0'
|
63
55
|
type: :development
|
64
|
-
|
65
|
-
|
66
|
-
|
56
|
+
prerelease: false
|
57
|
+
version_requirements: !ruby/object:Gem::Requirement
|
58
|
+
none: false
|
59
|
+
requirements:
|
60
|
+
- - ~>
|
61
|
+
- !ruby/object:Gem::Version
|
62
|
+
version: '2.0'
|
63
|
+
description: A simple class to aquire and check process-id file based locks on a unix
|
64
|
+
filesystem.
|
65
|
+
email:
|
67
66
|
- ian@heggie.biz
|
68
67
|
executables: []
|
69
|
-
|
70
68
|
extensions: []
|
71
|
-
|
72
69
|
extra_rdoc_files: []
|
73
|
-
|
74
|
-
files:
|
70
|
+
files:
|
75
71
|
- .gitignore
|
76
72
|
- .rspec
|
77
73
|
- .travis.yml
|
@@ -85,40 +81,33 @@ files:
|
|
85
81
|
- spec/process_lock_spec.rb
|
86
82
|
- spec/run_example.sh
|
87
83
|
- spec/spec_helper.rb
|
88
|
-
homepage: https://github.com/ianheggie/
|
89
|
-
licenses:
|
84
|
+
homepage: https://github.com/ianheggie/process_lock
|
85
|
+
licenses:
|
90
86
|
- MIT
|
91
87
|
post_install_message:
|
92
88
|
rdoc_options: []
|
93
|
-
|
94
|
-
require_paths:
|
89
|
+
require_paths:
|
95
90
|
- lib
|
96
|
-
required_ruby_version: !ruby/object:Gem::Requirement
|
91
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
97
92
|
none: false
|
98
|
-
requirements:
|
99
|
-
- -
|
100
|
-
- !ruby/object:Gem::Version
|
101
|
-
|
102
|
-
|
103
|
-
- 0
|
104
|
-
version: "0"
|
105
|
-
required_rubygems_version: !ruby/object:Gem::Requirement
|
93
|
+
requirements:
|
94
|
+
- - ! '>='
|
95
|
+
- !ruby/object:Gem::Version
|
96
|
+
version: '0'
|
97
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
106
98
|
none: false
|
107
|
-
requirements:
|
108
|
-
- -
|
109
|
-
- !ruby/object:Gem::Version
|
110
|
-
|
111
|
-
segments:
|
112
|
-
- 0
|
113
|
-
version: "0"
|
99
|
+
requirements:
|
100
|
+
- - ! '>='
|
101
|
+
- !ruby/object:Gem::Version
|
102
|
+
version: '0'
|
114
103
|
requirements: []
|
115
|
-
|
116
104
|
rubyforge_project:
|
117
|
-
rubygems_version: 1.8.
|
105
|
+
rubygems_version: 1.8.23
|
118
106
|
signing_key:
|
119
107
|
specification_version: 3
|
120
|
-
summary: Use process lock to see if a process is already running or designate a master
|
121
|
-
|
108
|
+
summary: Use process lock to see if a process is already running or designate a master
|
109
|
+
process when running concurrent applications.
|
110
|
+
test_files:
|
122
111
|
- spec/other_process.sh
|
123
112
|
- spec/process_lock_spec.rb
|
124
113
|
- spec/run_example.sh
|