gcslock 1.0.0 → 1.0.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/gcslock.gemspec +1 -1
- data/lib/gcslock/mutex.rb +9 -4
- data/lib/gcslock/version.rb +1 -1
- data/spec/gcslock/mutex_spec.rb +2 -2
- metadata +5 -5
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 1d0120bfbfe6842595ebbdcdb1108937c61ee4e04ea71214ae0027b0ed0e68e1
|
4
|
+
data.tar.gz: 6002bf7b00837cf7685400909d550104ced2fc6b99fe22097589c6fde59b6ae7
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 3bea490c78bb1e57788500046967379c4f69862e7b49c03eae367547233b811671c0316152ff231d643dbd70378775af3786d292a4d0c7d557fa3b34e53986f2
|
7
|
+
data.tar.gz: 9388122c6c3a2c3db1250177f4e75dc040de63cb5d0a9f839533a4bb02d7d2d9a143eec0e415466880267b0ed04a770c1437f012bb6c1aa564b4ce31c0ebca8d
|
data/gcslock.gemspec
CHANGED
@@ -22,7 +22,7 @@ Gem::Specification.new do |spec|
|
|
22
22
|
spec.required_ruby_version = '>= 2.0'
|
23
23
|
|
24
24
|
spec.add_runtime_dependency 'google-api-client'
|
25
|
-
spec.add_runtime_dependency 'google-cloud-storage', '
|
25
|
+
spec.add_runtime_dependency 'google-cloud-storage', '>= 1.24.0'
|
26
26
|
|
27
27
|
spec.add_development_dependency 'rspec'
|
28
28
|
spec.add_development_dependency 'codecov'
|
data/lib/gcslock/mutex.rb
CHANGED
@@ -21,18 +21,21 @@ module GCSLock
|
|
21
21
|
raise LockAlreadyOwnedError, "Mutex for #{@object.name} is already owned by this process" if owned?
|
22
22
|
|
23
23
|
backoff = @min_backoff
|
24
|
-
|
24
|
+
|
25
|
+
now = Time.now
|
26
|
+
end_time = now + timeout unless timeout.nil?
|
25
27
|
|
26
28
|
loop do
|
27
29
|
return true if try_lock
|
28
|
-
break if !timeout.nil? &&
|
30
|
+
break if !timeout.nil? && now + backoff >= end_time
|
29
31
|
sleep(backoff)
|
30
32
|
|
31
33
|
backoff_opts = [@max_backoff, backoff * 2]
|
32
34
|
|
33
35
|
unless timeout.nil?
|
34
|
-
|
35
|
-
|
36
|
+
now = Time.now
|
37
|
+
diff = end_time - now
|
38
|
+
backoff_opts.push(diff) if diff > 0
|
36
39
|
end
|
37
40
|
|
38
41
|
backoff = backoff_opts.min
|
@@ -45,6 +48,8 @@ module GCSLock
|
|
45
48
|
def locked?
|
46
49
|
@object.reload!
|
47
50
|
@object.exists?
|
51
|
+
rescue Google::Cloud::NotFoundError
|
52
|
+
false
|
48
53
|
end
|
49
54
|
|
50
55
|
# Returns `true` if this lock is currently held by current thread.
|
data/lib/gcslock/version.rb
CHANGED
data/spec/gcslock/mutex_spec.rb
CHANGED
@@ -83,8 +83,8 @@ describe GCSLock::Mutex do
|
|
83
83
|
|
84
84
|
it 'sleeps just the time needed to retry once at the end' do
|
85
85
|
expect(@mutex).to receive(:owned?).once.and_return(false)
|
86
|
-
expect(@mutex).to receive(:sleep).
|
87
|
-
expect(@mutex).to receive(:try_lock).
|
86
|
+
expect(@mutex).to receive(:sleep).at_least(2).times
|
87
|
+
expect(@mutex).to receive(:try_lock).at_least(3).times.and_return(false)
|
88
88
|
|
89
89
|
expect do
|
90
90
|
@mutex.lock(timeout: 0.03)
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: gcslock
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.0.
|
4
|
+
version: 1.0.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Raphaël Beamonte
|
@@ -28,16 +28,16 @@ dependencies:
|
|
28
28
|
name: google-cloud-storage
|
29
29
|
requirement: !ruby/object:Gem::Requirement
|
30
30
|
requirements:
|
31
|
-
- - "
|
31
|
+
- - ">="
|
32
32
|
- !ruby/object:Gem::Version
|
33
|
-
version: 1.
|
33
|
+
version: 1.24.0
|
34
34
|
type: :runtime
|
35
35
|
prerelease: false
|
36
36
|
version_requirements: !ruby/object:Gem::Requirement
|
37
37
|
requirements:
|
38
|
-
- - "
|
38
|
+
- - ">="
|
39
39
|
- !ruby/object:Gem::Version
|
40
|
-
version: 1.
|
40
|
+
version: 1.24.0
|
41
41
|
- !ruby/object:Gem::Dependency
|
42
42
|
name: rspec
|
43
43
|
requirement: !ruby/object:Gem::Requirement
|