gcslock 1.0.0 → 1.0.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.
- 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
|