redis-client 0.17.1 → 0.19.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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 3e73c2e13870d3adcb345e544fe99bbffa6ad1bf5f7267203e49f838c56a7492
4
- data.tar.gz: d090544eb97a93ad0d21d5a6c14c40ffb3ca384425ccf27d82c797f0f7e2d35a
3
+ metadata.gz: 920d97dcf258796ba88bb2f087fa89c1595dd245f67292c7432893848baacd0b
4
+ data.tar.gz: 07151d3aa036f7c513e7baa2cc94c22a7f9b4af8a09e132b1943716cd458c408
5
5
  SHA512:
6
- metadata.gz: 60e0fbf2c30888ac05855af2ba6b145ac96e0e011cc58d989f66e9379baa549c9af1ad2f7077ce431b334d6b1318b83463eac7bcb7a323752c79644e0dbce495
7
- data.tar.gz: 1e3e10ef87472a412239261c0642e134f9521e83e49def834bb76b1aa6481c8e8fc9b13cfe1916c0f0ed43af8799a331e9649caa61155ce9eeb8391b0c15c98a
6
+ metadata.gz: a6f664cf2c5fe77115606dc15e031e6bccc55c440b55d521ef5429653acb89bf55597dd4e5cd4892fb61f9452790a2ca41e32e72c6f824c7da9609987b14ff42
7
+ data.tar.gz: c6a34fe93aac6d5ae5c8995881e17581e64a762d0fdc3d3fe1772b07b1759196b2ca5a27e14e00c826399d03a1259f799c816ac1ca1ee001314d9b32f341ecb8
data/CHANGELOG.md CHANGED
@@ -1,5 +1,19 @@
1
1
  # Unreleased
2
2
 
3
+ # 0.19.1
4
+
5
+ - Fixed a bug in `hiredis-client` that could cause a crash if interrupted by `Timeout.timeout` or other `Thread#raise` based mecanism.
6
+ - Fixed a GC bug that could cause crashes in `hiredis-client`.
7
+
8
+ # 0.19.0
9
+
10
+ - Revalidate connection in `RedisClient#connected?`
11
+ - Eagerly fail if `db:` isn't an Integer. #151.
12
+
13
+ # 0.18.0
14
+
15
+ - Expose more connection details such as `host`, `db`, etc on `RedisClient`.
16
+
3
17
  # 0.17.1
4
18
 
5
19
  - Add support for `NaN` in RESP3 protocol doubles.
data/Gemfile CHANGED
@@ -6,7 +6,7 @@ source "https://rubygems.org"
6
6
  gemspec name: "redis-client"
7
7
 
8
8
  gem "minitest"
9
- gem "rake", "~> 13.0"
9
+ gem "rake", "~> 13.1"
10
10
  gem "rake-compiler"
11
11
  gem "rubocop"
12
12
  gem "rubocop-minitest"
data/Gemfile.lock CHANGED
@@ -1,14 +1,14 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- redis-client (0.17.1)
4
+ redis-client (0.19.1)
5
5
  connection_pool
6
6
 
7
7
  GEM
8
8
  remote: https://rubygems.org/
9
9
  specs:
10
10
  ast (2.4.2)
11
- benchmark-ips (2.12.0)
11
+ benchmark-ips (2.13.0)
12
12
  byebug (11.1.3)
13
13
  connection_pool (2.4.1)
14
14
  hiredis (0.6.3)
@@ -18,7 +18,7 @@ GEM
18
18
  parser (3.1.2.1)
19
19
  ast (~> 2.4.1)
20
20
  rainbow (3.1.1)
21
- rake (13.0.6)
21
+ rake (13.1.0)
22
22
  rake-compiler (1.2.5)
23
23
  rake
24
24
  redis (4.6.0)
@@ -53,7 +53,7 @@ DEPENDENCIES
53
53
  byebug
54
54
  hiredis
55
55
  minitest
56
- rake (~> 13.0)
56
+ rake (~> 13.1)
57
57
  rake-compiler
58
58
  redis (~> 4.6)
59
59
  redis-client!
@@ -41,7 +41,12 @@ class RedisClient
41
41
  )
42
42
  @username = username
43
43
  @password = password
44
- @db = db || DEFAULT_DB
44
+ @db = begin
45
+ Integer(db || DEFAULT_DB)
46
+ rescue ArgumentError
47
+ raise ArgumentError, "db: must be an Integer, got: #{db.inspect}"
48
+ end
49
+
45
50
  @id = id
46
51
  @ssl = ssl || false
47
52
 
@@ -148,6 +148,7 @@ class RedisClient
148
148
  )
149
149
  true
150
150
  rescue SystemCallError, OpenSSL::SSL::SSLError, SocketError => error
151
+ socket&.close
151
152
  raise CannotConnectError, error.message, error.backtrace
152
153
  end
153
154
 
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  class RedisClient
4
- VERSION = "0.17.1"
4
+ VERSION = "0.19.1"
5
5
  end
data/lib/redis_client.rb CHANGED
@@ -179,6 +179,38 @@ class RedisClient
179
179
  config.server_url
180
180
  end
181
181
 
182
+ def id
183
+ config.id
184
+ end
185
+
186
+ def timeout
187
+ config.read_timeout
188
+ end
189
+
190
+ def db
191
+ config.db
192
+ end
193
+
194
+ def host
195
+ config.host unless config.path
196
+ end
197
+
198
+ def port
199
+ config.port unless config.path
200
+ end
201
+
202
+ def path
203
+ config.path
204
+ end
205
+
206
+ def username
207
+ config.username
208
+ end
209
+
210
+ def password
211
+ config.password
212
+ end
213
+
182
214
  def size
183
215
  1
184
216
  end
@@ -190,17 +222,18 @@ class RedisClient
190
222
 
191
223
  def timeout=(timeout)
192
224
  super
193
- raw_connection.read_timeout = raw_connection.write_timeout = timeout if connected?
225
+ @raw_connection&.read_timeout = timeout
226
+ @raw_connection&.write_timeout = timeout
194
227
  end
195
228
 
196
229
  def read_timeout=(timeout)
197
230
  super
198
- raw_connection.read_timeout = timeout if connected?
231
+ @raw_connection&.read_timeout = timeout
199
232
  end
200
233
 
201
234
  def write_timeout=(timeout)
202
235
  super
203
- raw_connection.write_timeout = timeout if connected?
236
+ @raw_connection&.write_timeout = timeout
204
237
  end
205
238
 
206
239
  def pubsub
@@ -354,7 +387,7 @@ class RedisClient
354
387
  end
355
388
 
356
389
  def connected?
357
- @raw_connection&.connected?
390
+ @raw_connection&.revalidate
358
391
  end
359
392
 
360
393
  def close
@@ -637,6 +670,7 @@ class RedisClient
637
670
  elsif retryable
638
671
  tries = 0
639
672
  connection = nil
673
+ preferred_error = nil
640
674
  begin
641
675
  connection = raw_connection
642
676
  if block_given?
@@ -645,13 +679,15 @@ class RedisClient
645
679
  connection
646
680
  end
647
681
  rescue ConnectionError, ProtocolError => error
682
+ preferred_error ||= error
683
+ preferred_error = error unless error.is_a?(CircuitBreaker::OpenCircuitError)
648
684
  close
649
685
 
650
686
  if !@disable_reconnection && config.retry_connecting?(tries, error)
651
687
  tries += 1
652
688
  retry
653
689
  else
654
- raise
690
+ raise preferred_error
655
691
  end
656
692
  end
657
693
  else
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: redis-client
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.17.1
4
+ version: 0.19.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Jean Boussier
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2023-10-22 00:00:00.000000000 Z
11
+ date: 2023-12-21 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: connection_pool
@@ -77,7 +77,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
77
77
  - !ruby/object:Gem::Version
78
78
  version: '0'
79
79
  requirements: []
80
- rubygems_version: 3.3.7
80
+ rubygems_version: 3.4.10
81
81
  signing_key:
82
82
  specification_version: 4
83
83
  summary: Simple low-level client for Redis 6+