dalli 3.2.4 → 3.2.5
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/CHANGELOG.md +10 -3
- data/lib/dalli/protocol/base.rb +15 -4
- data/lib/dalli/protocol/connection_manager.rb +15 -14
- data/lib/dalli/version.rb +1 -1
- metadata +3 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: bc1fc3d1639a4e5380a972472d830cd6999f016672af936701201521433180e3
|
4
|
+
data.tar.gz: 154207a695751bf6430f597783a6382bcb764f42e6f71303b2ead07f90e90f24
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 4f7c65a4528f180ff8ccad3d39f0197cd83d409830e188e59fc8a03075e7a61c71c111db409cbefa01fb26d6e408fae2e5f2701e4f370744bf33a08023c33831
|
7
|
+
data.tar.gz: cbd13ba3453f17eb012632f5d077552eb6ea46adbb349f4fb72b612c8d9fe2bb6a9b64641a2d105592d0def88ad7b467a1f007ed6abb76e8c0fdb8d94064c369
|
data/CHANGELOG.md
CHANGED
@@ -4,11 +4,18 @@ Dalli Changelog
|
|
4
4
|
Unreleased
|
5
5
|
==========
|
6
6
|
|
7
|
+
|
8
|
+
3.2.5
|
9
|
+
==========
|
10
|
+
|
11
|
+
- Better handle memcached requests being interrupted by Thread#raise or Thread#kill (byroot)
|
12
|
+
- Unexpected errors are no longer treated as `Dalli::NetworkError`, including errors raised by `Timeout.timeout` (byroot)
|
13
|
+
|
7
14
|
3.2.4
|
8
15
|
==========
|
9
16
|
|
10
|
-
- Cache PID calls for performance since glibc no longer caches in recent versions (
|
11
|
-
- Preallocate the read buffer in Socket#readfull (
|
17
|
+
- Cache PID calls for performance since glibc no longer caches in recent versions (byroot)
|
18
|
+
- Preallocate the read buffer in Socket#readfull (byroot)
|
12
19
|
|
13
20
|
3.2.3
|
14
21
|
==========
|
@@ -51,7 +58,7 @@ Unreleased
|
|
51
58
|
3.1.4
|
52
59
|
==========
|
53
60
|
|
54
|
-
- Improve response parsing performance (
|
61
|
+
- Improve response parsing performance (byroot)
|
55
62
|
- Reorganize binary protocol parsing a bit (petergoldstein)
|
56
63
|
- Fix handling of non-ASCII keys in get_multi (petergoldstein)
|
57
64
|
|
data/lib/dalli/protocol/base.rb
CHANGED
@@ -32,7 +32,13 @@ module Dalli
|
|
32
32
|
verify_state(opkey)
|
33
33
|
|
34
34
|
begin
|
35
|
-
|
35
|
+
@connection_manager.start_request!
|
36
|
+
response = send(opkey, *args)
|
37
|
+
|
38
|
+
# pipelined_get emit query but doesn't read the response(s)
|
39
|
+
@connection_manager.finish_request! unless opkey == :pipelined_get
|
40
|
+
|
41
|
+
response
|
36
42
|
rescue Dalli::MarshalError => e
|
37
43
|
log_marshal_err(args.first, e)
|
38
44
|
raise
|
@@ -40,7 +46,8 @@ module Dalli
|
|
40
46
|
raise
|
41
47
|
rescue StandardError => e
|
42
48
|
log_unexpected_err(e)
|
43
|
-
|
49
|
+
close
|
50
|
+
raise
|
44
51
|
end
|
45
52
|
end
|
46
53
|
|
@@ -65,10 +72,9 @@ module Dalli
|
|
65
72
|
#
|
66
73
|
# Returns nothing.
|
67
74
|
def pipeline_response_setup
|
68
|
-
|
75
|
+
verify_pipelined_state(:getkq)
|
69
76
|
write_noop
|
70
77
|
response_buffer.reset
|
71
|
-
@connection_manager.start_request!
|
72
78
|
end
|
73
79
|
|
74
80
|
# Attempt to receive and parse as many key/value pairs as possible
|
@@ -169,6 +175,11 @@ module Dalli
|
|
169
175
|
raise_down_error unless ensure_connected!
|
170
176
|
end
|
171
177
|
|
178
|
+
def verify_pipelined_state(_opkey)
|
179
|
+
@connection_manager.confirm_in_progress!
|
180
|
+
raise_down_error unless connected?
|
181
|
+
end
|
182
|
+
|
172
183
|
# The socket connection to the underlying server is initialized as a side
|
173
184
|
# effect of this call. In fact, this is the ONLY place where that
|
174
185
|
# socket connection is initialized.
|
@@ -54,6 +54,7 @@ module Dalli
|
|
54
54
|
|
55
55
|
@sock = memcached_socket
|
56
56
|
@pid = PIDCache.pid
|
57
|
+
@request_in_progress = false
|
57
58
|
rescue SystemCallError, Timeout::Error, EOFError, SocketError => e
|
58
59
|
# SocketError = DNS resolution failure
|
59
60
|
error_on_request!(e)
|
@@ -98,7 +99,13 @@ module Dalli
|
|
98
99
|
end
|
99
100
|
|
100
101
|
def confirm_ready!
|
101
|
-
|
102
|
+
close if request_in_progress?
|
103
|
+
close_on_fork if fork_detected?
|
104
|
+
end
|
105
|
+
|
106
|
+
def confirm_in_progress!
|
107
|
+
raise '[Dalli] No request in progress. This may be a bug in Dalli.' unless request_in_progress?
|
108
|
+
|
102
109
|
close_on_fork if fork_detected?
|
103
110
|
end
|
104
111
|
|
@@ -124,10 +131,14 @@ module Dalli
|
|
124
131
|
end
|
125
132
|
|
126
133
|
def start_request!
|
134
|
+
raise '[Dalli] Request already in progress. This may be a bug in Dalli.' if @request_in_progress
|
135
|
+
|
127
136
|
@request_in_progress = true
|
128
137
|
end
|
129
138
|
|
130
139
|
def finish_request!
|
140
|
+
raise '[Dalli] No request in progress. This may be a bug in Dalli.' unless @request_in_progress
|
141
|
+
|
131
142
|
@request_in_progress = false
|
132
143
|
end
|
133
144
|
|
@@ -136,36 +147,26 @@ module Dalli
|
|
136
147
|
end
|
137
148
|
|
138
149
|
def read_line
|
139
|
-
start_request!
|
140
150
|
data = @sock.gets("\r\n")
|
141
151
|
error_on_request!('EOF in read_line') if data.nil?
|
142
|
-
finish_request!
|
143
152
|
data
|
144
153
|
rescue SystemCallError, Timeout::Error, EOFError => e
|
145
154
|
error_on_request!(e)
|
146
155
|
end
|
147
156
|
|
148
157
|
def read(count)
|
149
|
-
|
150
|
-
data = @sock.readfull(count)
|
151
|
-
finish_request!
|
152
|
-
data
|
158
|
+
@sock.readfull(count)
|
153
159
|
rescue SystemCallError, Timeout::Error, EOFError => e
|
154
160
|
error_on_request!(e)
|
155
161
|
end
|
156
162
|
|
157
163
|
def write(bytes)
|
158
|
-
|
159
|
-
result = @sock.write(bytes)
|
160
|
-
finish_request!
|
161
|
-
result
|
164
|
+
@sock.write(bytes)
|
162
165
|
rescue SystemCallError, Timeout::Error => e
|
163
166
|
error_on_request!(e)
|
164
167
|
end
|
165
168
|
|
166
|
-
# Non-blocking read.
|
167
|
-
# of a caller who has called start_request!, but not yet
|
168
|
-
# called finish_request!. Here to support the operation
|
169
|
+
# Non-blocking read. Here to support the operation
|
169
170
|
# of the get_multi operation
|
170
171
|
def read_nonblock
|
171
172
|
@sock.read_available
|
data/lib/dalli/version.rb
CHANGED
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: dalli
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 3.2.
|
4
|
+
version: 3.2.5
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Peter M. Goldstein
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2023-
|
12
|
+
date: 2023-06-13 00:00:00.000000000 Z
|
13
13
|
dependencies: []
|
14
14
|
description: High performance memcached client for Ruby
|
15
15
|
email:
|
@@ -75,7 +75,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
75
75
|
- !ruby/object:Gem::Version
|
76
76
|
version: '0'
|
77
77
|
requirements: []
|
78
|
-
rubygems_version: 3.4.
|
78
|
+
rubygems_version: 3.4.14
|
79
79
|
signing_key:
|
80
80
|
specification_version: 4
|
81
81
|
summary: High performance memcached client for Ruby
|