mongoid-semaphore 0.0.5 → 0.0.6
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/VERSION +1 -1
- data/lib/mongoid/lock/synch_methods.rb +49 -0
- data/lib/mongoid/lock.rb +24 -0
- data/lib/mongoid/semaphore/sync_methods.rb +21 -14
- data/lib/mongoid/semaphore.rb +0 -8
- data/lib/mongoid-semaphore.rb +2 -0
- data/mongoid-semaphore.gemspec +3 -1
- metadata +14 -12
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.0.
|
1
|
+
0.0.6
|
@@ -0,0 +1,49 @@
|
|
1
|
+
require 'socket'
|
2
|
+
|
3
|
+
module Mongoid
|
4
|
+
module Lock
|
5
|
+
|
6
|
+
def reset_lock!
|
7
|
+
self.update_attributes!({:sema_count => __semaphore_initial_count, :used_by => nil})
|
8
|
+
end
|
9
|
+
|
10
|
+
def lock_acquire
|
11
|
+
self.sema_down
|
12
|
+
if (self.sema_ready?)
|
13
|
+
self.set(:used_by, "#{Socket.hostname}:#{Process.pid}")
|
14
|
+
else
|
15
|
+
self.sema_up
|
16
|
+
raise Mongoid::Semaphore::UnsynchronizedAccess.new(self.sema_count, "Lock in Use! (#{self.used_by})")
|
17
|
+
end
|
18
|
+
end
|
19
|
+
|
20
|
+
def lock_release
|
21
|
+
if (self.used_by == "#{Socket.hostname}:#{Process.pid}")
|
22
|
+
self.sema_up
|
23
|
+
self.set(:used_by, nil)
|
24
|
+
end
|
25
|
+
end
|
26
|
+
|
27
|
+
|
28
|
+
def synchronized(&block)
|
29
|
+
self.lock_acquire
|
30
|
+
begin
|
31
|
+
block.call()
|
32
|
+
ensure
|
33
|
+
self.lock_release
|
34
|
+
end
|
35
|
+
end
|
36
|
+
|
37
|
+
def try_synchronized(&try_block)
|
38
|
+
return false unless self.sema_ready?
|
39
|
+
begin
|
40
|
+
self.synchronized do
|
41
|
+
try_block.call()
|
42
|
+
end
|
43
|
+
return true
|
44
|
+
rescue Mongoid::Semaphore::UnsynchronizedAccess => ua
|
45
|
+
return false
|
46
|
+
end
|
47
|
+
end
|
48
|
+
end
|
49
|
+
end
|
data/lib/mongoid/lock.rb
ADDED
@@ -0,0 +1,24 @@
|
|
1
|
+
require 'mongoid/semaphore'
|
2
|
+
|
3
|
+
module Mongoid
|
4
|
+
module Lock
|
5
|
+
extends Mongoid::Semaphore
|
6
|
+
|
7
|
+
# => Volatile Access, Reload to Ensure state
|
8
|
+
def used_by
|
9
|
+
self.save
|
10
|
+
self.reload
|
11
|
+
return super
|
12
|
+
end
|
13
|
+
|
14
|
+
def self.included(base)
|
15
|
+
base.class_eval do
|
16
|
+
include Mongoid::Semaphore
|
17
|
+
default_sema_count 1
|
18
|
+
field :used_by, :type => String, :default => nil
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
23
|
+
|
24
|
+
require 'mongoid/lock/synch_methods'
|
@@ -1,31 +1,38 @@
|
|
1
|
-
require 'socket'
|
2
|
-
|
3
1
|
module Mongoid
|
4
2
|
module Semaphore
|
5
3
|
def reset_semaphore!
|
6
|
-
self.update_attributes!({:sema_count =>
|
4
|
+
self.update_attributes!({:sema_count => __semaphore_initial_count})
|
5
|
+
end
|
6
|
+
|
7
|
+
def sema_up
|
8
|
+
self.inc(:sema_count, 1)
|
9
|
+
end
|
10
|
+
|
11
|
+
def sema_down
|
12
|
+
self.dec(:sema_count, 1)
|
13
|
+
end
|
14
|
+
|
15
|
+
def sema_ready?
|
16
|
+
self.save()
|
17
|
+
self.reload()
|
18
|
+
return (self.sema_count >= 0)
|
7
19
|
end
|
8
20
|
|
9
21
|
def synchronized(&block)
|
10
22
|
begin
|
11
|
-
self.
|
12
|
-
if (self.
|
13
|
-
|
14
|
-
self.set(:used_by, "#{Socket.gethostname}:#{Process.pid}")
|
15
|
-
block.call(self)
|
16
|
-
ensure
|
17
|
-
self.set(:used_by, nil)
|
18
|
-
end
|
23
|
+
self.sema_down
|
24
|
+
if (self.sema_ready?)
|
25
|
+
block.call()
|
19
26
|
else
|
20
|
-
raise Mongoid::Semaphore::UnsynchronizedAccess.new(self.sema_count
|
27
|
+
raise Mongoid::Semaphore::UnsynchronizedAccess.new(self.sema_count)
|
21
28
|
end
|
22
29
|
ensure
|
23
|
-
self.
|
30
|
+
self.sema_up
|
24
31
|
end
|
25
32
|
end
|
26
33
|
|
27
34
|
def try_synchronized(&try_block)
|
28
|
-
return false unless self.
|
35
|
+
return false unless self.sema_ready?
|
29
36
|
begin
|
30
37
|
self.synchronized do
|
31
38
|
try_block.call()
|
data/lib/mongoid/semaphore.rb
CHANGED
@@ -23,12 +23,6 @@ module Mongoid
|
|
23
23
|
self.reload
|
24
24
|
return super
|
25
25
|
end
|
26
|
-
# => Volatile Value, Refresh Before Returning
|
27
|
-
def used_by
|
28
|
-
self.save()
|
29
|
-
self.reload
|
30
|
-
return super
|
31
|
-
end
|
32
26
|
#------------------------------------------------------------------------------
|
33
27
|
# => Inclusion hook. Adds fields, and default attributes
|
34
28
|
#------------------------------------------------------------------------------
|
@@ -42,8 +36,6 @@ module Mongoid
|
|
42
36
|
base.extend(Mongoid::Semaphore::ClassMethods)
|
43
37
|
# => Semaphore Counter
|
44
38
|
field :sema_count, :type => Integer, :default => lambda { __semaphore_initial_count }
|
45
|
-
# => Semaphore is currently held by "<hostname>:<pid>" || nil
|
46
|
-
field :used_by, :type => String, :default => nil
|
47
39
|
end
|
48
40
|
end
|
49
41
|
end
|
data/lib/mongoid-semaphore.rb
CHANGED
@@ -6,10 +6,12 @@ if (defined?(Rails) and Rails.version.to_i > 3)
|
|
6
6
|
railtie_name :"mongoid-semaphore"
|
7
7
|
initializer "mongoid-semaphore.load_dependencies" do
|
8
8
|
require 'mongoid/semaphore'
|
9
|
+
require 'mongoid/lock'
|
9
10
|
end
|
10
11
|
end
|
11
12
|
end
|
12
13
|
end
|
13
14
|
else
|
14
15
|
require 'mongoid/semaphore'
|
16
|
+
require 'mongoid/lock'
|
15
17
|
end
|
data/mongoid-semaphore.gemspec
CHANGED
@@ -5,7 +5,7 @@
|
|
5
5
|
|
6
6
|
Gem::Specification.new do |s|
|
7
7
|
s.name = "mongoid-semaphore"
|
8
|
-
s.version = "0.0.
|
8
|
+
s.version = "0.0.6"
|
9
9
|
|
10
10
|
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
11
11
|
s.authors = ["James Petty"]
|
@@ -24,6 +24,8 @@ Gem::Specification.new do |s|
|
|
24
24
|
"Rakefile",
|
25
25
|
"VERSION",
|
26
26
|
"lib/mongoid-semaphore.rb",
|
27
|
+
"lib/mongoid/lock.rb",
|
28
|
+
"lib/mongoid/lock/synch_methods.rb",
|
27
29
|
"lib/mongoid/semaphore.rb",
|
28
30
|
"lib/mongoid/semaphore/class_methods.rb",
|
29
31
|
"lib/mongoid/semaphore/sync_methods.rb",
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: mongoid-semaphore
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.6
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -13,7 +13,7 @@ date: 2012-03-26 00:00:00.000000000 Z
|
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: mongoid
|
16
|
-
requirement: &
|
16
|
+
requirement: &15839100 !ruby/object:Gem::Requirement
|
17
17
|
none: false
|
18
18
|
requirements:
|
19
19
|
- - ! '>='
|
@@ -21,10 +21,10 @@ dependencies:
|
|
21
21
|
version: '0'
|
22
22
|
type: :runtime
|
23
23
|
prerelease: false
|
24
|
-
version_requirements: *
|
24
|
+
version_requirements: *15839100
|
25
25
|
- !ruby/object:Gem::Dependency
|
26
26
|
name: shoulda
|
27
|
-
requirement: &
|
27
|
+
requirement: &15838160 !ruby/object:Gem::Requirement
|
28
28
|
none: false
|
29
29
|
requirements:
|
30
30
|
- - ! '>='
|
@@ -32,10 +32,10 @@ dependencies:
|
|
32
32
|
version: '0'
|
33
33
|
type: :development
|
34
34
|
prerelease: false
|
35
|
-
version_requirements: *
|
35
|
+
version_requirements: *15838160
|
36
36
|
- !ruby/object:Gem::Dependency
|
37
37
|
name: bundler
|
38
|
-
requirement: &
|
38
|
+
requirement: &15835940 !ruby/object:Gem::Requirement
|
39
39
|
none: false
|
40
40
|
requirements:
|
41
41
|
- - ~>
|
@@ -43,10 +43,10 @@ dependencies:
|
|
43
43
|
version: 1.0.0
|
44
44
|
type: :development
|
45
45
|
prerelease: false
|
46
|
-
version_requirements: *
|
46
|
+
version_requirements: *15835940
|
47
47
|
- !ruby/object:Gem::Dependency
|
48
48
|
name: jeweler
|
49
|
-
requirement: &
|
49
|
+
requirement: &15834320 !ruby/object:Gem::Requirement
|
50
50
|
none: false
|
51
51
|
requirements:
|
52
52
|
- - ~>
|
@@ -54,10 +54,10 @@ dependencies:
|
|
54
54
|
version: 1.6.4
|
55
55
|
type: :development
|
56
56
|
prerelease: false
|
57
|
-
version_requirements: *
|
57
|
+
version_requirements: *15834320
|
58
58
|
- !ruby/object:Gem::Dependency
|
59
59
|
name: rcov
|
60
|
-
requirement: &
|
60
|
+
requirement: &15832960 !ruby/object:Gem::Requirement
|
61
61
|
none: false
|
62
62
|
requirements:
|
63
63
|
- - ! '>='
|
@@ -65,7 +65,7 @@ dependencies:
|
|
65
65
|
version: '0'
|
66
66
|
type: :development
|
67
67
|
prerelease: false
|
68
|
-
version_requirements: *
|
68
|
+
version_requirements: *15832960
|
69
69
|
description: Adds Semaphore-like behaviors to a Mongoid::Document instance
|
70
70
|
email: jp@jibe.com
|
71
71
|
executables: []
|
@@ -81,6 +81,8 @@ files:
|
|
81
81
|
- Rakefile
|
82
82
|
- VERSION
|
83
83
|
- lib/mongoid-semaphore.rb
|
84
|
+
- lib/mongoid/lock.rb
|
85
|
+
- lib/mongoid/lock/synch_methods.rb
|
84
86
|
- lib/mongoid/semaphore.rb
|
85
87
|
- lib/mongoid/semaphore/class_methods.rb
|
86
88
|
- lib/mongoid/semaphore/sync_methods.rb
|
@@ -102,7 +104,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
102
104
|
version: '0'
|
103
105
|
segments:
|
104
106
|
- 0
|
105
|
-
hash:
|
107
|
+
hash: 1476559913060575075
|
106
108
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
107
109
|
none: false
|
108
110
|
requirements:
|