redlock 2.0.4 → 2.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.
- checksums.yaml +4 -4
- data/lib/redlock/client.rb +7 -11
- data/lib/redlock/version.rb +1 -1
- data/spec/client_spec.rb +12 -6
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 9dd90bf121367947d80385e0e24ec5aabe59e0e5452ee0d6dc7904fbd0a93fc7
|
4
|
+
data.tar.gz: d42662fb6a39139c47a9b0eff70efcdf5f59c067a1ab9d2205d0d881a94f2a73
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 3461e69ab931dd23bb5cf7a6d6d819a0fecf76eccb62a37e058e27a40780a5a9141f56b3d274ca94e4e51dd3edd9cd0c767ed8b3b2d6d6c33a5590d7b4531136
|
7
|
+
data.tar.gz: e29da6290a7192dc20ed68171c793a8b682a8849ecced7fab68d72a289f033661296846f4c908a82579a43bb5dbfa51cdd5392bef8ef728eaca5f4275d61addd
|
data/lib/redlock/client.rb
CHANGED
@@ -157,24 +157,19 @@ module Redlock
|
|
157
157
|
private
|
158
158
|
|
159
159
|
class RedisInstance
|
160
|
-
module ConnectionPoolLike
|
161
|
-
def with
|
162
|
-
yield self
|
163
|
-
end
|
164
|
-
end
|
165
|
-
|
166
160
|
def initialize(connection)
|
167
161
|
@monitor = Monitor.new
|
168
162
|
|
169
|
-
if connection.respond_to?(:
|
163
|
+
if connection.respond_to?(:call)
|
170
164
|
@redis = connection
|
171
165
|
else
|
172
166
|
if connection.respond_to?(:client)
|
173
167
|
@redis = connection
|
174
|
-
|
168
|
+
elsif connection.respond_to?(:key?)
|
175
169
|
@redis = initialize_client(connection)
|
170
|
+
else
|
171
|
+
@redis = connection
|
176
172
|
end
|
177
|
-
@redis.extend(ConnectionPoolLike)
|
178
173
|
end
|
179
174
|
end
|
180
175
|
|
@@ -202,7 +197,7 @@ module Redlock
|
|
202
197
|
end
|
203
198
|
|
204
199
|
def synchronize
|
205
|
-
@monitor.synchronize { @redis.
|
200
|
+
@monitor.synchronize { @redis.then { |connection| yield(connection) } }
|
206
201
|
end
|
207
202
|
|
208
203
|
def lock(resource, val, ttl, allow_new_lock)
|
@@ -324,7 +319,8 @@ module Redlock
|
|
324
319
|
@servers.each { |s| s.unlock(resource, value) }
|
325
320
|
|
326
321
|
if errors.size >= @quorum
|
327
|
-
|
322
|
+
err_msgs = errors.map { |e| "#{e.class}: #{e.message}" }.join("\n")
|
323
|
+
raise LockAcquisitionError.new("Too many Redis errors prevented lock acquisition:\n#{err_msgs}", errors)
|
328
324
|
end
|
329
325
|
|
330
326
|
false
|
data/lib/redlock/version.rb
CHANGED
data/spec/client_spec.rb
CHANGED
@@ -30,11 +30,7 @@ RSpec.describe Redlock::Client do
|
|
30
30
|
let(:redis3_host) { ENV["REDIS3_HOST"] || "127.0.0.1" }
|
31
31
|
let(:redis3_port) { ENV["REDIS3_PORT"] || "6379" }
|
32
32
|
let(:unreachable_redis) {
|
33
|
-
|
34
|
-
def redis.with
|
35
|
-
yield self
|
36
|
-
end
|
37
|
-
redis
|
33
|
+
RedisClient.new(url: 'redis://localhost:46864')
|
38
34
|
}
|
39
35
|
|
40
36
|
describe 'initialize' do
|
@@ -112,9 +108,19 @@ RSpec.describe Redlock::Client do
|
|
112
108
|
it 'fails to acquire a lock if majority of Redis instances are not available' do
|
113
109
|
redlock = Redlock::Client.new(servers_without_quorum)
|
114
110
|
|
111
|
+
expected_msg = <<~MSG
|
112
|
+
failed to acquire lock on 'Too many Redis errors prevented lock acquisition:
|
113
|
+
RedisClient::CannotConnectError: Connection refused - connect(2) for 127.0.0.1:46864
|
114
|
+
RedisClient::CannotConnectError: Connection refused - connect(2) for 127.0.0.1:46864'
|
115
|
+
MSG
|
116
|
+
|
115
117
|
expect {
|
116
118
|
redlock.lock(resource_key, ttl)
|
117
|
-
}.to raise_error
|
119
|
+
}.to raise_error do |error|
|
120
|
+
expect(error).to be_a(Redlock::LockAcquisitionError)
|
121
|
+
expect(error.message).to eq(expected_msg.chomp)
|
122
|
+
expect(error.errors.size).to eq(2)
|
123
|
+
end
|
118
124
|
end
|
119
125
|
end
|
120
126
|
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: redlock
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 2.0.
|
4
|
+
version: 2.0.6
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Leandro Moreira
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2023-
|
11
|
+
date: 2023-10-30 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: redis-client
|