dalli-elasticache 2.0.1 → 2.0.2

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: 1da71566964e9f17cacf29d2c670d15d7adb80e4b4cc86f8371ea98eb2b80928
4
- data.tar.gz: 7b58a9dc5efb77773c0da4de9b1891bbdc5c98d8d4012e13fd432a7906ea6e16
3
+ metadata.gz: c0afff12dcbecd681d00446e7a792cb82f356f28e02bfaac78a1962180e7973e
4
+ data.tar.gz: 2918dfeefec59bf0c663c15ecc2d981a1b16a51d8b653d2df710290f379945f8
5
5
  SHA512:
6
- metadata.gz: 04cf01bc3a0ff7c14c3173b05be796038bbe3ad45292bffdacb95834900bd8c40ecd224c206f676f3bdfde2e256beb3812d73b156723235daeabace027de704d
7
- data.tar.gz: 13668d4ead1f6e6fd5e2288d5124a1cb47751d7f97dd4a2f50f288c3db123a7c2228d88b4264ea499091e9ebe0fd1db4167b71cd0b8ba8224793847f6dc4f94a
6
+ metadata.gz: 0acf68cd09b9bf0bda5e1e77a4c8aff7925edf1e1a51e26adf8773e7a86df0e69fdf9d285d6ee965b24648d0feeb6406cb9bfca6a1187f7ffb652ab117b275fc
7
+ data.tar.gz: 05702c86d429beea0759bde3682068986b7b0da1f54c55155e3b9ce2f228e95d9b979c8c8ffdf8a35e1a2b752a3e3523624aa8940454f073fd2c6cb79311f1b5
@@ -1,6 +1,7 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  require 'openssl'
4
+ require 'timeout'
4
5
 
5
6
  module Dalli
6
7
  module Elasticache
@@ -33,21 +34,32 @@ module Dalli
33
34
  end
34
35
  end
35
36
 
37
+ # `timeout` bounds the entire multi-line read as a single wall-clock deadline,
38
+ # not each individual `readline`. A per-line readiness check (e.g. `wait_readable`)
39
+ # can't tell buffered-but-unread bytes apart from an empty socket once a buffering
40
+ # layer (Ruby's IO buffer, or OpenSSL::Buffering for TLS) sits between the fd and
41
+ # `readline`, so it can't be used to gate individual lines reliably.
36
42
  def response_from_socket(socket)
43
+ return read_lines(socket) unless timeout
44
+
45
+ Timeout.timeout(timeout, Timeout::Error, "Auto discovery read timed out after #{timeout}s") do
46
+ read_lines(socket)
47
+ end
48
+ end
49
+
50
+ private
51
+
52
+ def read_lines(socket)
37
53
  data = +''
38
54
  loop do
39
- wait_for_data(socket)
40
55
  line = socket.readline
41
56
  break if line.include?('END')
42
57
 
43
58
  data << line
44
59
  end
45
-
46
60
  data
47
61
  end
48
62
 
49
- private
50
-
51
63
  def wrap_with_ssl(tcp_socket)
52
64
  ssl_socket = OpenSSL::SSL::SSLSocket.new(tcp_socket, ssl_context)
53
65
  ssl_socket.hostname = @host
@@ -55,12 +67,6 @@ module Dalli
55
67
  ssl_socket.connect
56
68
  ssl_socket
57
69
  end
58
-
59
- def wait_for_data(socket)
60
- return unless timeout
61
-
62
- raise Timeout::Error, "Auto discovery read timed out after #{timeout}s" unless socket.wait_readable(timeout)
63
- end
64
70
  end
65
71
  end
66
72
  end
@@ -2,6 +2,6 @@
2
2
 
3
3
  module Dalli
4
4
  class ElastiCache
5
- VERSION = '2.0.1'
5
+ VERSION = '2.0.2'
6
6
  end
7
7
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: dalli-elasticache
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.0.1
4
+ version: 2.0.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Aaron Suggs
@@ -69,7 +69,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
69
69
  - !ruby/object:Gem::Version
70
70
  version: 1.3.5
71
71
  requirements: []
72
- rubygems_version: 4.0.14
72
+ rubygems_version: 4.0.18
73
73
  specification_version: 4
74
74
  summary: Configure Dalli clients with ElastiCache's AutoDiscovery
75
75
  test_files: []