memcached_store 2.0.1 → 2.0.2
Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 604df981c587ff19ef1bd833c79f95d0716051bd
|
4
|
+
data.tar.gz: cd75d95d121d1969b8ffe73d858b9699a51a3000
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 82bec692dca6c4e55e809ab7a413681e8d3737cc3a59a9cd20c8b505a1506eb6f7a1e3d0e6bb0c91a6da5b0e1c3e9f330692f04e729a6213fcec9a5375ff8adf
|
7
|
+
data.tar.gz: ba4c196fb7bbdc0cbae3e03568ef0d2dfea8577a5f66a7ecaa1c4afc52116f4f63ef3d0d2bc848e7bffd1eb735ad031ca00cbf504d94dc3d232caa669f632c37
|
@@ -12,6 +12,16 @@ module ActiveSupport
|
|
12
12
|
class MemcachedSnappyStore < MemcachedStore
|
13
13
|
class UnsupportedOperation < StandardError; end
|
14
14
|
|
15
|
+
module SnappyCompressor
|
16
|
+
def self.compress(source)
|
17
|
+
Snappy.deflate(source)
|
18
|
+
end
|
19
|
+
|
20
|
+
def self.decompress(source)
|
21
|
+
Snappy.inflate(source)
|
22
|
+
end
|
23
|
+
end
|
24
|
+
|
15
25
|
def increment(*)
|
16
26
|
raise UnsupportedOperation, "increment is not supported by: #{self.class.name}"
|
17
27
|
end
|
@@ -25,21 +35,10 @@ module ActiveSupport
|
|
25
35
|
false
|
26
36
|
end
|
27
37
|
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
[Snappy.deflate(value), true]
|
33
|
-
end
|
34
|
-
|
35
|
-
def deserialize_entry(compressed_value)
|
36
|
-
if compressed_value
|
37
|
-
super(Snappy.inflate(compressed_value))
|
38
|
-
end
|
39
|
-
end
|
40
|
-
|
41
|
-
def cas_raw?(_options)
|
42
|
-
true
|
38
|
+
def initialize(*addresses, **options)
|
39
|
+
options[:codec] ||= ActiveSupport::Cache::MemcachedStore::Codec.new(compressor: SnappyCompressor)
|
40
|
+
options[:compress] = false
|
41
|
+
super(*addresses, **options)
|
43
42
|
end
|
44
43
|
end
|
45
44
|
end
|
@@ -13,11 +13,54 @@ module ActiveSupport
|
|
13
13
|
class MemcachedStore < Store
|
14
14
|
ESCAPE_KEY_CHARS = /[\x00-\x20%\x7F-\xFF]/n
|
15
15
|
|
16
|
+
class Codec
|
17
|
+
# use dalli compatible flags
|
18
|
+
SERIALIZED_FLAG = 0x1
|
19
|
+
COMPRESSED_FLAG = 0x2
|
20
|
+
|
21
|
+
# Older versions of this gem would use 0 for the flags whether or not
|
22
|
+
# the value was marshal dumped. By setting this flag, we can tell if
|
23
|
+
# it were set with an older version for backwards compatible decoding.
|
24
|
+
RAW_FLAG = 0x10
|
25
|
+
|
26
|
+
def initialize(serializer: Marshal, compressor: nil)
|
27
|
+
@serializer = serializer
|
28
|
+
@compressor = compressor
|
29
|
+
end
|
30
|
+
|
31
|
+
def encode(_key, value, flags)
|
32
|
+
unless value.is_a?(String)
|
33
|
+
flags |= SERIALIZED_FLAG
|
34
|
+
value = @serializer.dump(value)
|
35
|
+
end
|
36
|
+
if @compressor
|
37
|
+
flags |= COMPRESSED_FLAG
|
38
|
+
value = @compressor.compress(value)
|
39
|
+
end
|
40
|
+
flags |= RAW_FLAG if flags == 0
|
41
|
+
[value, flags]
|
42
|
+
end
|
43
|
+
|
44
|
+
def decode(_key, value, flags)
|
45
|
+
if (flags & COMPRESSED_FLAG) != 0
|
46
|
+
value = @compressor.decompress(value)
|
47
|
+
end
|
48
|
+
|
49
|
+
if (flags & SERIALIZED_FLAG) != 0
|
50
|
+
@serializer.load(value)
|
51
|
+
elsif flags == 0 # legacy cache value
|
52
|
+
@serializer.load(value) rescue value
|
53
|
+
else
|
54
|
+
value
|
55
|
+
end
|
56
|
+
end
|
57
|
+
end
|
58
|
+
|
16
59
|
attr_accessor :read_only, :swallow_exceptions
|
17
60
|
|
18
|
-
def initialize(*addresses)
|
61
|
+
def initialize(*addresses, **options)
|
19
62
|
addresses = addresses.flatten
|
20
|
-
options
|
63
|
+
options[:codec] ||= Codec.new
|
21
64
|
@swallow_exceptions = true
|
22
65
|
@swallow_exceptions = options.delete(:swallow_exceptions) if options.key?(:swallow_exceptions)
|
23
66
|
|
@@ -57,7 +100,7 @@ module ActiveSupport
|
|
57
100
|
|
58
101
|
handle_exceptions(return_value_on_error: {}) do
|
59
102
|
instrument(:read_multi, names, options) do
|
60
|
-
if raw_values = @data.get(keys_to_names.keys
|
103
|
+
if raw_values = @data.get(keys_to_names.keys)
|
61
104
|
raw_values.each do |key, value|
|
62
105
|
entry = deserialize_entry(value)
|
63
106
|
values[keys_to_names[key]] = entry.value unless entry.expired?
|
@@ -74,19 +117,18 @@ module ActiveSupport
|
|
74
117
|
|
75
118
|
handle_exceptions(return_value_on_error: false) do
|
76
119
|
instrument(:cas, name, options) do
|
77
|
-
@data.cas(key, expiration(options)
|
120
|
+
@data.cas(key, expiration(options)) do |raw_value|
|
78
121
|
entry = deserialize_entry(raw_value)
|
79
122
|
value = yield entry.value
|
80
123
|
break true if read_only
|
81
|
-
serialize_entry(Entry.new(value, options), options)
|
124
|
+
serialize_entry(Entry.new(value, options), options)
|
82
125
|
end
|
83
126
|
end
|
84
127
|
true
|
85
128
|
end
|
86
129
|
end
|
87
130
|
|
88
|
-
def cas_multi(*names)
|
89
|
-
options = names.extract_options!
|
131
|
+
def cas_multi(*names, **options)
|
90
132
|
return if names.empty?
|
91
133
|
|
92
134
|
options = merged_options(options)
|
@@ -94,7 +136,7 @@ module ActiveSupport
|
|
94
136
|
|
95
137
|
handle_exceptions(return_value_on_error: false) do
|
96
138
|
instrument(:cas_multi, names, options) do
|
97
|
-
@data.cas(keys_to_names.keys, expiration(options)
|
139
|
+
@data.cas(keys_to_names.keys, expiration(options)) do |raw_values|
|
98
140
|
values = {}
|
99
141
|
|
100
142
|
raw_values.each do |key, raw_value|
|
@@ -107,7 +149,7 @@ module ActiveSupport
|
|
107
149
|
break true if read_only
|
108
150
|
|
109
151
|
serialized_values = values.map do |name, value|
|
110
|
-
[normalize_key(name, options), serialize_entry(Entry.new(value, options), options)
|
152
|
+
[normalize_key(name, options), serialize_entry(Entry.new(value, options), options)]
|
111
153
|
end
|
112
154
|
|
113
155
|
Hash[serialized_values]
|
@@ -161,7 +203,7 @@ module ActiveSupport
|
|
161
203
|
|
162
204
|
def read_entry(key, _options) # :nodoc:
|
163
205
|
handle_exceptions(return_value_on_error: nil) do
|
164
|
-
deserialize_entry(@data.get(escape_key(key)
|
206
|
+
deserialize_entry(@data.get(escape_key(key)))
|
165
207
|
end
|
166
208
|
end
|
167
209
|
|
@@ -169,9 +211,9 @@ module ActiveSupport
|
|
169
211
|
return true if read_only
|
170
212
|
method = options && options[:unless_exist] ? :add : :set
|
171
213
|
expires_in = expiration(options)
|
172
|
-
value
|
214
|
+
value = serialize_entry(entry, options)
|
173
215
|
handle_exceptions(return_value_on_error: false) do
|
174
|
-
@data.send(method, escape_key(key), value, expires_in
|
216
|
+
@data.send(method, escape_key(key), value, expires_in)
|
175
217
|
true
|
176
218
|
end
|
177
219
|
end
|
@@ -213,24 +255,18 @@ module ActiveSupport
|
|
213
255
|
end
|
214
256
|
end
|
215
257
|
|
216
|
-
def deserialize_entry(
|
217
|
-
if
|
218
|
-
|
219
|
-
Marshal.load(raw_value)
|
220
|
-
rescue
|
221
|
-
raw_value
|
222
|
-
end
|
223
|
-
entry.is_a?(Entry) ? entry : Entry.new(entry)
|
258
|
+
def deserialize_entry(value)
|
259
|
+
if value
|
260
|
+
value.is_a?(Entry) ? value : Entry.new(value, compresss: false)
|
224
261
|
end
|
225
262
|
end
|
226
263
|
|
227
264
|
def serialize_entry(entry, options)
|
228
|
-
|
229
|
-
|
230
|
-
|
231
|
-
|
232
|
-
|
233
|
-
options[:raw]
|
265
|
+
if options[:raw]
|
266
|
+
entry.value.to_s
|
267
|
+
else
|
268
|
+
entry
|
269
|
+
end
|
234
270
|
end
|
235
271
|
|
236
272
|
def expiration(options)
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: memcached_store
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 2.0.
|
4
|
+
version: 2.0.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Camilo Lopez
|
@@ -11,7 +11,7 @@ authors:
|
|
11
11
|
autorequire:
|
12
12
|
bindir: bin
|
13
13
|
cert_chain: []
|
14
|
-
date: 2018-
|
14
|
+
date: 2018-09-25 00:00:00.000000000 Z
|
15
15
|
dependencies:
|
16
16
|
- !ruby/object:Gem::Dependency
|
17
17
|
name: activesupport
|