vinted-memcached 1.8.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/BENCHMARKS +142 -0
- data/CHANGELOG +176 -0
- data/Gemfile +11 -0
- data/Gemfile.lock +45 -0
- data/LICENSE +184 -0
- data/Manifest +209 -0
- data/README.rdoc +124 -0
- data/Rakefile +134 -0
- data/TODO +1 -0
- data/ext/extconf-make.rb +25 -0
- data/ext/extconf.rb +78 -0
- data/ext/libmemcached-0.32/AUTHORS +7 -0
- data/ext/libmemcached-0.32/COPYING +32 -0
- data/ext/libmemcached-0.32/ChangeLog +303 -0
- data/ext/libmemcached-0.32/INSTALL +302 -0
- data/ext/libmemcached-0.32/Makefile.am +36 -0
- data/ext/libmemcached-0.32/Makefile.in +911 -0
- data/ext/libmemcached-0.32/NEWS +1 -0
- data/ext/libmemcached-0.32/README +33 -0
- data/ext/libmemcached-0.32/THANKS +14 -0
- data/ext/libmemcached-0.32/TODO +11 -0
- data/ext/libmemcached-0.32/aclocal.m4 +2108 -0
- data/ext/libmemcached-0.32/clients/Makefile.am +80 -0
- data/ext/libmemcached-0.32/clients/Makefile.in +773 -0
- data/ext/libmemcached-0.32/clients/client_options.h +32 -0
- data/ext/libmemcached-0.32/clients/execute.c +64 -0
- data/ext/libmemcached-0.32/clients/execute.h +5 -0
- data/ext/libmemcached-0.32/clients/generator.c +74 -0
- data/ext/libmemcached-0.32/clients/generator.h +20 -0
- data/ext/libmemcached-0.32/clients/memcat.c +178 -0
- data/ext/libmemcached-0.32/clients/memcp.c +251 -0
- data/ext/libmemcached-0.32/clients/memdump.c +170 -0
- data/ext/libmemcached-0.32/clients/memerror.c +80 -0
- data/ext/libmemcached-0.32/clients/memflush.c +143 -0
- data/ext/libmemcached-0.32/clients/memrm.c +160 -0
- data/ext/libmemcached-0.32/clients/memslap.c +441 -0
- data/ext/libmemcached-0.32/clients/memstat.c +326 -0
- data/ext/libmemcached-0.32/clients/utilities.c +207 -0
- data/ext/libmemcached-0.32/clients/utilities.h +41 -0
- data/ext/libmemcached-0.32/config/compile +143 -0
- data/ext/libmemcached-0.32/config/config.guess +1561 -0
- data/ext/libmemcached-0.32/config/config.rpath +666 -0
- data/ext/libmemcached-0.32/config/config.sub +1686 -0
- data/ext/libmemcached-0.32/config/depcomp +630 -0
- data/ext/libmemcached-0.32/config/install-sh +520 -0
- data/ext/libmemcached-0.32/config/ltmain.sh +9636 -0
- data/ext/libmemcached-0.32/config/missing +376 -0
- data/ext/libmemcached-0.32/config.h.in +254 -0
- data/ext/libmemcached-0.32/configure +23843 -0
- data/ext/libmemcached-0.32/configure.ac +120 -0
- data/ext/libmemcached-0.32/libmemcached/Makefile.am +111 -0
- data/ext/libmemcached-0.32/libmemcached/Makefile.in +1069 -0
- data/ext/libmemcached-0.32/libmemcached/byteorder.c +31 -0
- data/ext/libmemcached-0.32/libmemcached/common.h +189 -0
- data/ext/libmemcached-0.32/libmemcached/crc.c +86 -0
- data/ext/libmemcached-0.32/libmemcached/hsieh_hash.c +68 -0
- data/ext/libmemcached-0.32/libmemcached/jenkins_hash.c +213 -0
- data/ext/libmemcached-0.32/libmemcached/libmemcached.ver +1 -0
- data/ext/libmemcached-0.32/libmemcached/libmemcached_probes.d +30 -0
- data/ext/libmemcached-0.32/libmemcached/libmemcached_probes.h +82 -0
- data/ext/libmemcached-0.32/libmemcached/md5.c +354 -0
- data/ext/libmemcached-0.32/libmemcached/memcached/README.txt +7 -0
- data/ext/libmemcached-0.32/libmemcached/memcached/protocol_binary.h +385 -0
- data/ext/libmemcached-0.32/libmemcached/memcached.c +153 -0
- data/ext/libmemcached-0.32/libmemcached/memcached.h +305 -0
- data/ext/libmemcached-0.32/libmemcached/memcached.hpp +799 -0
- data/ext/libmemcached-0.32/libmemcached/memcached_allocators.c +72 -0
- data/ext/libmemcached-0.32/libmemcached/memcached_analyze.c +100 -0
- data/ext/libmemcached-0.32/libmemcached/memcached_auto.c +207 -0
- data/ext/libmemcached-0.32/libmemcached/memcached_behavior.c +290 -0
- data/ext/libmemcached-0.32/libmemcached/memcached_callback.c +175 -0
- data/ext/libmemcached-0.32/libmemcached/memcached_configure.h.in +23 -0
- data/ext/libmemcached-0.32/libmemcached/memcached_connect.c +371 -0
- data/ext/libmemcached-0.32/libmemcached/memcached_constants.h +146 -0
- data/ext/libmemcached-0.32/libmemcached/memcached_delete.c +0 -0
- data/ext/libmemcached-0.32/libmemcached/memcached_do.c +72 -0
- data/ext/libmemcached-0.32/libmemcached/memcached_dump.c +79 -0
- data/ext/libmemcached-0.32/libmemcached/memcached_exist.c +114 -0
- data/ext/libmemcached-0.32/libmemcached/memcached_exist.h +20 -0
- data/ext/libmemcached-0.32/libmemcached/memcached_fetch.c +102 -0
- data/ext/libmemcached-0.32/libmemcached/memcached_flush.c +89 -0
- data/ext/libmemcached-0.32/libmemcached/memcached_flush_buffers.c +23 -0
- data/ext/libmemcached-0.32/libmemcached/memcached_get.c +494 -0
- data/ext/libmemcached-0.32/libmemcached/memcached_get.h +87 -0
- data/ext/libmemcached-0.32/libmemcached/memcached_hash.c +252 -0
- data/ext/libmemcached-0.32/libmemcached/memcached_hosts.c +510 -0
- data/ext/libmemcached-0.32/libmemcached/memcached_internal.h +31 -0
- data/ext/libmemcached-0.32/libmemcached/memcached_io.c +594 -0
- data/ext/libmemcached-0.32/libmemcached/memcached_io.h +72 -0
- data/ext/libmemcached-0.32/libmemcached/memcached_key.c +28 -0
- data/ext/libmemcached-0.32/libmemcached/memcached_parse.c +74 -0
- data/ext/libmemcached-0.32/libmemcached/memcached_pool.h +38 -0
- data/ext/libmemcached-0.32/libmemcached/memcached_purge.c +76 -0
- data/ext/libmemcached-0.32/libmemcached/memcached_quit.c +75 -0
- data/ext/libmemcached-0.32/libmemcached/memcached_response.c +529 -0
- data/ext/libmemcached-0.32/libmemcached/memcached_result.c +57 -0
- data/ext/libmemcached-0.32/libmemcached/memcached_result.h +59 -0
- data/ext/libmemcached-0.32/libmemcached/memcached_sasl.c +225 -0
- data/ext/libmemcached-0.32/libmemcached/memcached_sasl.h +44 -0
- data/ext/libmemcached-0.32/libmemcached/memcached_server.c +159 -0
- data/ext/libmemcached-0.32/libmemcached/memcached_server.h +93 -0
- data/ext/libmemcached-0.32/libmemcached/memcached_stats.c +437 -0
- data/ext/libmemcached-0.32/libmemcached/memcached_storage.c +514 -0
- data/ext/libmemcached-0.32/libmemcached/memcached_storage.h +107 -0
- data/ext/libmemcached-0.32/libmemcached/memcached_strerror.c +92 -0
- data/ext/libmemcached-0.32/libmemcached/memcached_string.c +138 -0
- data/ext/libmemcached-0.32/libmemcached/memcached_string.h +53 -0
- data/ext/libmemcached-0.32/libmemcached/memcached_touch.c +60 -0
- data/ext/libmemcached-0.32/libmemcached/memcached_touch.h +31 -0
- data/ext/libmemcached-0.32/libmemcached/memcached_types.h +44 -0
- data/ext/libmemcached-0.32/libmemcached/memcached_util.h +15 -0
- data/ext/libmemcached-0.32/libmemcached/memcached_verbosity.c +36 -0
- data/ext/libmemcached-0.32/libmemcached/memcached_version.c +112 -0
- data/ext/libmemcached-0.32/libmemcached/memcached_watchpoint.h +38 -0
- data/ext/libmemcached-0.32/libmemcached/murmur_hash.c +76 -0
- data/ext/libmemcached-0.32/libmemcached/visibility.h +51 -0
- data/ext/libmemcached-0.32/libmemcachedutil/Makefile.am +11 -0
- data/ext/libmemcached-0.32/libmemcachedutil/Makefile.in +604 -0
- data/ext/libmemcached-0.32/libmemcachedutil/libmemcachedutil.ver +1 -0
- data/ext/libmemcached-0.32/libmemcachedutil/memcached_pool.c +170 -0
- data/ext/libmemcached-0.32/m4/ac_cxx_compile_stdcxx_0x.m4 +103 -0
- data/ext/libmemcached-0.32/m4/ac_cxx_header_stdcxx_98.m4 +67 -0
- data/ext/libmemcached-0.32/m4/acx_pthread.m4 +276 -0
- data/ext/libmemcached-0.32/m4/byteorder.m4 +40 -0
- data/ext/libmemcached-0.32/m4/deprecated.m4 +17 -0
- data/ext/libmemcached-0.32/m4/enable_utillib.m4 +16 -0
- data/ext/libmemcached-0.32/m4/extensions.m4 +94 -0
- data/ext/libmemcached-0.32/m4/hsieh.m4 +18 -0
- data/ext/libmemcached-0.32/m4/lib-prefix.m4 +221 -0
- data/ext/libmemcached-0.32/m4/libtool.m4 +7831 -0
- data/ext/libmemcached-0.32/m4/ltoptions.m4 +369 -0
- data/ext/libmemcached-0.32/m4/ltsugar.m4 +123 -0
- data/ext/libmemcached-0.32/m4/ltversion.m4 +23 -0
- data/ext/libmemcached-0.32/m4/lt~obsolete.m4 +98 -0
- data/ext/libmemcached-0.32/m4/memcached.m4 +30 -0
- data/ext/libmemcached-0.32/m4/pandora_64bit.m4 +55 -0
- data/ext/libmemcached-0.32/m4/pandora_canonical.m4 +151 -0
- data/ext/libmemcached-0.32/m4/pandora_check_compiler_version.m4 +37 -0
- data/ext/libmemcached-0.32/m4/pandora_check_cxx_standard.m4 +16 -0
- data/ext/libmemcached-0.32/m4/pandora_enable_dtrace.m4 +41 -0
- data/ext/libmemcached-0.32/m4/pandora_ensure_gcc_version.m4 +36 -0
- data/ext/libmemcached-0.32/m4/pandora_have_better_malloc.m4 +54 -0
- data/ext/libmemcached-0.32/m4/pandora_have_sasl.m4 +133 -0
- data/ext/libmemcached-0.32/m4/pandora_header_assert.m4 +23 -0
- data/ext/libmemcached-0.32/m4/pandora_libtool.m4 +15 -0
- data/ext/libmemcached-0.32/m4/pandora_optimize.m4 +79 -0
- data/ext/libmemcached-0.32/m4/pandora_shared_ptr.m4 +56 -0
- data/ext/libmemcached-0.32/m4/pandora_vc_build.m4 +32 -0
- data/ext/libmemcached-0.32/m4/pandora_warnings.m4 +262 -0
- data/ext/libmemcached-0.32/m4/pod2man.m4 +7 -0
- data/ext/libmemcached-0.32/m4/protocol_binary.m4 +23 -0
- data/ext/libmemcached-0.32/m4/setsockopt.m4 +57 -0
- data/ext/libmemcached-0.32/m4/visibility.m4 +52 -0
- data/ext/libmemcached-0.32/support/Makefile.am +4 -0
- data/ext/libmemcached-0.32/support/Makefile.in +487 -0
- data/ext/libmemcached-0.32/support/libmemcached-fc.spec.in +105 -0
- data/ext/libmemcached-0.32/support/libmemcached.pc.in +10 -0
- data/ext/libmemcached-0.32/support/libmemcached.spec +105 -0
- data/ext/libmemcached-0.32/support/libmemcached.spec.in +105 -0
- data/ext/libmemcached-0.32/support/set_benchmark.sh +5 -0
- data/ext/libmemcached-0.32/tests/Makefile.am +113 -0
- data/ext/libmemcached-0.32/tests/Makefile.in +762 -0
- data/ext/libmemcached-0.32/tests/atomsmasher.c +245 -0
- data/ext/libmemcached-0.32/tests/function.c +4904 -0
- data/ext/libmemcached-0.32/tests/ketama_test_cases.h +108 -0
- data/ext/libmemcached-0.32/tests/output.cmp +7 -0
- data/ext/libmemcached-0.32/tests/output.res +7 -0
- data/ext/libmemcached-0.32/tests/output2.res +46 -0
- data/ext/libmemcached-0.32/tests/plus.cpp +293 -0
- data/ext/libmemcached-0.32/tests/r/memcat.res +19 -0
- data/ext/libmemcached-0.32/tests/r/memcp.res +27 -0
- data/ext/libmemcached-0.32/tests/r/memrm.res +19 -0
- data/ext/libmemcached-0.32/tests/r/memslap.res +33 -0
- data/ext/libmemcached-0.32/tests/r/memstat.res +33 -0
- data/ext/libmemcached-0.32/tests/server.c +118 -0
- data/ext/libmemcached-0.32/tests/server.h +25 -0
- data/ext/libmemcached-0.32/tests/start.c +16 -0
- data/ext/libmemcached-0.32/tests/t/memcat.test +4 -0
- data/ext/libmemcached-0.32/tests/t/memcp.test +3 -0
- data/ext/libmemcached-0.32/tests/t/memrm.test +3 -0
- data/ext/libmemcached-0.32/tests/t/memslap.test +5 -0
- data/ext/libmemcached-0.32/tests/t/memstat.test +3 -0
- data/ext/libmemcached-0.32/tests/test.c +137 -0
- data/ext/libmemcached-0.32/tests/test.h +46 -0
- data/ext/libmemcached-0.32/tests/udp.c +76 -0
- data/ext/rlibmemcached.i +258 -0
- data/ext/rlibmemcached_wrap.c +13917 -0
- data/lib/memcached/auth.rb +16 -0
- data/lib/memcached/behaviors.rb +78 -0
- data/lib/memcached/exceptions.rb +84 -0
- data/lib/memcached/experimental.rb +48 -0
- data/lib/memcached/marshal_codec.rb +10 -0
- data/lib/memcached/memcached.rb +732 -0
- data/lib/memcached/rails.rb +250 -0
- data/lib/memcached.rb +33 -0
- data/memcached.gemspec +0 -0
- data/test/profile/benchmark.rb +280 -0
- data/test/profile/c_profiler.rb +14 -0
- data/test/profile/exercise.rb +185 -0
- data/test/profile/rb_profiler.rb +21 -0
- data/test/profile/valgrind.rb +10 -0
- data/test/setup.rb +30 -0
- data/test/teardown.rb +0 -0
- data/test/test_helper.rb +18 -0
- data/test/unit/binding_test.rb +8 -0
- data/test/unit/memcached_experimental_test.rb +272 -0
- data/test/unit/memcached_test.rb +1487 -0
- data/test/unit/rails_test.rb +330 -0
- metadata +336 -0
@@ -0,0 +1,16 @@
|
|
1
|
+
class Memcached
|
2
|
+
def destroy_credentials
|
3
|
+
if options[:credentials] != nil
|
4
|
+
check_return_code(Lib.memcached_destroy_sasl_auth_data(@struct))
|
5
|
+
end
|
6
|
+
end
|
7
|
+
|
8
|
+
def set_credentials
|
9
|
+
# If credentials aren't provided, try to get them from the environment
|
10
|
+
if options[:credentials] != nil
|
11
|
+
username, password = options[:credentials]
|
12
|
+
check_return_code(Lib.memcached_set_sasl_auth_data(@struct, username, password))
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
16
|
+
|
@@ -0,0 +1,78 @@
|
|
1
|
+
|
2
|
+
class Memcached
|
3
|
+
|
4
|
+
#:stopdoc:
|
5
|
+
|
6
|
+
def self.load_constants(prefix, hash = {})
|
7
|
+
Lib.constants.grep(/^#{prefix}/).each do |const_name|
|
8
|
+
hash[const_name[prefix.length..-1].downcase.to_sym] = Lib.const_get(const_name)
|
9
|
+
end
|
10
|
+
hash
|
11
|
+
end
|
12
|
+
|
13
|
+
BEHAVIORS = load_constants("MEMCACHED_BEHAVIOR_")
|
14
|
+
|
15
|
+
BEHAVIOR_VALUES = {
|
16
|
+
false => 0,
|
17
|
+
true => 1
|
18
|
+
}
|
19
|
+
|
20
|
+
HASH_VALUES = {}
|
21
|
+
BEHAVIOR_VALUES.merge!(load_constants("MEMCACHED_HASH_", HASH_VALUES))
|
22
|
+
|
23
|
+
DISTRIBUTION_VALUES = {}
|
24
|
+
BEHAVIOR_VALUES.merge!(load_constants("MEMCACHED_DISTRIBUTION_", DISTRIBUTION_VALUES))
|
25
|
+
|
26
|
+
DIRECT_VALUE_BEHAVIORS = [:retry_timeout, :connect_timeout, :rcv_timeout, :socket_recv_size, :poll_timeout, :socket_send_size, :server_failure_limit, :snd_timeout, :poll_max_retries]
|
27
|
+
|
28
|
+
CONVERSION_FACTORS = {
|
29
|
+
:rcv_timeout => 1_000_000,
|
30
|
+
:snd_timeout => 1_000_000,
|
31
|
+
:poll_timeout => 1_000,
|
32
|
+
:connect_timeout => 1_000
|
33
|
+
}
|
34
|
+
|
35
|
+
#:startdoc:
|
36
|
+
|
37
|
+
private
|
38
|
+
|
39
|
+
# Set a behavior option for this Memcached instance. Accepts a Symbol <tt>behavior</tt> and either <tt>true</tt>, <tt>false</tt>, or a Symbol for <tt>value</tt>. Arguments are validated and converted into integers for the struct setter method.
|
40
|
+
def set_behavior(behavior, value) #:doc:
|
41
|
+
raise ArgumentError, "No behavior #{behavior.inspect}" unless b_id = BEHAVIORS[behavior]
|
42
|
+
|
43
|
+
# Scoped validations; annoying
|
44
|
+
msg = "Invalid behavior value #{value.inspect} for #{behavior.inspect}"
|
45
|
+
case behavior
|
46
|
+
when :hash then raise(ArgumentError, msg) unless HASH_VALUES[value]
|
47
|
+
when :distribution then raise(ArgumentError, msg) unless DISTRIBUTION_VALUES[value]
|
48
|
+
when *DIRECT_VALUE_BEHAVIORS then raise(ArgumentError, msg) unless value.is_a?(Numeric) and value >= 0
|
49
|
+
else
|
50
|
+
raise(ArgumentError, msg) unless BEHAVIOR_VALUES[value]
|
51
|
+
end
|
52
|
+
|
53
|
+
lib_value = BEHAVIOR_VALUES[value] || (value * (CONVERSION_FACTORS[behavior] || 1)).to_i
|
54
|
+
#STDERR.puts "Setting #{behavior}:#{b_id} => #{value} (#{lib_value})"
|
55
|
+
Lib.memcached_behavior_set(@struct, b_id, lib_value)
|
56
|
+
#STDERR.puts " -> set to #{get_behavior(behavior).inspect}"
|
57
|
+
end
|
58
|
+
|
59
|
+
# Get a behavior value for this Memcached instance. Accepts a Symbol.
|
60
|
+
def get_behavior(behavior)
|
61
|
+
raise ArgumentError, "No behavior #{behavior.inspect}" unless b_id = BEHAVIORS[behavior]
|
62
|
+
value = Lib.memcached_behavior_get(@struct, b_id)
|
63
|
+
|
64
|
+
if BEHAVIOR_VALUES.invert.has_key?(value)
|
65
|
+
# False, nil are valid values so we can not rely on direct lookups
|
66
|
+
case behavior
|
67
|
+
# Scoped values; still annoying
|
68
|
+
when :hash then HASH_VALUES.invert[value]
|
69
|
+
when :distribution then DISTRIBUTION_VALUES.invert[value]
|
70
|
+
else
|
71
|
+
value
|
72
|
+
end
|
73
|
+
else
|
74
|
+
value
|
75
|
+
end
|
76
|
+
end
|
77
|
+
|
78
|
+
end
|
@@ -0,0 +1,84 @@
|
|
1
|
+
|
2
|
+
class Memcached
|
3
|
+
|
4
|
+
=begin rdoc
|
5
|
+
|
6
|
+
Superclass for all Memcached runtime exceptions.
|
7
|
+
|
8
|
+
Subclasses correspond one-to-one with server response strings or libmemcached errors. For example, raising <b>Memcached::NotFound</b> means that the server returned <tt>"NOT_FOUND\r\n"</tt>.
|
9
|
+
|
10
|
+
== Subclasses
|
11
|
+
|
12
|
+
* Memcached::ABadKeyWasProvidedOrCharactersOutOfRange
|
13
|
+
* Memcached::AKeyLengthOfZeroWasProvided
|
14
|
+
* Memcached::ATimeoutOccurred
|
15
|
+
* Memcached::ActionNotSupported
|
16
|
+
* Memcached::ActionQueued
|
17
|
+
* Memcached::ClientError
|
18
|
+
* Memcached::ConnectionBindFailure
|
19
|
+
* Memcached::ConnectionDataDoesNotExist
|
20
|
+
* Memcached::ConnectionDataExists
|
21
|
+
* Memcached::ConnectionFailure
|
22
|
+
* Memcached::ConnectionSocketCreateFailure
|
23
|
+
* Memcached::CouldNotOpenUnixSocket
|
24
|
+
* Memcached::EncounteredAnUnknownStatKey
|
25
|
+
* Memcached::Failure
|
26
|
+
* Memcached::FetchWasNotCompleted
|
27
|
+
* Memcached::HostnameLookupFailure
|
28
|
+
* Memcached::ItemValue
|
29
|
+
* Memcached::MemoryAllocationFailure
|
30
|
+
* Memcached::NoServersDefined
|
31
|
+
* Memcached::NotFound
|
32
|
+
* Memcached::NotStored
|
33
|
+
* Memcached::PartialRead
|
34
|
+
* Memcached::ProtocolError
|
35
|
+
* Memcached::ReadFailure
|
36
|
+
* Memcached::ServerDelete
|
37
|
+
* Memcached::ServerEnd
|
38
|
+
* Memcached::ServerError
|
39
|
+
* Memcached::ServerIsMarkedDead
|
40
|
+
* Memcached::ServerValue
|
41
|
+
* Memcached::SomeErrorsWereReported
|
42
|
+
* Memcached::StatValue
|
43
|
+
* Memcached::SystemError
|
44
|
+
* Memcached::TheHostTransportProtocolDoesNotMatchThatOfTheClient
|
45
|
+
* Memcached::UnknownReadFailure
|
46
|
+
* Memcached::WriteFailure
|
47
|
+
|
48
|
+
=end
|
49
|
+
class Error < RuntimeError
|
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
|
60
|
+
|
61
|
+
#:stopdoc:
|
62
|
+
|
63
|
+
class << self
|
64
|
+
private
|
65
|
+
def camelize(string)
|
66
|
+
string.downcase.gsub('/', ' or ').split(' ').map {|s| s.capitalize}.join
|
67
|
+
end
|
68
|
+
end
|
69
|
+
|
70
|
+
ERRNO_HASH = Hash[*Errno.constants.grep(/^E/).map{ |c| [Errno.const_get(c)::Errno, Errno.const_get(c).new.message] }.flatten]
|
71
|
+
|
72
|
+
EXCEPTIONS = []
|
73
|
+
empty_struct = Lib.memcached_create(nil)
|
74
|
+
Lib.memcached_create(empty_struct)
|
75
|
+
|
76
|
+
# Generate exception classes
|
77
|
+
Lib::MEMCACHED_MAXIMUM_RETURN.times do |index|
|
78
|
+
description = Lib.memcached_strerror(empty_struct, index).gsub("!", "")
|
79
|
+
exception_class = eval("class #{camelize(description)} < Error; self; end")
|
80
|
+
EXCEPTIONS << exception_class
|
81
|
+
end
|
82
|
+
|
83
|
+
#:startdoc:
|
84
|
+
end
|
@@ -0,0 +1,48 @@
|
|
1
|
+
class Memcached
|
2
|
+
module Experimental
|
3
|
+
|
4
|
+
# TOUCH is used to set a new expiration time for an existing item
|
5
|
+
def touch(key, ttl=@default_ttl)
|
6
|
+
check_return_code(
|
7
|
+
Lib.memcached_touch(@struct, key, ttl),
|
8
|
+
key
|
9
|
+
)
|
10
|
+
rescue => e
|
11
|
+
tries ||= 0
|
12
|
+
raise unless tries < options[:exception_retry_limit] && should_retry(e)
|
13
|
+
tries += 1
|
14
|
+
retry
|
15
|
+
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
|
+
end
|
48
|
+
end
|