vinted-memcached 1.8.3 → 1.8.5
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.github/workflows/build_release_pipeline.yaml +53 -0
- data/.gitignore +33 -0
- data/BENCHMARKS +130 -126
- data/CHANGELOG +1 -6
- data/Gemfile +8 -1
- data/Gemfile.lock +25 -25
- data/README.md +144 -0
- data/Rakefile +21 -93
- data/ext/rlibmemcached/extconf.rb +76 -0
- data/ext/{rlibmemcached.i → rlibmemcached/rlibmemcached.i} +48 -63
- data/ext/{rlibmemcached_wrap.c → rlibmemcached/rlibmemcached_wrap.c} +629 -612
- data/lib/memcached/exceptions.rb +1 -12
- data/lib/memcached/experimental.rb +1 -33
- data/lib/memcached/memcached.rb +41 -34
- data/lib/memcached/version.rb +1 -1
- data/lib/memcached.rb +9 -4
- data/memcached.gemspec +0 -0
- data/memcached.pem +21 -0
- data/{ext → vendor}/libmemcached-0.32/libmemcached/memcached_connect.c +23 -13
- data/{ext → vendor}/libmemcached-0.32/libmemcached/memcached_io.c +18 -13
- data/{ext → vendor}/libmemcached-0.32/libmemcached/memcached_purge.c +1 -1
- metadata +193 -233
- data/Manifest +0 -209
- data/README.rdoc +0 -124
- data/ext/extconf-make.rb +0 -25
- data/ext/extconf.rb +0 -78
- data/lib/memcached/auth.rb +0 -16
- data/test/profile/benchmark.rb +0 -280
- data/test/profile/c_profiler.rb +0 -14
- data/test/profile/exercise.rb +0 -185
- data/test/profile/rb_profiler.rb +0 -21
- data/test/profile/valgrind.rb +0 -10
- data/test/setup.rb +0 -30
- data/test/teardown.rb +0 -0
- data/test/test_helper.rb +0 -18
- data/test/unit/binding_test.rb +0 -8
- data/test/unit/memcached_experimental_test.rb +0 -272
- data/test/unit/memcached_test.rb +0 -1487
- data/test/unit/rails_test.rb +0 -330
- /data/{ext → vendor}/libmemcached-0.32/AUTHORS +0 -0
- /data/{ext → vendor}/libmemcached-0.32/COPYING +0 -0
- /data/{ext → vendor}/libmemcached-0.32/ChangeLog +0 -0
- /data/{ext → vendor}/libmemcached-0.32/INSTALL +0 -0
- /data/{ext → vendor}/libmemcached-0.32/Makefile.am +0 -0
- /data/{ext → vendor}/libmemcached-0.32/Makefile.in +0 -0
- /data/{ext → vendor}/libmemcached-0.32/NEWS +0 -0
- /data/{ext → vendor}/libmemcached-0.32/README +0 -0
- /data/{ext → vendor}/libmemcached-0.32/THANKS +0 -0
- /data/{ext → vendor}/libmemcached-0.32/TODO +0 -0
- /data/{ext → vendor}/libmemcached-0.32/aclocal.m4 +0 -0
- /data/{ext → vendor}/libmemcached-0.32/clients/Makefile.am +0 -0
- /data/{ext → vendor}/libmemcached-0.32/clients/Makefile.in +0 -0
- /data/{ext → vendor}/libmemcached-0.32/clients/client_options.h +0 -0
- /data/{ext → vendor}/libmemcached-0.32/clients/execute.c +0 -0
- /data/{ext → vendor}/libmemcached-0.32/clients/execute.h +0 -0
- /data/{ext → vendor}/libmemcached-0.32/clients/generator.c +0 -0
- /data/{ext → vendor}/libmemcached-0.32/clients/generator.h +0 -0
- /data/{ext → vendor}/libmemcached-0.32/clients/memcat.c +0 -0
- /data/{ext → vendor}/libmemcached-0.32/clients/memcp.c +0 -0
- /data/{ext → vendor}/libmemcached-0.32/clients/memdump.c +0 -0
- /data/{ext → vendor}/libmemcached-0.32/clients/memerror.c +0 -0
- /data/{ext → vendor}/libmemcached-0.32/clients/memflush.c +0 -0
- /data/{ext → vendor}/libmemcached-0.32/clients/memrm.c +0 -0
- /data/{ext → vendor}/libmemcached-0.32/clients/memslap.c +0 -0
- /data/{ext → vendor}/libmemcached-0.32/clients/memstat.c +0 -0
- /data/{ext → vendor}/libmemcached-0.32/clients/utilities.c +0 -0
- /data/{ext → vendor}/libmemcached-0.32/clients/utilities.h +0 -0
- /data/{ext → vendor}/libmemcached-0.32/config/compile +0 -0
- /data/{ext → vendor}/libmemcached-0.32/config/config.guess +0 -0
- /data/{ext → vendor}/libmemcached-0.32/config/config.rpath +0 -0
- /data/{ext → vendor}/libmemcached-0.32/config/config.sub +0 -0
- /data/{ext → vendor}/libmemcached-0.32/config/depcomp +0 -0
- /data/{ext → vendor}/libmemcached-0.32/config/install-sh +0 -0
- /data/{ext → vendor}/libmemcached-0.32/config/ltmain.sh +0 -0
- /data/{ext → vendor}/libmemcached-0.32/config/missing +0 -0
- /data/{ext → vendor}/libmemcached-0.32/config.h.in +0 -0
- /data/{ext → vendor}/libmemcached-0.32/configure +0 -0
- /data/{ext → vendor}/libmemcached-0.32/configure.ac +0 -0
- /data/{ext → vendor}/libmemcached-0.32/libmemcached/Makefile.am +0 -0
- /data/{ext → vendor}/libmemcached-0.32/libmemcached/Makefile.in +0 -0
- /data/{ext → vendor}/libmemcached-0.32/libmemcached/byteorder.c +0 -0
- /data/{ext → vendor}/libmemcached-0.32/libmemcached/common.h +0 -0
- /data/{ext → vendor}/libmemcached-0.32/libmemcached/crc.c +0 -0
- /data/{ext → vendor}/libmemcached-0.32/libmemcached/hsieh_hash.c +0 -0
- /data/{ext → vendor}/libmemcached-0.32/libmemcached/jenkins_hash.c +0 -0
- /data/{ext → vendor}/libmemcached-0.32/libmemcached/libmemcached.ver +0 -0
- /data/{ext → vendor}/libmemcached-0.32/libmemcached/libmemcached_probes.d +0 -0
- /data/{ext → vendor}/libmemcached-0.32/libmemcached/libmemcached_probes.h +0 -0
- /data/{ext → vendor}/libmemcached-0.32/libmemcached/md5.c +0 -0
- /data/{ext → vendor}/libmemcached-0.32/libmemcached/memcached/README.txt +0 -0
- /data/{ext → vendor}/libmemcached-0.32/libmemcached/memcached/protocol_binary.h +0 -0
- /data/{ext → vendor}/libmemcached-0.32/libmemcached/memcached.c +0 -0
- /data/{ext → vendor}/libmemcached-0.32/libmemcached/memcached.h +0 -0
- /data/{ext → vendor}/libmemcached-0.32/libmemcached/memcached.hpp +0 -0
- /data/{ext → vendor}/libmemcached-0.32/libmemcached/memcached_allocators.c +0 -0
- /data/{ext → vendor}/libmemcached-0.32/libmemcached/memcached_analyze.c +0 -0
- /data/{ext → vendor}/libmemcached-0.32/libmemcached/memcached_auto.c +0 -0
- /data/{ext → vendor}/libmemcached-0.32/libmemcached/memcached_behavior.c +0 -0
- /data/{ext → vendor}/libmemcached-0.32/libmemcached/memcached_callback.c +0 -0
- /data/{ext → vendor}/libmemcached-0.32/libmemcached/memcached_configure.h.in +0 -0
- /data/{ext → vendor}/libmemcached-0.32/libmemcached/memcached_constants.h +0 -0
- /data/{ext → vendor}/libmemcached-0.32/libmemcached/memcached_delete.c +0 -0
- /data/{ext → vendor}/libmemcached-0.32/libmemcached/memcached_do.c +0 -0
- /data/{ext → vendor}/libmemcached-0.32/libmemcached/memcached_dump.c +0 -0
- /data/{ext → vendor}/libmemcached-0.32/libmemcached/memcached_exist.c +0 -0
- /data/{ext → vendor}/libmemcached-0.32/libmemcached/memcached_exist.h +0 -0
- /data/{ext → vendor}/libmemcached-0.32/libmemcached/memcached_fetch.c +0 -0
- /data/{ext → vendor}/libmemcached-0.32/libmemcached/memcached_flush.c +0 -0
- /data/{ext → vendor}/libmemcached-0.32/libmemcached/memcached_flush_buffers.c +0 -0
- /data/{ext → vendor}/libmemcached-0.32/libmemcached/memcached_get.c +0 -0
- /data/{ext → vendor}/libmemcached-0.32/libmemcached/memcached_get.h +0 -0
- /data/{ext → vendor}/libmemcached-0.32/libmemcached/memcached_hash.c +0 -0
- /data/{ext → vendor}/libmemcached-0.32/libmemcached/memcached_hosts.c +0 -0
- /data/{ext → vendor}/libmemcached-0.32/libmemcached/memcached_internal.h +0 -0
- /data/{ext → vendor}/libmemcached-0.32/libmemcached/memcached_io.h +0 -0
- /data/{ext → vendor}/libmemcached-0.32/libmemcached/memcached_key.c +0 -0
- /data/{ext → vendor}/libmemcached-0.32/libmemcached/memcached_parse.c +0 -0
- /data/{ext → vendor}/libmemcached-0.32/libmemcached/memcached_pool.h +0 -0
- /data/{ext → vendor}/libmemcached-0.32/libmemcached/memcached_quit.c +0 -0
- /data/{ext → vendor}/libmemcached-0.32/libmemcached/memcached_response.c +0 -0
- /data/{ext → vendor}/libmemcached-0.32/libmemcached/memcached_result.c +0 -0
- /data/{ext → vendor}/libmemcached-0.32/libmemcached/memcached_result.h +0 -0
- /data/{ext → vendor}/libmemcached-0.32/libmemcached/memcached_sasl.c +0 -0
- /data/{ext → vendor}/libmemcached-0.32/libmemcached/memcached_sasl.h +0 -0
- /data/{ext → vendor}/libmemcached-0.32/libmemcached/memcached_server.c +0 -0
- /data/{ext → vendor}/libmemcached-0.32/libmemcached/memcached_server.h +0 -0
- /data/{ext → vendor}/libmemcached-0.32/libmemcached/memcached_stats.c +0 -0
- /data/{ext → vendor}/libmemcached-0.32/libmemcached/memcached_storage.c +0 -0
- /data/{ext → vendor}/libmemcached-0.32/libmemcached/memcached_storage.h +0 -0
- /data/{ext → vendor}/libmemcached-0.32/libmemcached/memcached_strerror.c +0 -0
- /data/{ext → vendor}/libmemcached-0.32/libmemcached/memcached_string.c +0 -0
- /data/{ext → vendor}/libmemcached-0.32/libmemcached/memcached_string.h +0 -0
- /data/{ext → vendor}/libmemcached-0.32/libmemcached/memcached_touch.c +0 -0
- /data/{ext → vendor}/libmemcached-0.32/libmemcached/memcached_touch.h +0 -0
- /data/{ext → vendor}/libmemcached-0.32/libmemcached/memcached_types.h +0 -0
- /data/{ext → vendor}/libmemcached-0.32/libmemcached/memcached_util.h +0 -0
- /data/{ext → vendor}/libmemcached-0.32/libmemcached/memcached_verbosity.c +0 -0
- /data/{ext → vendor}/libmemcached-0.32/libmemcached/memcached_version.c +0 -0
- /data/{ext → vendor}/libmemcached-0.32/libmemcached/memcached_watchpoint.h +0 -0
- /data/{ext → vendor}/libmemcached-0.32/libmemcached/murmur_hash.c +0 -0
- /data/{ext → vendor}/libmemcached-0.32/libmemcached/visibility.h +0 -0
- /data/{ext → vendor}/libmemcached-0.32/libmemcachedutil/Makefile.am +0 -0
- /data/{ext → vendor}/libmemcached-0.32/libmemcachedutil/Makefile.in +0 -0
- /data/{ext → vendor}/libmemcached-0.32/libmemcachedutil/libmemcachedutil.ver +0 -0
- /data/{ext → vendor}/libmemcached-0.32/libmemcachedutil/memcached_pool.c +0 -0
- /data/{ext → vendor}/libmemcached-0.32/m4/ac_cxx_compile_stdcxx_0x.m4 +0 -0
- /data/{ext → vendor}/libmemcached-0.32/m4/ac_cxx_header_stdcxx_98.m4 +0 -0
- /data/{ext → vendor}/libmemcached-0.32/m4/acx_pthread.m4 +0 -0
- /data/{ext → vendor}/libmemcached-0.32/m4/byteorder.m4 +0 -0
- /data/{ext → vendor}/libmemcached-0.32/m4/deprecated.m4 +0 -0
- /data/{ext → vendor}/libmemcached-0.32/m4/enable_utillib.m4 +0 -0
- /data/{ext → vendor}/libmemcached-0.32/m4/extensions.m4 +0 -0
- /data/{ext → vendor}/libmemcached-0.32/m4/hsieh.m4 +0 -0
- /data/{ext → vendor}/libmemcached-0.32/m4/lib-prefix.m4 +0 -0
- /data/{ext → vendor}/libmemcached-0.32/m4/libtool.m4 +0 -0
- /data/{ext → vendor}/libmemcached-0.32/m4/ltoptions.m4 +0 -0
- /data/{ext → vendor}/libmemcached-0.32/m4/ltsugar.m4 +0 -0
- /data/{ext → vendor}/libmemcached-0.32/m4/ltversion.m4 +0 -0
- /data/{ext → vendor}/libmemcached-0.32/m4/lt~obsolete.m4 +0 -0
- /data/{ext → vendor}/libmemcached-0.32/m4/memcached.m4 +0 -0
- /data/{ext → vendor}/libmemcached-0.32/m4/pandora_64bit.m4 +0 -0
- /data/{ext → vendor}/libmemcached-0.32/m4/pandora_canonical.m4 +0 -0
- /data/{ext → vendor}/libmemcached-0.32/m4/pandora_check_compiler_version.m4 +0 -0
- /data/{ext → vendor}/libmemcached-0.32/m4/pandora_check_cxx_standard.m4 +0 -0
- /data/{ext → vendor}/libmemcached-0.32/m4/pandora_enable_dtrace.m4 +0 -0
- /data/{ext → vendor}/libmemcached-0.32/m4/pandora_ensure_gcc_version.m4 +0 -0
- /data/{ext → vendor}/libmemcached-0.32/m4/pandora_have_better_malloc.m4 +0 -0
- /data/{ext → vendor}/libmemcached-0.32/m4/pandora_have_sasl.m4 +0 -0
- /data/{ext → vendor}/libmemcached-0.32/m4/pandora_header_assert.m4 +0 -0
- /data/{ext → vendor}/libmemcached-0.32/m4/pandora_libtool.m4 +0 -0
- /data/{ext → vendor}/libmemcached-0.32/m4/pandora_optimize.m4 +0 -0
- /data/{ext → vendor}/libmemcached-0.32/m4/pandora_shared_ptr.m4 +0 -0
- /data/{ext → vendor}/libmemcached-0.32/m4/pandora_vc_build.m4 +0 -0
- /data/{ext → vendor}/libmemcached-0.32/m4/pandora_warnings.m4 +0 -0
- /data/{ext → vendor}/libmemcached-0.32/m4/pod2man.m4 +0 -0
- /data/{ext → vendor}/libmemcached-0.32/m4/protocol_binary.m4 +0 -0
- /data/{ext → vendor}/libmemcached-0.32/m4/setsockopt.m4 +0 -0
- /data/{ext → vendor}/libmemcached-0.32/m4/visibility.m4 +0 -0
- /data/{ext → vendor}/libmemcached-0.32/support/Makefile.am +0 -0
- /data/{ext → vendor}/libmemcached-0.32/support/Makefile.in +0 -0
- /data/{ext → vendor}/libmemcached-0.32/support/libmemcached-fc.spec.in +0 -0
- /data/{ext → vendor}/libmemcached-0.32/support/libmemcached.pc.in +0 -0
- /data/{ext → vendor}/libmemcached-0.32/support/libmemcached.spec +0 -0
- /data/{ext → vendor}/libmemcached-0.32/support/libmemcached.spec.in +0 -0
- /data/{ext → vendor}/libmemcached-0.32/support/set_benchmark.sh +0 -0
- /data/{ext → vendor}/libmemcached-0.32/tests/Makefile.am +0 -0
- /data/{ext → vendor}/libmemcached-0.32/tests/Makefile.in +0 -0
- /data/{ext → vendor}/libmemcached-0.32/tests/atomsmasher.c +0 -0
- /data/{ext → vendor}/libmemcached-0.32/tests/function.c +0 -0
- /data/{ext → vendor}/libmemcached-0.32/tests/ketama_test_cases.h +0 -0
- /data/{ext → vendor}/libmemcached-0.32/tests/output.cmp +0 -0
- /data/{ext → vendor}/libmemcached-0.32/tests/output.res +0 -0
- /data/{ext → vendor}/libmemcached-0.32/tests/output2.res +0 -0
- /data/{ext → vendor}/libmemcached-0.32/tests/plus.cpp +0 -0
- /data/{ext → vendor}/libmemcached-0.32/tests/r/memcat.res +0 -0
- /data/{ext → vendor}/libmemcached-0.32/tests/r/memcp.res +0 -0
- /data/{ext → vendor}/libmemcached-0.32/tests/r/memrm.res +0 -0
- /data/{ext → vendor}/libmemcached-0.32/tests/r/memslap.res +0 -0
- /data/{ext → vendor}/libmemcached-0.32/tests/r/memstat.res +0 -0
- /data/{ext → vendor}/libmemcached-0.32/tests/server.c +0 -0
- /data/{ext → vendor}/libmemcached-0.32/tests/server.h +0 -0
- /data/{ext → vendor}/libmemcached-0.32/tests/start.c +0 -0
- /data/{ext → vendor}/libmemcached-0.32/tests/t/memcat.test +0 -0
- /data/{ext → vendor}/libmemcached-0.32/tests/t/memcp.test +0 -0
- /data/{ext → vendor}/libmemcached-0.32/tests/t/memrm.test +0 -0
- /data/{ext → vendor}/libmemcached-0.32/tests/t/memslap.test +0 -0
- /data/{ext → vendor}/libmemcached-0.32/tests/t/memstat.test +0 -0
- /data/{ext → vendor}/libmemcached-0.32/tests/test.c +0 -0
- /data/{ext → vendor}/libmemcached-0.32/tests/test.h +0 -0
- /data/{ext → vendor}/libmemcached-0.32/tests/udp.c +0 -0
data/lib/memcached/exceptions.rb
CHANGED
@@ -1,4 +1,3 @@
|
|
1
|
-
|
2
1
|
class Memcached
|
3
2
|
|
4
3
|
=begin rdoc
|
@@ -46,17 +45,7 @@ Subclasses correspond one-to-one with server response strings or libmemcached er
|
|
46
45
|
* Memcached::WriteFailure
|
47
46
|
|
48
47
|
=end
|
49
|
-
|
50
|
-
attr_accessor :no_backtrace
|
51
|
-
|
52
|
-
def set_backtrace(*args)
|
53
|
-
@no_backtrace ? [] : super
|
54
|
-
end
|
55
|
-
|
56
|
-
def backtrace(*args)
|
57
|
-
@no_backtrace ? [] : super
|
58
|
-
end
|
59
|
-
end
|
48
|
+
Error = Class.new(RuntimeError)
|
60
49
|
|
61
50
|
#:stopdoc:
|
62
51
|
|
@@ -1,6 +1,5 @@
|
|
1
1
|
class Memcached
|
2
2
|
module Experimental
|
3
|
-
|
4
3
|
# TOUCH is used to set a new expiration time for an existing item
|
5
4
|
def touch(key, ttl=@default_ttl)
|
6
5
|
check_return_code(
|
@@ -9,40 +8,9 @@ class Memcached
|
|
9
8
|
)
|
10
9
|
rescue => e
|
11
10
|
tries ||= 0
|
12
|
-
raise unless
|
11
|
+
raise unless should_retry(e, tries)
|
13
12
|
tries += 1
|
14
13
|
retry
|
15
14
|
end
|
16
|
-
|
17
|
-
def get_len(bytes, keys)
|
18
|
-
if keys.is_a? ::Array
|
19
|
-
# Multi get
|
20
|
-
ret = Lib.memcached_mget_len(@struct, keys, bytes);
|
21
|
-
check_return_code(ret, keys)
|
22
|
-
|
23
|
-
hash = {}
|
24
|
-
keys.each do
|
25
|
-
value, key, flags, ret = Lib.memcached_fetch_rvalue(@struct)
|
26
|
-
break if ret == Lib::MEMCACHED_END
|
27
|
-
if ret != Lib::MEMCACHED_NOTFOUND
|
28
|
-
check_return_code(ret, key)
|
29
|
-
# Assign the value
|
30
|
-
hash[key] = value
|
31
|
-
end
|
32
|
-
end
|
33
|
-
hash
|
34
|
-
else
|
35
|
-
# Single get_len
|
36
|
-
value, flags, ret = Lib.memcached_get_len_rvalue(@struct, keys, bytes)
|
37
|
-
check_return_code(ret, keys)
|
38
|
-
value
|
39
|
-
end
|
40
|
-
rescue => e
|
41
|
-
tries ||= 0
|
42
|
-
raise unless tries < options[:exception_retry_limit] && should_retry(e)
|
43
|
-
tries += 1
|
44
|
-
retry
|
45
|
-
end
|
46
|
-
|
47
15
|
end
|
48
16
|
end
|
data/lib/memcached/memcached.rb
CHANGED
@@ -3,6 +3,7 @@ The Memcached client class.
|
|
3
3
|
=end
|
4
4
|
class Memcached
|
5
5
|
FLAGS = 0x0
|
6
|
+
EMPTY_ARRAY = [].freeze
|
6
7
|
|
7
8
|
DEFAULTS = {
|
8
9
|
:hash => :fnv1_32,
|
@@ -174,17 +175,7 @@ Please note that when <tt>:no_block => true</tt>, update methods do not raise on
|
|
174
175
|
set_servers(servers)
|
175
176
|
|
176
177
|
# Not found exceptions
|
177
|
-
|
178
|
-
# Raise classes for full context
|
179
|
-
@not_found = NotFound
|
180
|
-
@not_stored = NotStored
|
181
|
-
else
|
182
|
-
# Raise fast context-free exception instances
|
183
|
-
@not_found = NotFound.new
|
184
|
-
@not_found.no_backtrace = true
|
185
|
-
@not_stored = NotStored.new
|
186
|
-
@not_stored.no_backtrace = true
|
187
|
-
end
|
178
|
+
@show_backtraces = options[:show_backtraces] ? nil : EMPTY_ARRAY
|
188
179
|
end
|
189
180
|
|
190
181
|
# Set the server list.
|
@@ -197,7 +188,7 @@ Please note that when <tt>:no_block => true</tt>, update methods do not raise on
|
|
197
188
|
args = [@struct, server, options[:default_weight].to_i]
|
198
189
|
Lib.memcached_server_add_unix_socket_with_weight(*args)
|
199
190
|
# Network
|
200
|
-
elsif server.is_a?(String) and server =~ /^[\w
|
191
|
+
elsif server.is_a?(String) and server =~ /^[\w\.-]+(:\d{1,5}){0,2}$/
|
201
192
|
host, port, weight = server.split(":")
|
202
193
|
args = [@struct, host, port.to_i, (weight || options[:default_weight]).to_i]
|
203
194
|
if options[:use_udp]
|
@@ -206,7 +197,11 @@ Please note that when <tt>:no_block => true</tt>, update methods do not raise on
|
|
206
197
|
Lib.memcached_server_add_with_weight(*args)
|
207
198
|
end
|
208
199
|
else
|
209
|
-
raise ArgumentError,
|
200
|
+
raise ArgumentError, <<-MSG
|
201
|
+
Servers must be either in the format 'host:port[:weight]' (e.g., 'localhost:11211' or 'localhost:11211:10')
|
202
|
+
for a network server, or a valid path to a Unix domain socket (e.g., /var/run/memcached).
|
203
|
+
But it was #{server}.
|
204
|
+
MSG
|
210
205
|
end
|
211
206
|
)
|
212
207
|
end
|
@@ -277,8 +272,14 @@ Please note that when <tt>:no_block => true</tt>, update methods do not raise on
|
|
277
272
|
end
|
278
273
|
|
279
274
|
# Should retry the exception
|
280
|
-
def should_retry(
|
281
|
-
options[:
|
275
|
+
def should_retry(exception, tries)
|
276
|
+
return false unless options[:exception_retry_limit]
|
277
|
+
return false unless tries < options[:exception_retry_limit]
|
278
|
+
|
279
|
+
options[:exceptions_to_retry].each do |ex_class|
|
280
|
+
return true if exception.instance_of?(ex_class)
|
281
|
+
end
|
282
|
+
|
282
283
|
false
|
283
284
|
end
|
284
285
|
|
@@ -322,8 +323,7 @@ Please note that when <tt>:no_block => true</tt>, update methods do not raise on
|
|
322
323
|
)
|
323
324
|
rescue => e
|
324
325
|
tries ||= 0
|
325
|
-
|
326
|
-
raise unless tries < options[:exception_retry_limit] && should_retry(e)
|
326
|
+
raise unless should_retry(e, tries)
|
327
327
|
tries += 1
|
328
328
|
retry
|
329
329
|
end
|
@@ -339,7 +339,7 @@ Please note that when <tt>:no_block => true</tt>, update methods do not raise on
|
|
339
339
|
)
|
340
340
|
rescue => e
|
341
341
|
tries ||= 0
|
342
|
-
raise unless
|
342
|
+
raise unless should_retry(e, tries)
|
343
343
|
tries += 1
|
344
344
|
retry
|
345
345
|
end
|
@@ -356,7 +356,7 @@ Please note that when <tt>:no_block => true</tt>, update methods do not raise on
|
|
356
356
|
value
|
357
357
|
rescue => e
|
358
358
|
tries ||= 0
|
359
|
-
raise unless
|
359
|
+
raise unless should_retry(e, tries)
|
360
360
|
tries += 1
|
361
361
|
retry
|
362
362
|
end
|
@@ -368,7 +368,7 @@ Please note that when <tt>:no_block => true</tt>, update methods do not raise on
|
|
368
368
|
value
|
369
369
|
rescue => e
|
370
370
|
tries ||= 0
|
371
|
-
raise unless
|
371
|
+
raise unless should_retry(e, tries)
|
372
372
|
tries += 1
|
373
373
|
retry
|
374
374
|
end
|
@@ -388,7 +388,7 @@ Please note that when <tt>:no_block => true</tt>, update methods do not raise on
|
|
388
388
|
)
|
389
389
|
rescue => e
|
390
390
|
tries ||= 0
|
391
|
-
raise unless
|
391
|
+
raise unless should_retry(e, tries)
|
392
392
|
tries += 1
|
393
393
|
retry
|
394
394
|
end
|
@@ -405,7 +405,7 @@ Please note that when <tt>:no_block => true</tt>, update methods do not raise on
|
|
405
405
|
)
|
406
406
|
rescue => e
|
407
407
|
tries ||= 0
|
408
|
-
raise unless
|
408
|
+
raise unless should_retry(e, tries)
|
409
409
|
tries += 1
|
410
410
|
retry
|
411
411
|
end
|
@@ -419,7 +419,7 @@ Please note that when <tt>:no_block => true</tt>, update methods do not raise on
|
|
419
419
|
)
|
420
420
|
rescue => e
|
421
421
|
tries ||= 0
|
422
|
-
raise unless
|
422
|
+
raise unless should_retry(e, tries)
|
423
423
|
tries += 1
|
424
424
|
retry
|
425
425
|
end
|
@@ -451,7 +451,7 @@ Please note that when <tt>:no_block => true</tt>, update methods do not raise on
|
|
451
451
|
single_cas(keys, value, ttl, flags, cas, decode)
|
452
452
|
end
|
453
453
|
rescue => e
|
454
|
-
raise unless
|
454
|
+
raise unless should_retry(e, tries)
|
455
455
|
tries += 1
|
456
456
|
retry
|
457
457
|
end
|
@@ -468,7 +468,7 @@ Please note that when <tt>:no_block => true</tt>, update methods do not raise on
|
|
468
468
|
)
|
469
469
|
rescue => e
|
470
470
|
tries ||= 0
|
471
|
-
raise unless
|
471
|
+
raise unless should_retry(e, tries)
|
472
472
|
tries += 1
|
473
473
|
retry
|
474
474
|
end
|
@@ -480,7 +480,7 @@ Please note that when <tt>:no_block => true</tt>, update methods do not raise on
|
|
480
480
|
)
|
481
481
|
rescue => e
|
482
482
|
tries ||= 0
|
483
|
-
raise unless
|
483
|
+
raise unless should_retry(e, tries)
|
484
484
|
tries += 1
|
485
485
|
retry
|
486
486
|
end
|
@@ -505,7 +505,7 @@ Please note that when <tt>:no_block => true</tt>, update methods do not raise on
|
|
505
505
|
end
|
506
506
|
rescue => e
|
507
507
|
tries ||= 0
|
508
|
-
raise unless
|
508
|
+
raise unless should_retry(e, tries)
|
509
509
|
tries += 1
|
510
510
|
retry
|
511
511
|
end
|
@@ -521,6 +521,7 @@ Please note that when <tt>:no_block => true</tt>, update methods do not raise on
|
|
521
521
|
|
522
522
|
# Gets a key's value from the previous server. Only useful with random distribution.
|
523
523
|
def get_from_last(key, decode=true)
|
524
|
+
warn("Memcached#get_from_last is deprecated and was removed in newer versions of libmemcached")
|
524
525
|
raise ArgumentError, "get_from_last() is not useful unless :random distribution is enabled." unless options[:distribution] == :random
|
525
526
|
value, flags, ret = Lib.memcached_get_from_last_rvalue(@struct, key)
|
526
527
|
check_return_code(ret, key)
|
@@ -587,9 +588,9 @@ Please note that when <tt>:no_block => true</tt>, update methods do not raise on
|
|
587
588
|
if ret == 0 # Lib::MEMCACHED_SUCCESS
|
588
589
|
elsif ret == 32 # Lib::MEMCACHED_BUFFERED
|
589
590
|
elsif ret == 16
|
590
|
-
raise @
|
591
|
+
raise NotFound, "NOTFOUND".freeze, @show_backtraces, cause: nil # Lib::MEMCACHED_NOTFOUND
|
591
592
|
elsif ret == 14
|
592
|
-
raise @
|
593
|
+
raise NotStored, "NOTSTORED".freeze, @show_backtraces, cause: nil # Lib::MEMCACHED_NOTSTORED
|
593
594
|
else
|
594
595
|
reraise(key, ret)
|
595
596
|
end
|
@@ -630,8 +631,8 @@ Please note that when <tt>:no_block => true</tt>, update methods do not raise on
|
|
630
631
|
# FIXME Is this still necessary with cached_errno?
|
631
632
|
def detect_failure
|
632
633
|
time = Time.now
|
633
|
-
server = server_structs.detect do |
|
634
|
-
|
634
|
+
server = server_structs.detect do |server_struct|
|
635
|
+
server_struct.next_retry > time
|
635
636
|
end
|
636
637
|
inspect_server(server) if server
|
637
638
|
end
|
@@ -645,6 +646,12 @@ Please note that when <tt>:no_block => true</tt>, update methods do not raise on
|
|
645
646
|
set_behavior(:hash, options[:hash])
|
646
647
|
end
|
647
648
|
|
649
|
+
def destroy_credentials
|
650
|
+
if options[:credentials] != nil
|
651
|
+
check_return_code(Lib.memcached_destroy_sasl_auth_data(@struct))
|
652
|
+
end
|
653
|
+
end
|
654
|
+
|
648
655
|
# Set the SASL credentials from the current options. If credentials aren't provided, try to get them from the environment.
|
649
656
|
def set_credentials
|
650
657
|
if options[:credentials]
|
@@ -693,8 +700,8 @@ Please note that when <tt>:no_block => true</tt>, update methods do not raise on
|
|
693
700
|
value, key, flags, ret = Lib.memcached_fetch_rvalue(@struct)
|
694
701
|
end
|
695
702
|
if decode
|
696
|
-
hash.each do |
|
697
|
-
hash[
|
703
|
+
hash.each do |inner_key, value_and_flags|
|
704
|
+
hash[inner_key] = @codec.decode(inner_key, *value_and_flags)
|
698
705
|
end
|
699
706
|
end
|
700
707
|
[hash, flags_and_cas]
|
@@ -714,7 +721,7 @@ Please note that when <tt>:no_block => true</tt>, update methods do not raise on
|
|
714
721
|
check_return_code(ret, key)
|
715
722
|
end
|
716
723
|
rescue => e
|
717
|
-
raise unless
|
724
|
+
raise unless should_retry(e, tries)
|
718
725
|
tries += 1
|
719
726
|
retry
|
720
727
|
end
|
data/lib/memcached/version.rb
CHANGED
data/lib/memcached.rb
CHANGED
@@ -21,13 +21,18 @@ require 'rlibmemcached'
|
|
21
21
|
class Memcached
|
22
22
|
Lib = Rlibmemcached
|
23
23
|
raise "libmemcached 0.32 required; you somehow linked to #{Lib.memcached_lib_version}." unless "0.32" == Lib.memcached_lib_version
|
24
|
+
private_constant :Lib
|
25
|
+
|
26
|
+
VERSION = File.read("#{File.dirname(__FILE__)}/../CHANGELOG")[/v([\d\.]+)\./, 1]
|
27
|
+
|
28
|
+
autoload :Rails, 'memcached/rails'
|
29
|
+
deprecate_constant :Rails
|
30
|
+
autoload :Experimental, 'memcached/experimental'
|
24
31
|
end
|
25
32
|
|
33
|
+
Object.deprecate_constant :Rlibmemcached
|
34
|
+
|
26
35
|
require 'memcached/exceptions'
|
27
36
|
require 'memcached/behaviors'
|
28
|
-
require 'memcached/auth'
|
29
37
|
require 'memcached/marshal_codec'
|
30
38
|
require 'memcached/memcached'
|
31
|
-
require 'memcached/rails'
|
32
|
-
require 'memcached/experimental'
|
33
|
-
require 'memcached/version'
|
data/memcached.gemspec
CHANGED
Binary file
|
data/memcached.pem
ADDED
@@ -0,0 +1,21 @@
|
|
1
|
+
-----BEGIN CERTIFICATE-----
|
2
|
+
MIIDaDCCAlCgAwIBAgIBATANBgkqhkiG9w0BAQUFADA9MQ0wCwYDVQQDDARldmFu
|
3
|
+
MRgwFgYKCZImiZPyLGQBGRYIY2xvdWRidXIxEjAQBgoJkiaJk/IsZAEZFgJzdDAe
|
4
|
+
Fw0xMzExMDQyMDI1MDVaFw0xNDExMDQyMDI1MDVaMD0xDTALBgNVBAMMBGV2YW4x
|
5
|
+
GDAWBgoJkiaJk/IsZAEZFghjbG91ZGJ1cjESMBAGCgmSJomT8ixkARkWAnN0MIIB
|
6
|
+
IjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAuG4q2IdTtlc7/IJkWPnbOAFt
|
7
|
+
ysKc3XmLHsjeSXXSPdQ1mb2cDXvyDS8TkzjrgDoJ96RR2xrh7bfkHAMJhSVMhsPM
|
8
|
+
rnYS7fDs//X1h6fRYBjjhqGeQhCL1xrS5/I4vKb7AjgFnuUbMZ/H0+ic2Ic2zTnZ
|
9
|
+
jttSQZ/QOlYyctrYoTzAFdPwL+dOxskOyAmAbtV/pV3owcXpChRT/tphC7u69sOk
|
10
|
+
+IjWsMwrBCbEdj/Jmh4a52QntAwPWx4Krt0zm8eV3/UjSObB3BR1pZ/i5IsSLPs1
|
11
|
+
lwMA6ywbfxBTP59XcgAyhfV3rRQXb+vjpf7OLuOCJOUIN8GEwb5HNjFo/UVdiwID
|
12
|
+
AQABo3MwcTAJBgNVHRMEAjAAMAsGA1UdDwQEAwIEsDAdBgNVHQ4EFgQUbTCqyydn
|
13
|
+
0Rm6nngf15KtCEMc37swGwYDVR0RBBQwEoEQZXZhbkBjbG91ZGJ1ci5zdDAbBgNV
|
14
|
+
HRIEFDASgRBldmFuQGNsb3VkYnVyLnN0MA0GCSqGSIb3DQEBBQUAA4IBAQBggGGb
|
15
|
+
0AoyF0QofzkPImuhN1UF6eG/RdYOHqiUovuRN/9IblyKAaZAIl1mIspfCav8EVwo
|
16
|
+
SC6vz4OaIVpS7QdI04oLNHxhmC6C5TTBONtddDl93M+9uWVipD5uVPktcHWG+bKn
|
17
|
+
2L1lUykQXr8ra45TqAUZ/P+Yv76U8kUsVG2HE5gl/CgB5+V1qkpn5M4CADsvSvPA
|
18
|
+
qEATZvw+KUzzMCUiVzq+T6lDrrCt+sD3NZlvG4BD2PpQuPtDf1i61DUc+5s2Nwm2
|
19
|
+
t4uqNF7swBWS0n40/hmn5u8pT2JVsuwam79GGhJmNfCdPCcCbgphroexRcrwdURX
|
20
|
+
ly00Xdf1gDVBxRoR
|
21
|
+
-----END CERTIFICATE-----
|
@@ -248,22 +248,32 @@ static memcached_return network_connect(memcached_server_st *ptr)
|
|
248
248
|
struct pollfd fds[1];
|
249
249
|
fds[0].fd = ptr->fd;
|
250
250
|
fds[0].events = POLLOUT;
|
251
|
-
|
252
|
-
|
253
|
-
if (error != 1 || fds[0].revents & POLLERR)
|
251
|
+
while (1)
|
254
252
|
{
|
255
|
-
|
256
|
-
|
257
|
-
if (fds[0].revents & POLLERR)
|
253
|
+
int error= poll(fds, 1, ptr->root->connect_timeout);
|
254
|
+
if (error < 0 && errno == EINTR)
|
258
255
|
{
|
259
|
-
|
260
|
-
|
261
|
-
|
262
|
-
|
256
|
+
/* retry */
|
257
|
+
}
|
258
|
+
else
|
259
|
+
{
|
260
|
+
if (error != 1 || fds[0].revents & POLLERR)
|
261
|
+
{
|
262
|
+
ptr->cached_errno = 0;
|
263
|
+
|
264
|
+
if (fds[0].revents & POLLERR)
|
265
|
+
{
|
266
|
+
int err;
|
267
|
+
socklen_t len = sizeof (err);
|
268
|
+
(void)getsockopt(ptr->fd, SOL_SOCKET, SO_ERROR, &err, &len);
|
269
|
+
ptr->cached_errno= (err == 0) ? errno : err;
|
270
|
+
}
|
271
|
+
|
272
|
+
(void)close(ptr->fd);
|
273
|
+
ptr->fd= -1;
|
274
|
+
}
|
275
|
+
break;
|
263
276
|
}
|
264
|
-
|
265
|
-
(void)close(ptr->fd);
|
266
|
-
ptr->fd= -1;
|
267
277
|
}
|
268
278
|
}
|
269
279
|
else if (errno == EISCONN) /* we are connected :-) */
|
@@ -46,21 +46,24 @@ static memcached_return io_wait(memcached_server_st *ptr,
|
|
46
46
|
return MEMCACHED_FAILURE;
|
47
47
|
}
|
48
48
|
|
49
|
-
|
50
|
-
|
51
|
-
if (error == 1)
|
52
|
-
return MEMCACHED_SUCCESS;
|
53
|
-
else if (error == 0)
|
49
|
+
while(1)
|
54
50
|
{
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
|
51
|
+
error= poll(fds, 1, ptr->root->poll_timeout);
|
52
|
+
if (error == 1)
|
53
|
+
return MEMCACHED_SUCCESS;
|
54
|
+
else if (error == 0)
|
55
|
+
{
|
56
|
+
return MEMCACHED_TIMEOUT;
|
57
|
+
}
|
61
58
|
|
62
|
-
|
59
|
+
if (errno != EINTR) {
|
60
|
+
/* Imposssible for anything other then -1 */
|
61
|
+
WATCHPOINT_ASSERT(error == -1);
|
62
|
+
memcached_quit_server(ptr, 1);
|
63
63
|
|
64
|
+
return MEMCACHED_FAILURE;
|
65
|
+
}
|
66
|
+
}
|
64
67
|
}
|
65
68
|
|
66
69
|
#ifdef UNUSED
|
@@ -115,8 +118,9 @@ memcached_return memcached_io_read(memcached_server_st *ptr,
|
|
115
118
|
rc= MEMCACHED_UNKNOWN_READ_FAILURE;
|
116
119
|
switch (errno)
|
117
120
|
{
|
118
|
-
case EAGAIN:
|
119
121
|
case EINTR:
|
122
|
+
continue;
|
123
|
+
case EAGAIN:
|
120
124
|
if ((rc= io_wait(ptr, MEM_READ)) == MEMCACHED_SUCCESS)
|
121
125
|
continue;
|
122
126
|
/* fall through */
|
@@ -422,6 +426,7 @@ static ssize_t io_flush(memcached_server_st *ptr,
|
|
422
426
|
case ENOBUFS:
|
423
427
|
continue;
|
424
428
|
case EAGAIN:
|
429
|
+
case EINTR:
|
425
430
|
{
|
426
431
|
memcached_return rc;
|
427
432
|
rc= io_wait(ptr, MEM_WRITE);
|
@@ -10,7 +10,7 @@ memcached_return memcached_purge(memcached_server_st *ptr)
|
|
10
10
|
if (ptr->root->purging || /* already purging */
|
11
11
|
(memcached_server_response_count(ptr) < ptr->root->io_msg_watermark &&
|
12
12
|
ptr->io_bytes_sent < ptr->root->io_bytes_watermark) ||
|
13
|
-
(ptr->io_bytes_sent
|
13
|
+
(ptr->io_bytes_sent > ptr->root->io_bytes_watermark &&
|
14
14
|
memcached_server_response_count(ptr) < 2))
|
15
15
|
{
|
16
16
|
return MEMCACHED_SUCCESS;
|