memcached 1.2.7 → 1.3

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.
Binary file
data/CHANGELOG CHANGED
@@ -1,3 +1,7 @@
1
+ v1.3. Improvements to BSD support; add Memcached#touch method (avsej).
2
+
3
+ v1.2.7.1 Retry SomeErrorsWereReported exception
4
+
1
5
  v1.2.7. Fix prefix keys on binary (multi)gets. Remove extraneous space from CAS requests.
2
6
 
3
7
  v1.2.6. Fix build issue on FreeBSD. Fix errno mangling on timeouts during memcached_connect().
data/Manifest CHANGED
@@ -137,6 +137,8 @@ ext/libmemcached-0.32/libmemcached/memcached_storage.h
137
137
  ext/libmemcached-0.32/libmemcached/memcached_strerror.c
138
138
  ext/libmemcached-0.32/libmemcached/memcached_string.c
139
139
  ext/libmemcached-0.32/libmemcached/memcached_string.h
140
+ ext/libmemcached-0.32/libmemcached/memcached_touch.c
141
+ ext/libmemcached-0.32/libmemcached/memcached_touch.h
140
142
  ext/libmemcached-0.32/libmemcached/memcached_types.h
141
143
  ext/libmemcached-0.32/libmemcached/memcached_util.h
142
144
  ext/libmemcached-0.32/libmemcached/memcached_verbosity.c
data/Rakefile CHANGED
@@ -12,6 +12,7 @@ Echoe.new("memcached") do |p|
12
12
  "ext/lib",
13
13
  "ext/share",
14
14
  "ext/**/Makefile",
15
+ "ext/libmemcached-*/autom4te.cache",
15
16
  "ext/libmemcached-*/clients/memcat",
16
17
  "ext/libmemcached-*/clients/memcp",
17
18
  "ext/libmemcached-*/clients/memdump",
@@ -53,11 +54,11 @@ task :exceptions do
53
54
  end
54
55
 
55
56
  task :test_all do
56
- if !system("rvm use ree-1.8.7-2010.02 && rake clean && rake")
57
+ if !system("bash -c 'cd && source .bash_profile && rvm use ree-1.8.7-2010.02 && cd - && rake clean && rake'")
57
58
  puts "REE test failed"
58
59
  exit(1)
59
60
  end
60
- if !system("rvm use ruby-1.9.2 && rake clean && rake")
61
+ if !system("bash -c 'cd && source .bash_profile && rvm use 1.9.2-p180 && cd - && rake clean && rake'")
61
62
  puts "1.9 test failed"
62
63
  exit(1)
63
64
  end
@@ -4,16 +4,17 @@ require 'rbconfig'
4
4
  HERE = File.expand_path(File.dirname(__FILE__))
5
5
  BUNDLE_PATH = Dir.glob("libmemcached-*").first
6
6
 
7
- SOLARIS_32 = RbConfig::CONFIG['target'] == "i386-pc-solaris2.10"
7
+ SOLARIS_32 = Config::CONFIG['target'] == "i386-pc-solaris2.10"
8
8
  BSD = Config::CONFIG['host_os'].downcase =~ /bsd/
9
9
 
10
- $CFLAGS = "#{RbConfig::CONFIG['CFLAGS']} #{$CFLAGS}".gsub("$(cflags)", "").gsub("-fno-common", "")
10
+ $CFLAGS = "#{Config::CONFIG['CFLAGS']} #{$CFLAGS}".gsub("$(cflags)", "").gsub("-fno-common", "").gsub("-Werror=declaration-after-statement", "")
11
11
  $CFLAGS << " -std=gnu99" if SOLARIS_32
12
12
  $CFLAGS << " -I/usr/local/include" if BSD
13
13
  $EXTRA_CONF = " --disable-64bit" if SOLARIS_32
14
- $LDFLAGS = "#{RbConfig::CONFIG['LDFLAGS']} #{$LDFLAGS} -L#{RbConfig::CONFIG['libdir']}".gsub("$(ldflags)", "").gsub("-fno-common", "")
14
+ $LDFLAGS = "#{Config::CONFIG['LDFLAGS']} #{$LDFLAGS} -L#{Config::CONFIG['libdir']}".gsub("$(ldflags)", "").gsub("-fno-common", "")
15
15
  $CXXFLAGS = " -std=gnu++98"
16
16
  $CPPFLAGS = $ARCH_FLAG = $DLDFLAGS = ""
17
+ $CC = "CC=#{Config::MAKEFILE_CONFIG["CC"].inspect}"
17
18
 
18
19
  # JRuby's default configure options can't build libmemcached properly
19
20
  LIBM_CFLAGS = defined?(JRUBY_VERSION) ? "-fPIC -g -O2" : $CFLAGS
@@ -50,7 +51,7 @@ def check_libmemcached
50
51
  run("touch -r #{BUNDLE_PATH}/m4/visibility.m4 #{BUNDLE_PATH}/configure.ac #{BUNDLE_PATH}/m4/pandora_have_sasl.m4", "Touching aclocal.m4 in libmemcached.")
51
52
 
52
53
  Dir.chdir(BUNDLE_PATH) do
53
- run("env CFLAGS='-fPIC #{LIBM_CFLAGS}' LDFLAGS='-fPIC #{LIBM_LDFLAGS}' ./configure --prefix=#{HERE} --without-memcached --disable-shared --disable-utils --disable-dependency-tracking #{$EXTRA_CONF} 2>&1", "Configuring libmemcached.")
54
+ run("env CFLAGS='-fPIC #{LIBM_CFLAGS}' LDFLAGS='-fPIC #{LIBM_LDFLAGS}' ./configure --prefix=#{HERE} --without-memcached --disable-shared --disable-utils --disable-dependency-tracking #{$CC} #{$EXTRA_CONF} 2>&1", "Configuring libmemcached.")
54
55
  end
55
56
 
56
57
  Dir.chdir(BUNDLE_PATH) do
@@ -71,10 +72,15 @@ check_libmemcached
71
72
 
72
73
  if ENV['SWIG']
73
74
  puts "WARNING: Swig 2.0.2 not found. Other versions may not work." if (`swig -version`!~ /2.0.2/)
74
- run("swig #{$defines} #{$includes} -ruby -autorename rlibmemcached.i", "Running SWIG.")
75
- run("sed -i '' 's/STR2CSTR/StringValuePtr/' rlibmemcached_wrap.c", "Patching SWIG output for Ruby 1.9.")
76
- run("sed -i '' 's/\"swig_runtime_data\"/\"SwigRuntimeData\"/' rlibmemcached_wrap.c", "Patching SWIG output for Ruby 1.9.")
77
- run("sed -i '' 's/#ifndef RUBY_INIT_STACK/#ifdef __NEVER__/g' rlibmemcached_wrap.c", "Patching SWIG output for JRuby.")
75
+ run("swig #{$defines} #{$includes} -ruby -autorename -o rlibmemcached_wrap.c.in rlibmemcached.i", "Running SWIG.")
76
+ swig_patches = {
77
+ "STR2CSTR" => "StringValuePtr", # Patching SWIG output for Ruby 1.9.
78
+ "\"swig_runtime_data\"" => "\"SwigRuntimeData\"", # Patching SWIG output for Ruby 1.9.
79
+ "#ifndef RUBY_INIT_STACK" => "#ifdef __NEVER__", # Patching SWIG output for JRuby.
80
+ }.map{|pair| "s/#{pair.join('/')}/"}.join(';')
81
+
82
+ # sed has different syntax for inplace switch in BSD and GNU version, so using intermediate file
83
+ run("sed '#{swig_patches}' rlibmemcached_wrap.c.in > rlibmemcached_wrap.c", "Apply patches to SWIG output")
78
84
  end
79
85
 
80
86
  $CFLAGS << " -Os"
@@ -1,8 +1,8 @@
1
1
  EXTRA_DIST = libmemcached_probes.d memcached/README.txt libmemcached.ver \
2
2
  memcached_configure.h.in
3
3
 
4
- EXTRA_HEADERS =
5
- BUILT_SOURCES=
4
+ EXTRA_HEADERS =
5
+ BUILT_SOURCES=
6
6
 
7
7
  noinst_HEADERS = libmemcached_probes.h \
8
8
  memcached_io.h \
@@ -15,6 +15,7 @@ pkginclude_HEADERS= memcached.h \
15
15
  memcached_configure.h \
16
16
  memcached_constants.h \
17
17
  memcached_get.h \
18
+ memcached_touch.h \
18
19
  memcached_result.h \
19
20
  memcached_sasl.h \
20
21
  memcached_server.h \
@@ -47,6 +48,7 @@ libmemcached_la_SOURCES = crc.c \
47
48
  memcached_fetch.c \
48
49
  memcached_flush.c \
49
50
  memcached_get.c \
51
+ memcached_touch.c \
50
52
  memcached_hash.c \
51
53
  memcached_hosts.c \
52
54
  memcached_io.c \
@@ -111,9 +111,9 @@ am__libmemcached_la_SOURCES_DIST = crc.c memcached.c memcached_auto.c \
111
111
  memcached_analyze.c memcached_behavior.c memcached_connect.c \
112
112
  memcached_delete.c memcached_do.c memcached_dump.c \
113
113
  memcached_fetch.c memcached_flush.c memcached_get.c \
114
- memcached_hash.c memcached_hosts.c memcached_io.c \
115
- memcached_purge.c memcached_flush_buffers.c md5.c \
116
- memcached_key.c memcached_quit.c memcached_parse.c \
114
+ memcached_touch.c memcached_hash.c memcached_hosts.c \
115
+ memcached_io.c memcached_purge.c memcached_flush_buffers.c \
116
+ md5.c memcached_key.c memcached_quit.c memcached_parse.c \
117
117
  memcached_response.c memcached_result.c memcached_server.c \
118
118
  memcached_storage.c memcached_string.c memcached_stats.c \
119
119
  memcached_strerror.c memcached_verbosity.c memcached_version.c \
@@ -135,6 +135,7 @@ am_libmemcached_la_OBJECTS = libmemcached_la-crc.lo \
135
135
  libmemcached_la-memcached_fetch.lo \
136
136
  libmemcached_la-memcached_flush.lo \
137
137
  libmemcached_la-memcached_get.lo \
138
+ libmemcached_la-memcached_touch.lo \
138
139
  libmemcached_la-memcached_hash.lo \
139
140
  libmemcached_la-memcached_hosts.lo \
140
141
  libmemcached_la-memcached_io.lo \
@@ -187,10 +188,10 @@ DIST_SOURCES = $(am__libmemcached_la_SOURCES_DIST) \
187
188
  $(libmemcachedcallbacks_la_SOURCES)
188
189
  am__pkginclude_HEADERS_DIST = memcached.h memcached.hpp \
189
190
  memcached_configure.h memcached_constants.h memcached_get.h \
190
- memcached_result.h memcached_sasl.h memcached_server.h \
191
- memcached_storage.h memcached_string.h memcached_types.h \
192
- memcached_watchpoint.h visibility.h memcached_util.h \
193
- memcached_pool.h
191
+ memcached_touch.h memcached_result.h memcached_sasl.h \
192
+ memcached_server.h memcached_storage.h memcached_string.h \
193
+ memcached_types.h memcached_watchpoint.h visibility.h \
194
+ memcached_util.h memcached_pool.h
194
195
  HEADERS = $(noinst_HEADERS) $(pkginclude_HEADERS)
195
196
  ETAGS = etags
196
197
  CTAGS = ctags
@@ -368,10 +369,10 @@ noinst_HEADERS = libmemcached_probes.h \
368
369
  memcached/protocol_binary.h
369
370
 
370
371
  pkginclude_HEADERS = memcached.h memcached.hpp memcached_configure.h \
371
- memcached_constants.h memcached_get.h memcached_result.h \
372
- memcached_sasl.h memcached_server.h memcached_storage.h \
373
- memcached_string.h memcached_types.h memcached_watchpoint.h \
374
- visibility.h $(am__append_1)
372
+ memcached_constants.h memcached_get.h memcached_touch.h \
373
+ memcached_result.h memcached_sasl.h memcached_server.h \
374
+ memcached_storage.h memcached_string.h memcached_types.h \
375
+ memcached_watchpoint.h visibility.h $(am__append_1)
375
376
  lib_LTLIBRARIES = libmemcached.la
376
377
  noinst_LTLIBRARIES = libmemcachedcallbacks.la
377
378
  libmemcachedcallbacks_la_CFLAGS = ${AM_CFLAGS} ${NO_STRICT_ALIASING}
@@ -381,9 +382,9 @@ libmemcached_la_SOURCES = crc.c memcached.c memcached_auto.c \
381
382
  memcached_analyze.c memcached_behavior.c memcached_connect.c \
382
383
  memcached_delete.c memcached_do.c memcached_dump.c \
383
384
  memcached_fetch.c memcached_flush.c memcached_get.c \
384
- memcached_hash.c memcached_hosts.c memcached_io.c \
385
- memcached_purge.c memcached_flush_buffers.c md5.c \
386
- memcached_key.c memcached_quit.c memcached_parse.c \
385
+ memcached_touch.c memcached_hash.c memcached_hosts.c \
386
+ memcached_io.c memcached_purge.c memcached_flush_buffers.c \
387
+ md5.c memcached_key.c memcached_quit.c memcached_parse.c \
387
388
  memcached_response.c memcached_result.c memcached_server.c \
388
389
  memcached_storage.c memcached_string.c memcached_stats.c \
389
390
  memcached_strerror.c memcached_verbosity.c memcached_version.c \
@@ -517,6 +518,7 @@ distclean-compile:
517
518
  @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libmemcached_la-memcached_storage.Plo@am__quote@
518
519
  @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libmemcached_la-memcached_strerror.Plo@am__quote@
519
520
  @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libmemcached_la-memcached_string.Plo@am__quote@
521
+ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libmemcached_la-memcached_touch.Plo@am__quote@
520
522
  @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libmemcached_la-memcached_verbosity.Plo@am__quote@
521
523
  @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libmemcached_la-memcached_version.Plo@am__quote@
522
524
  @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libmemcached_la-murmur_hash.Plo@am__quote@
@@ -630,6 +632,13 @@ libmemcached_la-memcached_get.lo: memcached_get.c
630
632
  @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
631
633
  @am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libmemcached_la_CFLAGS) $(CFLAGS) -c -o libmemcached_la-memcached_get.lo `test -f 'memcached_get.c' || echo '$(srcdir)/'`memcached_get.c
632
634
 
635
+ libmemcached_la-memcached_touch.lo: memcached_touch.c
636
+ @am__fastdepCC_TRUE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libmemcached_la_CFLAGS) $(CFLAGS) -MT libmemcached_la-memcached_touch.lo -MD -MP -MF $(DEPDIR)/libmemcached_la-memcached_touch.Tpo -c -o libmemcached_la-memcached_touch.lo `test -f 'memcached_touch.c' || echo '$(srcdir)/'`memcached_touch.c
637
+ @am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/libmemcached_la-memcached_touch.Tpo $(DEPDIR)/libmemcached_la-memcached_touch.Plo
638
+ @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='memcached_touch.c' object='libmemcached_la-memcached_touch.lo' libtool=yes @AMDEPBACKSLASH@
639
+ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
640
+ @am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libmemcached_la_CFLAGS) $(CFLAGS) -c -o libmemcached_la-memcached_touch.lo `test -f 'memcached_touch.c' || echo '$(srcdir)/'`memcached_touch.c
641
+
633
642
  libmemcached_la-memcached_hash.lo: memcached_hash.c
634
643
  @am__fastdepCC_TRUE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libmemcached_la_CFLAGS) $(CFLAGS) -MT libmemcached_la-memcached_hash.lo -MD -MP -MF $(DEPDIR)/libmemcached_la-memcached_hash.Tpo -c -o libmemcached_la-memcached_hash.lo `test -f 'memcached_hash.c' || echo '$(srcdir)/'`memcached_hash.c
635
644
  @am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/libmemcached_la-memcached_hash.Tpo $(DEPDIR)/libmemcached_la-memcached_hash.Plo
@@ -19,6 +19,8 @@ provider libmemcached {
19
19
  probe memcached_replace_end();
20
20
  probe memcached_get_start();
21
21
  probe memcached_get_end();
22
+ probe memcached_touch_start();
23
+ probe memcached_touch_end();
22
24
  probe memcached_mget_start();
23
25
  probe memcached_mget_end();
24
26
  probe memcached_connect_start();
@@ -48,6 +48,10 @@
48
48
  #define LIBMEMCACHED_MEMCACHED_GET_END_ENABLED() (0)
49
49
  #define LIBMEMCACHED_MEMCACHED_GET_START()
50
50
  #define LIBMEMCACHED_MEMCACHED_GET_START_ENABLED() (0)
51
+ #define LIBMEMCACHED_MEMCACHED_TOUCH_END()
52
+ #define LIBMEMCACHED_MEMCACHED_TOUCH_END_ENABLED() (0)
53
+ #define LIBMEMCACHED_MEMCACHED_TOUCH_START()
54
+ #define LIBMEMCACHED_MEMCACHED_TOUCH_START_ENABLED() (0)
51
55
  #define LIBMEMCACHED_MEMCACHED_INCREMENT_END()
52
56
  #define LIBMEMCACHED_MEMCACHED_INCREMENT_END_ENABLED() (0)
53
57
  #define LIBMEMCACHED_MEMCACHED_INCREMENT_START()
@@ -23,6 +23,7 @@
23
23
  #include <libmemcached/memcached_constants.h>
24
24
  #include <libmemcached/memcached_types.h>
25
25
  #include <libmemcached/memcached_get.h>
26
+ #include <libmemcached/memcached_touch.h>
26
27
  #include <libmemcached/memcached_server.h>
27
28
  #include <libmemcached/memcached_string.h>
28
29
  #include <libmemcached/memcached_result.h>
@@ -106,6 +106,7 @@ extern "C"
106
106
  PROTOCOL_BINARY_CMD_FLUSHQ = 0x18,
107
107
  PROTOCOL_BINARY_CMD_APPENDQ = 0x19,
108
108
  PROTOCOL_BINARY_CMD_PREPENDQ = 0x1a,
109
+ PROTOCOL_BINARY_CMD_TOUCH = 0x1c,
109
110
  PROTOCOL_BINARY_CMD_SASL_LIST_MECHS = 0x20,
110
111
  PROTOCOL_BINARY_CMD_SASL_AUTH = 0x21,
111
112
  PROTOCOL_BINARY_CMD_SASL_STEP = 0x22,
@@ -205,6 +206,24 @@ extern "C"
205
206
  typedef protocol_binary_response_get protocol_binary_response_getk;
206
207
  typedef protocol_binary_response_get protocol_binary_response_getkq;
207
208
 
209
+ /**
210
+ * Definition of the packet used by the touch command.
211
+ */
212
+ typedef union {
213
+ struct {
214
+ protocol_binary_request_header header;
215
+ struct {
216
+ uint32_t expiration;
217
+ } body;
218
+ } message;
219
+ uint8_t bytes[sizeof(protocol_binary_request_header) + 4];
220
+ } protocol_binary_request_touch;
221
+
222
+ /**
223
+ * Definition of the packet returned from the touch command
224
+ */
225
+ typedef protocol_binary_response_no_extras protocol_binary_response_touch;
226
+
208
227
  /**
209
228
  * Definition of the packet used by the delete command
210
229
  * See section 4
@@ -61,6 +61,11 @@ char *memcached_get_by_key(memcached_st *ptr,
61
61
  if (*error == MEMCACHED_END)
62
62
  *error= MEMCACHED_NOTFOUND;
63
63
 
64
+ (void)memcached_fetch(ptr, NULL, NULL,
65
+ &dummy_length, &dummy_flags,
66
+ &dummy_error);
67
+ WATCHPOINT_ASSERT(dummy_length == 0);
68
+
64
69
  if (value == NULL)
65
70
  {
66
71
  if (ptr->get_key_failure && *error == MEMCACHED_NOTFOUND)
@@ -106,14 +111,8 @@ char *memcached_get_by_key(memcached_st *ptr,
106
111
  }
107
112
  }
108
113
 
109
- return NULL;
110
114
  }
111
115
 
112
- (void)memcached_fetch(ptr, NULL, NULL,
113
- &dummy_length, &dummy_flags,
114
- &dummy_error);
115
- WATCHPOINT_ASSERT(dummy_length == 0);
116
-
117
116
  return value;
118
117
  }
119
118
 
@@ -412,6 +412,7 @@ static memcached_return binary_read_one_response(memcached_server_st *ptr,
412
412
  case PROTOCOL_BINARY_CMD_APPEND:
413
413
  case PROTOCOL_BINARY_CMD_PREPEND:
414
414
  case PROTOCOL_BINARY_CMD_DELETE:
415
+ case PROTOCOL_BINARY_CMD_TOUCH:
415
416
  {
416
417
  WATCHPOINT_ASSERT(bodylen == 0);
417
418
  return MEMCACHED_SUCCESS;
@@ -137,23 +137,6 @@ static memcached_return set_data(memcached_stat_st *memc_stat, char *key, char *
137
137
  {
138
138
  memc_stat->threads= (uint32_t) strtol(value, (char **)NULL, 10);
139
139
  }
140
- else if (!(strcmp("delete_misses", key) == 0 ||/* New stats in the 1.3 beta */
141
- strcmp("delete_hits", key) == 0 ||/* Just swallow them for now.. */
142
- strcmp("incr_misses", key) == 0 ||
143
- strcmp("incr_hits", key) == 0 ||
144
- strcmp("decr_misses", key) == 0 ||
145
- strcmp("decr_hits", key) == 0 ||
146
- strcmp("cas_misses", key) == 0 ||
147
- strcmp("cas_hits", key) == 0 ||
148
- strcmp("cas_badval", key) == 0 ||
149
- strcmp("cmd_flush", key) == 0 ||
150
- strcmp("accepting_conns", key) == 0 ||
151
- strcmp("listen_disabled_num", key) == 0 ||
152
- strcmp("conn_yields", key) == 0))
153
- {
154
- WATCHPOINT_STRING(key);
155
- return MEMCACHED_UNKNOWN_STAT_KEY;
156
- }
157
140
 
158
141
  return MEMCACHED_SUCCESS;
159
142
  }
@@ -0,0 +1,60 @@
1
+ #include "common.h"
2
+
3
+ memcached_return memcached_touch(memcached_st *ptr,
4
+ const char *key, size_t key_length,
5
+ time_t expiration)
6
+ {
7
+ return memcached_touch_by_key(ptr, key, key_length, key, key_length, expiration);
8
+ }
9
+
10
+ memcached_return memcached_touch_by_key(memcached_st *ptr,
11
+ const char *master_key, size_t master_key_length,
12
+ const char *key, size_t key_length,
13
+ time_t expiration)
14
+ {
15
+ memcached_return rc;
16
+
17
+ LIBMEMCACHED_MEMCACHED_TOUCH_START();
18
+
19
+ unlikely (ptr->flags & MEM_USE_UDP)
20
+ return MEMCACHED_NOT_SUPPORTED;
21
+
22
+ unlikely ((ptr->flags & MEM_BINARY_PROTOCOL) == 0)
23
+ return MEMCACHED_NOT_SUPPORTED;
24
+
25
+ unlikely (ptr->number_of_hosts == 0)
26
+ return MEMCACHED_NO_SERVERS;
27
+
28
+ rc= memcached_validate_key_length(key_length, 1);
29
+ unlikely (rc != MEMCACHED_SUCCESS)
30
+ return rc;
31
+
32
+ rc= memcached_validate_key_length(master_key_length, 1);
33
+ unlikely (rc != MEMCACHED_SUCCESS)
34
+ return rc;
35
+
36
+ uint32_t server_key= memcached_generate_hash(ptr, master_key, master_key_length);
37
+ memcached_server_st* instance= &ptr->hosts[server_key];
38
+ rc= memcached_connect(instance);
39
+ if (rc != MEMCACHED_SUCCESS)
40
+ return rc;
41
+
42
+ protocol_binary_request_touch request= {.bytes= {0}};
43
+ request.message.header.request.magic= PROTOCOL_BINARY_REQ;
44
+ request.message.header.request.opcode= PROTOCOL_BINARY_CMD_TOUCH;
45
+ request.message.header.request.extlen= 4;
46
+ request.message.header.request.keylen= htons((uint16_t)(key_length + ptr->prefix_key_length));
47
+ request.message.header.request.datatype= PROTOCOL_BINARY_RAW_BYTES;
48
+ request.message.header.request.bodylen= htonl((uint32_t)(key_length + ptr->prefix_key_length + request.message.header.request.extlen));
49
+ request.message.body.expiration= htonl((uint32_t) expiration);
50
+
51
+ if ((memcached_do(instance, (const char*)request.bytes, sizeof(request.bytes), 0) != MEMCACHED_SUCCESS) ||
52
+ (memcached_io_write(instance, ptr->prefix_key, ptr->prefix_key_length, 0) == -1) ||
53
+ (memcached_io_write(instance, key, key_length, 1) == -1)) {
54
+ memcached_io_reset(instance);
55
+ return MEMCACHED_WRITE_FAILURE;
56
+ }
57
+
58
+ rc = memcached_response(instance, NULL, 0, NULL);
59
+ return rc;
60
+ }
@@ -0,0 +1,31 @@
1
+ /*
2
+ * Summary: Touch function for libmemcached
3
+ *
4
+ * Copy: See Copyright for the status of this software.
5
+ *
6
+ * Author: Sergey Avseyev
7
+ */
8
+
9
+ #ifndef __MEMCACHED_TOUCH_H__
10
+ #define __MEMCACHED_TOUCH_H__
11
+
12
+ #ifdef __cplusplus
13
+ extern "C" {
14
+ #endif
15
+
16
+ LIBMEMCACHED_API
17
+ memcached_return memcached_touch(memcached_st *ptr,
18
+ const char *key, size_t key_length,
19
+ time_t expiration);
20
+
21
+ LIBMEMCACHED_API
22
+ memcached_return memcached_touch_by_key(memcached_st *ptr,
23
+ const char *group_key, size_t group_key_length,
24
+ const char *key, size_t key_length,
25
+ time_t expiration);
26
+
27
+ #ifdef __cplusplus
28
+ }
29
+ #endif
30
+
31
+ #endif /* __MEMCACHED_TOUCH_H__ */
@@ -1303,6 +1303,31 @@ static test_return get_test5(memcached_st *memc)
1303
1303
  return TEST_SUCCESS;
1304
1304
  }
1305
1305
 
1306
+ /*
1307
+ * This test verifies that dummy NOOP response will be fetched when
1308
+ * client try to GET missing key.
1309
+ */
1310
+ static test_return get_test6(memcached_st *memc)
1311
+ {
1312
+ const char *key= "getkey";
1313
+ const char *val= "getval";
1314
+ size_t len;
1315
+ uint32_t flags;
1316
+ char *value;
1317
+ memcached_return rc;
1318
+
1319
+ value= memcached_get(memc, key, strlen(key), &len, &flags, &rc);
1320
+ assert(len == 0);
1321
+ assert(value == 0);
1322
+ assert(rc == MEMCACHED_NOTFOUND);
1323
+
1324
+ rc= memcached_set(memc, key, strlen(key), val, strlen(val), 2, 0);
1325
+ assert(rc == MEMCACHED_SUCCESS);
1326
+
1327
+ return TEST_SUCCESS;
1328
+ }
1329
+
1330
+
1306
1331
  /* Do not copy the style of this code, I just access hosts to testthis function */
1307
1332
  static test_return stats_servername_test(memcached_st *memc)
1308
1333
  {
@@ -4484,6 +4509,85 @@ static test_return jenkins_run (memcached_st *memc __attribute__((unused)))
4484
4509
  return TEST_SUCCESS;
4485
4510
  }
4486
4511
 
4512
+ static memcached_return check_touch_capability(memcached_st *memc)
4513
+ {
4514
+ test_return test_rc= pre_binary(memc);
4515
+
4516
+ if (test_rc != TEST_SUCCESS)
4517
+ return MEMCACHED_PROTOCOL_ERROR;
4518
+
4519
+ const char *key= "touch_capability_key";
4520
+ const char *val= "touch_capability_val";
4521
+ memcached_return rc = memcached_touch(memc, key, strlen(key), 1);
4522
+ /* it should return NOTFOUND here if TOUCH is implemented */
4523
+ return (rc == MEMCACHED_NOTFOUND) ? MEMCACHED_SUCCESS : MEMCACHED_PROTOCOL_ERROR;
4524
+ }
4525
+
4526
+ static test_return test_memcached_touch(memcached_st *memc)
4527
+ {
4528
+ const char *key= "touchkey";
4529
+ const char *val= "touchval";
4530
+ size_t len;
4531
+ uint32_t flags;
4532
+ memcached_return rc;
4533
+ char *value;
4534
+
4535
+ value= memcached_get(memc, key, strlen(key), &len, &flags, &rc);
4536
+ assert(len == 0);
4537
+ assert(value == 0);
4538
+ assert(rc == MEMCACHED_NOTFOUND);
4539
+
4540
+ rc= memcached_set(memc, key, strlen(key), val, strlen(val), 2, 0);
4541
+ assert(rc == MEMCACHED_SUCCESS);
4542
+
4543
+ sleep(1);
4544
+
4545
+ value= memcached_get(memc, key, strlen(key), &len, &flags, &rc);
4546
+ assert(len == 8);
4547
+ assert(memcmp(value, val, len) == 0);
4548
+ assert(rc == MEMCACHED_SUCCESS);
4549
+
4550
+ rc= memcached_touch(memc, key, strlen(key), 3);
4551
+ assert(rc == MEMCACHED_SUCCESS);
4552
+
4553
+ sleep(2);
4554
+
4555
+ value= memcached_get(memc, key, strlen(key), &len, &flags, &rc);
4556
+ assert(len == 8);
4557
+ assert(memcmp(value, val, len) == 0);
4558
+ assert(rc == MEMCACHED_SUCCESS);
4559
+
4560
+ sleep(2);
4561
+
4562
+ value= memcached_get(memc, key, strlen(key), &len, &flags, &rc);
4563
+ assert(len == 0);
4564
+ assert(value == 0);
4565
+ assert(rc == MEMCACHED_NOTFOUND);
4566
+
4567
+ return TEST_SUCCESS;
4568
+ }
4569
+
4570
+ static test_return test_memcached_touch_with_prefix(memcached_st *orig_memc)
4571
+ {
4572
+ const char *key= "touchkey";
4573
+ const char *val= "touchval";
4574
+ const char *prefix= "namespace:";
4575
+ memcached_return rc;
4576
+ memcached_st *memc= memcached_clone(NULL, orig_memc);
4577
+
4578
+ rc = memcached_callback_set(memc, MEMCACHED_CALLBACK_PREFIX_KEY, (void *)prefix);
4579
+ assert(rc == MEMCACHED_SUCCESS);
4580
+
4581
+ rc= memcached_set(memc, key, strlen(key), val, strlen(val), 2, 0);
4582
+ assert(rc == MEMCACHED_SUCCESS);
4583
+
4584
+ rc= memcached_touch(memc, key, strlen(key), 3);
4585
+ assert(rc == MEMCACHED_SUCCESS);
4586
+
4587
+ return TEST_SUCCESS;
4588
+ }
4589
+
4590
+
4487
4591
  test_st udp_setup_server_tests[] ={
4488
4592
  {"set_udp_behavior_test", 0, set_udp_behavior_test},
4489
4593
  {"add_tcp_server_udp_client_test", 0, add_tcp_server_udp_client_test},
@@ -4536,6 +4640,7 @@ test_st tests[] ={
4536
4640
  {"get3", 0, get_test3 },
4537
4641
  {"get4", 0, get_test4 },
4538
4642
  {"partial mget", 0, get_test5 },
4643
+ {"get_miss_noop", 0, get_test6 },
4539
4644
  {"get_len", 1, get_len_test },
4540
4645
  {"get_len2", 0, get_len_test2 },
4541
4646
  {"get_len3", 0, get_len_test3 },
@@ -4692,6 +4797,12 @@ test_st hash_tests[] ={
4692
4797
  {0, 0, 0}
4693
4798
  };
4694
4799
 
4800
+ test_st touch_tests[] ={
4801
+ {"memcached_touch", 1, test_memcached_touch},
4802
+ {"memcached_touch_with_prefix", 1, test_memcached_touch_with_prefix},
4803
+ {0, 0, 0}
4804
+ };
4805
+
4695
4806
  collection_st collection[] ={
4696
4807
  {"hsieh_availability",0,0,hsieh_availability},
4697
4808
  {"udp_setup", init_udp, 0, udp_setup_server_tests},
@@ -4740,6 +4851,7 @@ collection_st collection[] ={
4740
4851
  {"consistent_ketama", pre_behavior_ketama, 0, consistent_tests},
4741
4852
  {"consistent_ketama_weighted", pre_behavior_ketama_weighted, 0, consistent_weighted_tests},
4742
4853
  {"test_hashes", 0, 0, hash_tests},
4854
+ {"touch", check_touch_capability, 0, touch_tests},
4743
4855
  {0, 0, 0, 0}
4744
4856
  };
4745
4857
 
@@ -139,6 +139,7 @@
139
139
  %include "libmemcached/memcached_result.h"
140
140
  %include "libmemcached/memcached_server.h"
141
141
  %include "libmemcached/memcached_sasl.h"
142
+ %include "libmemcached/memcached_touch.h"
142
143
 
143
144
  //// Custom C functions
144
145
 
@@ -12414,6 +12414,101 @@ fail:
12414
12414
  }
12415
12415
 
12416
12416
 
12417
+ SWIGINTERN VALUE
12418
+ _wrap_memcached_touch(int argc, VALUE *argv, VALUE self) {
12419
+ memcached_st *arg1 = (memcached_st *) 0 ;
12420
+ char *arg2 = (char *) 0 ;
12421
+ size_t arg3 ;
12422
+ time_t arg4 ;
12423
+ void *argp1 = 0 ;
12424
+ int res1 = 0 ;
12425
+ unsigned long val4 ;
12426
+ int ecode4 = 0 ;
12427
+ memcached_return result;
12428
+ VALUE vresult = Qnil;
12429
+
12430
+ if ((argc < 3) || (argc > 3)) {
12431
+ rb_raise(rb_eArgError, "wrong # of arguments(%d for 3)",argc); SWIG_fail;
12432
+ }
12433
+ res1 = SWIG_ConvertPtr(argv[0], &argp1,SWIGTYPE_p_memcached_st, 0 | 0 );
12434
+ if (!SWIG_IsOK(res1)) {
12435
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "memcached_st *","memcached_touch", 1, argv[0] ));
12436
+ }
12437
+ arg1 = (memcached_st *)(argp1);
12438
+ {
12439
+ arg2 = StringValuePtr(argv[1]);
12440
+ arg3 = (size_t) RSTRING_LEN(argv[1]);
12441
+ }
12442
+ ecode4 = SWIG_AsVal_unsigned_SS_long(argv[2], &val4);
12443
+ if (!SWIG_IsOK(ecode4)) {
12444
+ SWIG_exception_fail(SWIG_ArgError(ecode4), Ruby_Format_TypeError( "", "time_t","memcached_touch", 4, argv[2] ));
12445
+ }
12446
+ arg4 = (time_t)(val4);
12447
+ result = (memcached_return)memcached_touch(arg1,(char const *)arg2,arg3,arg4);
12448
+ vresult = SWIG_From_int((int)(result));
12449
+ return vresult;
12450
+ fail:
12451
+ return Qnil;
12452
+ }
12453
+
12454
+
12455
+ SWIGINTERN VALUE
12456
+ _wrap_memcached_touch_by_key(int argc, VALUE *argv, VALUE self) {
12457
+ memcached_st *arg1 = (memcached_st *) 0 ;
12458
+ char *arg2 = (char *) 0 ;
12459
+ size_t arg3 ;
12460
+ char *arg4 = (char *) 0 ;
12461
+ size_t arg5 ;
12462
+ time_t arg6 ;
12463
+ void *argp1 = 0 ;
12464
+ int res1 = 0 ;
12465
+ int res2 ;
12466
+ char *buf2 = 0 ;
12467
+ int alloc2 = 0 ;
12468
+ size_t val3 ;
12469
+ int ecode3 = 0 ;
12470
+ unsigned long val6 ;
12471
+ int ecode6 = 0 ;
12472
+ memcached_return result;
12473
+ VALUE vresult = Qnil;
12474
+
12475
+ if ((argc < 5) || (argc > 5)) {
12476
+ rb_raise(rb_eArgError, "wrong # of arguments(%d for 5)",argc); SWIG_fail;
12477
+ }
12478
+ res1 = SWIG_ConvertPtr(argv[0], &argp1,SWIGTYPE_p_memcached_st, 0 | 0 );
12479
+ if (!SWIG_IsOK(res1)) {
12480
+ SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "memcached_st *","memcached_touch_by_key", 1, argv[0] ));
12481
+ }
12482
+ arg1 = (memcached_st *)(argp1);
12483
+ res2 = SWIG_AsCharPtrAndSize(argv[1], &buf2, NULL, &alloc2);
12484
+ if (!SWIG_IsOK(res2)) {
12485
+ SWIG_exception_fail(SWIG_ArgError(res2), Ruby_Format_TypeError( "", "char const *","memcached_touch_by_key", 2, argv[1] ));
12486
+ }
12487
+ arg2 = (char *)(buf2);
12488
+ ecode3 = SWIG_AsVal_size_t(argv[2], &val3);
12489
+ if (!SWIG_IsOK(ecode3)) {
12490
+ SWIG_exception_fail(SWIG_ArgError(ecode3), Ruby_Format_TypeError( "", "size_t","memcached_touch_by_key", 3, argv[2] ));
12491
+ }
12492
+ arg3 = (size_t)(val3);
12493
+ {
12494
+ arg4 = StringValuePtr(argv[3]);
12495
+ arg5 = (size_t) RSTRING_LEN(argv[3]);
12496
+ }
12497
+ ecode6 = SWIG_AsVal_unsigned_SS_long(argv[4], &val6);
12498
+ if (!SWIG_IsOK(ecode6)) {
12499
+ SWIG_exception_fail(SWIG_ArgError(ecode6), Ruby_Format_TypeError( "", "time_t","memcached_touch_by_key", 6, argv[4] ));
12500
+ }
12501
+ arg6 = (time_t)(val6);
12502
+ result = (memcached_return)memcached_touch_by_key(arg1,(char const *)arg2,arg3,(char const *)arg4,arg5,arg6);
12503
+ vresult = SWIG_From_int((int)(result));
12504
+ if (alloc2 == SWIG_NEWOBJ) free((char*)buf2);
12505
+ return vresult;
12506
+ fail:
12507
+ if (alloc2 == SWIG_NEWOBJ) free((char*)buf2);
12508
+ return Qnil;
12509
+ }
12510
+
12511
+
12417
12512
  SWIGINTERN VALUE
12418
12513
  _wrap_rb_str_new_by_ref(int argc, VALUE *argv, VALUE self) {
12419
12514
  char *arg1 = (char *) 0 ;
@@ -13621,6 +13716,8 @@ SWIGEXPORT void Init_rlibmemcached(void) {
13621
13716
  rb_define_module_function(mRlibmemcached, "memcached_destroy_sasl_auth_data", _wrap_memcached_destroy_sasl_auth_data, -1);
13622
13717
  rb_define_module_function(mRlibmemcached, "memcached_get_sasl_callbacks", _wrap_memcached_get_sasl_callbacks, -1);
13623
13718
  rb_define_module_function(mRlibmemcached, "memcached_sasl_authenticate_connection", _wrap_memcached_sasl_authenticate_connection, -1);
13719
+ rb_define_module_function(mRlibmemcached, "memcached_touch", _wrap_memcached_touch, -1);
13720
+ rb_define_module_function(mRlibmemcached, "memcached_touch_by_key", _wrap_memcached_touch_by_key, -1);
13624
13721
  rb_define_module_function(mRlibmemcached, "rb_str_new_by_ref", _wrap_rb_str_new_by_ref, -1);
13625
13722
  rb_define_module_function(mRlibmemcached, "memcached_get_rvalue", _wrap_memcached_get_rvalue, -1);
13626
13723
  rb_define_module_function(mRlibmemcached, "memcached_get_len_rvalue", _wrap_memcached_get_len_rvalue, -1);
@@ -1,12 +1,25 @@
1
1
  class Memcached
2
2
  module Experimental
3
-
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
+
4
17
  def get_len(bytes, keys)
5
18
  if keys.is_a? ::Array
6
19
  # Multi get
7
20
  ret = Lib.memcached_mget_len(@struct, keys, bytes);
8
21
  check_return_code(ret, keys)
9
-
22
+
10
23
  hash = {}
11
24
  keys.each do
12
25
  value, key, flags, ret = Lib.memcached_fetch_rvalue(@struct)
@@ -30,6 +43,6 @@ class Memcached
30
43
  tries += 1
31
44
  retry
32
45
  end
33
-
46
+
34
47
  end
35
- end
48
+ end
@@ -47,7 +47,8 @@ class Memcached
47
47
  Memcached::ServerError,
48
48
  Memcached::SystemError,
49
49
  Memcached::UnknownReadFailure,
50
- Memcached::WriteFailure]
50
+ Memcached::WriteFailure,
51
+ Memcached::SomeErrorsWereReported]
51
52
  }
52
53
 
53
54
  #:stopdoc:
@@ -2,21 +2,23 @@
2
2
 
3
3
  Gem::Specification.new do |s|
4
4
  s.name = %q{memcached}
5
- s.version = "1.2.7"
5
+ s.version = "1.3"
6
6
 
7
7
  s.required_rubygems_version = Gem::Requirement.new(">= 1.2") if s.respond_to? :required_rubygems_version=
8
8
  s.authors = ["Evan Weaver"]
9
- s.date = %q{2011-05-20}
9
+ s.cert_chain = ["/Users/eweaver/p/configuration/gem_certificates/evan_weaver-original-public_cert.pem"]
10
+ s.date = %q{2011-08-04}
10
11
  s.description = %q{An interface to the libmemcached C client.}
11
12
  s.email = %q{}
12
13
  s.extensions = ["ext/extconf.rb"]
13
14
  s.extra_rdoc_files = ["BENCHMARKS", "CHANGELOG", "LICENSE", "README", "TODO", "ext/libmemcached-0.32/README", "ext/libmemcached-0.32/TODO", "ext/libmemcached-0.32/libmemcached/memcached/README.txt", "lib/memcached.rb", "lib/memcached/behaviors.rb", "lib/memcached/exceptions.rb", "lib/memcached/experimental.rb", "lib/memcached/memcached.rb", "lib/memcached/rails.rb"]
14
- s.files = ["BENCHMARKS", "CHANGELOG", "LICENSE", "Manifest", "README", "Rakefile", "TODO", "ext/extconf-make.rb", "ext/extconf.rb", "ext/libmemcached-0.32/AUTHORS", "ext/libmemcached-0.32/COPYING", "ext/libmemcached-0.32/ChangeLog", "ext/libmemcached-0.32/INSTALL", "ext/libmemcached-0.32/Makefile.am", "ext/libmemcached-0.32/Makefile.in", "ext/libmemcached-0.32/NEWS", "ext/libmemcached-0.32/README", "ext/libmemcached-0.32/THANKS", "ext/libmemcached-0.32/TODO", "ext/libmemcached-0.32/aclocal.m4", "ext/libmemcached-0.32/clients/Makefile.am", "ext/libmemcached-0.32/clients/Makefile.in", "ext/libmemcached-0.32/clients/client_options.h", "ext/libmemcached-0.32/clients/execute.c", "ext/libmemcached-0.32/clients/execute.h", "ext/libmemcached-0.32/clients/generator.c", "ext/libmemcached-0.32/clients/generator.h", "ext/libmemcached-0.32/clients/memcat.c", "ext/libmemcached-0.32/clients/memcp.c", "ext/libmemcached-0.32/clients/memdump.c", "ext/libmemcached-0.32/clients/memerror.c", "ext/libmemcached-0.32/clients/memflush.c", "ext/libmemcached-0.32/clients/memrm.c", "ext/libmemcached-0.32/clients/memslap.c", "ext/libmemcached-0.32/clients/memstat.c", "ext/libmemcached-0.32/clients/utilities.c", "ext/libmemcached-0.32/clients/utilities.h", "ext/libmemcached-0.32/config.h.in", "ext/libmemcached-0.32/config/compile", "ext/libmemcached-0.32/config/config.guess", "ext/libmemcached-0.32/config/config.rpath", "ext/libmemcached-0.32/config/config.sub", "ext/libmemcached-0.32/config/depcomp", "ext/libmemcached-0.32/config/install-sh", "ext/libmemcached-0.32/config/ltmain.sh", "ext/libmemcached-0.32/config/missing", "ext/libmemcached-0.32/configure", "ext/libmemcached-0.32/configure.ac", "ext/libmemcached-0.32/docs/Makefile.am", "ext/libmemcached-0.32/docs/Makefile.in", "ext/libmemcached-0.32/docs/libmemcached.pod", "ext/libmemcached-0.32/docs/libmemcached_examples.pod", "ext/libmemcached-0.32/docs/libmemcachedutil.pod", "ext/libmemcached-0.32/docs/memcached_analyze.pod", "ext/libmemcached-0.32/docs/memcached_auto.pod", "ext/libmemcached-0.32/docs/memcached_behavior.pod", "ext/libmemcached-0.32/docs/memcached_callback.pod", "ext/libmemcached-0.32/docs/memcached_create.pod", "ext/libmemcached-0.32/docs/memcached_delete.pod", "ext/libmemcached-0.32/docs/memcached_dump.pod", "ext/libmemcached-0.32/docs/memcached_flush.pod", "ext/libmemcached-0.32/docs/memcached_flush_buffers.pod", "ext/libmemcached-0.32/docs/memcached_generate_hash_value.pod", "ext/libmemcached-0.32/docs/memcached_get.pod", "ext/libmemcached-0.32/docs/memcached_memory_allocators.pod", "ext/libmemcached-0.32/docs/memcached_pool.pod", "ext/libmemcached-0.32/docs/memcached_quit.pod", "ext/libmemcached-0.32/docs/memcached_sasl.pod", "ext/libmemcached-0.32/docs/memcached_server_st.pod", "ext/libmemcached-0.32/docs/memcached_servers.pod", "ext/libmemcached-0.32/docs/memcached_set.pod", "ext/libmemcached-0.32/docs/memcached_stats.pod", "ext/libmemcached-0.32/docs/memcached_strerror.pod", "ext/libmemcached-0.32/docs/memcached_user_data.pod", "ext/libmemcached-0.32/docs/memcached_verbosity.pod", "ext/libmemcached-0.32/docs/memcached_version.pod", "ext/libmemcached-0.32/docs/memcat.pod", "ext/libmemcached-0.32/docs/memcp.pod", "ext/libmemcached-0.32/docs/memdump.pod", "ext/libmemcached-0.32/docs/memerror.pod", "ext/libmemcached-0.32/docs/memflush.pod", "ext/libmemcached-0.32/docs/memrm.pod", "ext/libmemcached-0.32/docs/memslap.pod", "ext/libmemcached-0.32/docs/memstat.pod", "ext/libmemcached-0.32/libmemcached/Makefile.am", "ext/libmemcached-0.32/libmemcached/Makefile.in", "ext/libmemcached-0.32/libmemcached/byteorder.c", "ext/libmemcached-0.32/libmemcached/common.h", "ext/libmemcached-0.32/libmemcached/crc.c", "ext/libmemcached-0.32/libmemcached/hsieh_hash.c", "ext/libmemcached-0.32/libmemcached/jenkins_hash.c", "ext/libmemcached-0.32/libmemcached/libmemcached.ver", "ext/libmemcached-0.32/libmemcached/libmemcached_probes.d", "ext/libmemcached-0.32/libmemcached/libmemcached_probes.h", "ext/libmemcached-0.32/libmemcached/md5.c", "ext/libmemcached-0.32/libmemcached/memcached.c", "ext/libmemcached-0.32/libmemcached/memcached.h", "ext/libmemcached-0.32/libmemcached/memcached.hpp", "ext/libmemcached-0.32/libmemcached/memcached/README.txt", "ext/libmemcached-0.32/libmemcached/memcached/protocol_binary.h", "ext/libmemcached-0.32/libmemcached/memcached_allocators.c", "ext/libmemcached-0.32/libmemcached/memcached_analyze.c", "ext/libmemcached-0.32/libmemcached/memcached_auto.c", "ext/libmemcached-0.32/libmemcached/memcached_behavior.c", "ext/libmemcached-0.32/libmemcached/memcached_callback.c", "ext/libmemcached-0.32/libmemcached/memcached_configure.h.in", "ext/libmemcached-0.32/libmemcached/memcached_connect.c", "ext/libmemcached-0.32/libmemcached/memcached_constants.h", "ext/libmemcached-0.32/libmemcached/memcached_delete.c", "ext/libmemcached-0.32/libmemcached/memcached_do.c", "ext/libmemcached-0.32/libmemcached/memcached_dump.c", "ext/libmemcached-0.32/libmemcached/memcached_fetch.c", "ext/libmemcached-0.32/libmemcached/memcached_flush.c", "ext/libmemcached-0.32/libmemcached/memcached_flush_buffers.c", "ext/libmemcached-0.32/libmemcached/memcached_get.c", "ext/libmemcached-0.32/libmemcached/memcached_get.h", "ext/libmemcached-0.32/libmemcached/memcached_hash.c", "ext/libmemcached-0.32/libmemcached/memcached_hosts.c", "ext/libmemcached-0.32/libmemcached/memcached_internal.h", "ext/libmemcached-0.32/libmemcached/memcached_io.c", "ext/libmemcached-0.32/libmemcached/memcached_io.h", "ext/libmemcached-0.32/libmemcached/memcached_key.c", "ext/libmemcached-0.32/libmemcached/memcached_parse.c", "ext/libmemcached-0.32/libmemcached/memcached_pool.h", "ext/libmemcached-0.32/libmemcached/memcached_purge.c", "ext/libmemcached-0.32/libmemcached/memcached_quit.c", "ext/libmemcached-0.32/libmemcached/memcached_response.c", "ext/libmemcached-0.32/libmemcached/memcached_result.c", "ext/libmemcached-0.32/libmemcached/memcached_result.h", "ext/libmemcached-0.32/libmemcached/memcached_sasl.c", "ext/libmemcached-0.32/libmemcached/memcached_sasl.h", "ext/libmemcached-0.32/libmemcached/memcached_server.c", "ext/libmemcached-0.32/libmemcached/memcached_server.h", "ext/libmemcached-0.32/libmemcached/memcached_stats.c", "ext/libmemcached-0.32/libmemcached/memcached_storage.c", "ext/libmemcached-0.32/libmemcached/memcached_storage.h", "ext/libmemcached-0.32/libmemcached/memcached_strerror.c", "ext/libmemcached-0.32/libmemcached/memcached_string.c", "ext/libmemcached-0.32/libmemcached/memcached_string.h", "ext/libmemcached-0.32/libmemcached/memcached_types.h", "ext/libmemcached-0.32/libmemcached/memcached_util.h", "ext/libmemcached-0.32/libmemcached/memcached_verbosity.c", "ext/libmemcached-0.32/libmemcached/memcached_version.c", "ext/libmemcached-0.32/libmemcached/memcached_watchpoint.h", "ext/libmemcached-0.32/libmemcached/murmur_hash.c", "ext/libmemcached-0.32/libmemcached/visibility.h", "ext/libmemcached-0.32/libmemcachedutil/Makefile.am", "ext/libmemcached-0.32/libmemcachedutil/Makefile.in", "ext/libmemcached-0.32/libmemcachedutil/libmemcachedutil.ver", "ext/libmemcached-0.32/libmemcachedutil/memcached_pool.c", "ext/libmemcached-0.32/m4/ac_cxx_compile_stdcxx_0x.m4", "ext/libmemcached-0.32/m4/ac_cxx_header_stdcxx_98.m4", "ext/libmemcached-0.32/m4/acx_pthread.m4", "ext/libmemcached-0.32/m4/byteorder.m4", "ext/libmemcached-0.32/m4/deprecated.m4", "ext/libmemcached-0.32/m4/enable_utillib.m4", "ext/libmemcached-0.32/m4/extensions.m4", "ext/libmemcached-0.32/m4/hsieh.m4", "ext/libmemcached-0.32/m4/lib-prefix.m4", "ext/libmemcached-0.32/m4/libtool.m4", "ext/libmemcached-0.32/m4/ltoptions.m4", "ext/libmemcached-0.32/m4/ltsugar.m4", "ext/libmemcached-0.32/m4/ltversion.m4", "ext/libmemcached-0.32/m4/lt~obsolete.m4", "ext/libmemcached-0.32/m4/memcached.m4", "ext/libmemcached-0.32/m4/pandora_64bit.m4", "ext/libmemcached-0.32/m4/pandora_canonical.m4", "ext/libmemcached-0.32/m4/pandora_check_compiler_version.m4", "ext/libmemcached-0.32/m4/pandora_check_cxx_standard.m4", "ext/libmemcached-0.32/m4/pandora_enable_dtrace.m4", "ext/libmemcached-0.32/m4/pandora_ensure_gcc_version.m4", "ext/libmemcached-0.32/m4/pandora_have_better_malloc.m4", "ext/libmemcached-0.32/m4/pandora_have_sasl.m4", "ext/libmemcached-0.32/m4/pandora_header_assert.m4", "ext/libmemcached-0.32/m4/pandora_libtool.m4", "ext/libmemcached-0.32/m4/pandora_optimize.m4", "ext/libmemcached-0.32/m4/pandora_shared_ptr.m4", "ext/libmemcached-0.32/m4/pandora_vc_build.m4", "ext/libmemcached-0.32/m4/pandora_warnings.m4", "ext/libmemcached-0.32/m4/pod2man.m4", "ext/libmemcached-0.32/m4/protocol_binary.m4", "ext/libmemcached-0.32/m4/setsockopt.m4", "ext/libmemcached-0.32/m4/visibility.m4", "ext/libmemcached-0.32/support/Makefile.am", "ext/libmemcached-0.32/support/Makefile.in", "ext/libmemcached-0.32/support/libmemcached-fc.spec.in", "ext/libmemcached-0.32/support/libmemcached.pc.in", "ext/libmemcached-0.32/support/libmemcached.spec", "ext/libmemcached-0.32/support/libmemcached.spec.in", "ext/libmemcached-0.32/support/set_benchmark.sh", "ext/libmemcached-0.32/tests/Makefile.am", "ext/libmemcached-0.32/tests/Makefile.in", "ext/libmemcached-0.32/tests/atomsmasher.c", "ext/libmemcached-0.32/tests/function.c", "ext/libmemcached-0.32/tests/ketama_test_cases.h", "ext/libmemcached-0.32/tests/output.cmp", "ext/libmemcached-0.32/tests/output.res", "ext/libmemcached-0.32/tests/output2.res", "ext/libmemcached-0.32/tests/plus.cpp", "ext/libmemcached-0.32/tests/r/memcat.res", "ext/libmemcached-0.32/tests/r/memcp.res", "ext/libmemcached-0.32/tests/r/memrm.res", "ext/libmemcached-0.32/tests/r/memslap.res", "ext/libmemcached-0.32/tests/r/memstat.res", "ext/libmemcached-0.32/tests/server.c", "ext/libmemcached-0.32/tests/server.h", "ext/libmemcached-0.32/tests/start.c", "ext/libmemcached-0.32/tests/t/memcat.test", "ext/libmemcached-0.32/tests/t/memcp.test", "ext/libmemcached-0.32/tests/t/memrm.test", "ext/libmemcached-0.32/tests/t/memslap.test", "ext/libmemcached-0.32/tests/t/memstat.test", "ext/libmemcached-0.32/tests/test.c", "ext/libmemcached-0.32/tests/test.h", "ext/libmemcached-0.32/tests/udp.c", "ext/rlibmemcached.i", "ext/rlibmemcached_wrap.c", "lib/memcached.rb", "lib/memcached/auth.rb", "lib/memcached/behaviors.rb", "lib/memcached/exceptions.rb", "lib/memcached/experimental.rb", "lib/memcached/memcached.rb", "lib/memcached/rails.rb", "test/profile/benchmark.rb", "test/profile/c_profiler.rb", "test/profile/exercise.rb", "test/profile/rb_profiler.rb", "test/profile/valgrind.rb", "test/setup.rb", "test/teardown.rb", "test/test_helper.rb", "test/unit/binding_test.rb", "test/unit/memcached_experimental_test.rb", "test/unit/memcached_test.rb", "test/unit/rails_test.rb", "memcached.gemspec"]
15
+ s.files = ["BENCHMARKS", "CHANGELOG", "LICENSE", "Manifest", "README", "Rakefile", "TODO", "ext/extconf-make.rb", "ext/extconf.rb", "ext/libmemcached-0.32/AUTHORS", "ext/libmemcached-0.32/COPYING", "ext/libmemcached-0.32/ChangeLog", "ext/libmemcached-0.32/INSTALL", "ext/libmemcached-0.32/Makefile.am", "ext/libmemcached-0.32/Makefile.in", "ext/libmemcached-0.32/NEWS", "ext/libmemcached-0.32/README", "ext/libmemcached-0.32/THANKS", "ext/libmemcached-0.32/TODO", "ext/libmemcached-0.32/aclocal.m4", "ext/libmemcached-0.32/clients/Makefile.am", "ext/libmemcached-0.32/clients/Makefile.in", "ext/libmemcached-0.32/clients/client_options.h", "ext/libmemcached-0.32/clients/execute.c", "ext/libmemcached-0.32/clients/execute.h", "ext/libmemcached-0.32/clients/generator.c", "ext/libmemcached-0.32/clients/generator.h", "ext/libmemcached-0.32/clients/memcat.c", "ext/libmemcached-0.32/clients/memcp.c", "ext/libmemcached-0.32/clients/memdump.c", "ext/libmemcached-0.32/clients/memerror.c", "ext/libmemcached-0.32/clients/memflush.c", "ext/libmemcached-0.32/clients/memrm.c", "ext/libmemcached-0.32/clients/memslap.c", "ext/libmemcached-0.32/clients/memstat.c", "ext/libmemcached-0.32/clients/utilities.c", "ext/libmemcached-0.32/clients/utilities.h", "ext/libmemcached-0.32/config.h.in", "ext/libmemcached-0.32/config/compile", "ext/libmemcached-0.32/config/config.guess", "ext/libmemcached-0.32/config/config.rpath", "ext/libmemcached-0.32/config/config.sub", "ext/libmemcached-0.32/config/depcomp", "ext/libmemcached-0.32/config/install-sh", "ext/libmemcached-0.32/config/ltmain.sh", "ext/libmemcached-0.32/config/missing", "ext/libmemcached-0.32/configure", "ext/libmemcached-0.32/configure.ac", "ext/libmemcached-0.32/docs/Makefile.am", "ext/libmemcached-0.32/docs/Makefile.in", "ext/libmemcached-0.32/docs/libmemcached.pod", "ext/libmemcached-0.32/docs/libmemcached_examples.pod", "ext/libmemcached-0.32/docs/libmemcachedutil.pod", "ext/libmemcached-0.32/docs/memcached_analyze.pod", "ext/libmemcached-0.32/docs/memcached_auto.pod", "ext/libmemcached-0.32/docs/memcached_behavior.pod", "ext/libmemcached-0.32/docs/memcached_callback.pod", "ext/libmemcached-0.32/docs/memcached_create.pod", "ext/libmemcached-0.32/docs/memcached_delete.pod", "ext/libmemcached-0.32/docs/memcached_dump.pod", "ext/libmemcached-0.32/docs/memcached_flush.pod", "ext/libmemcached-0.32/docs/memcached_flush_buffers.pod", "ext/libmemcached-0.32/docs/memcached_generate_hash_value.pod", "ext/libmemcached-0.32/docs/memcached_get.pod", "ext/libmemcached-0.32/docs/memcached_memory_allocators.pod", "ext/libmemcached-0.32/docs/memcached_pool.pod", "ext/libmemcached-0.32/docs/memcached_quit.pod", "ext/libmemcached-0.32/docs/memcached_sasl.pod", "ext/libmemcached-0.32/docs/memcached_server_st.pod", "ext/libmemcached-0.32/docs/memcached_servers.pod", "ext/libmemcached-0.32/docs/memcached_set.pod", "ext/libmemcached-0.32/docs/memcached_stats.pod", "ext/libmemcached-0.32/docs/memcached_strerror.pod", "ext/libmemcached-0.32/docs/memcached_user_data.pod", "ext/libmemcached-0.32/docs/memcached_verbosity.pod", "ext/libmemcached-0.32/docs/memcached_version.pod", "ext/libmemcached-0.32/docs/memcat.pod", "ext/libmemcached-0.32/docs/memcp.pod", "ext/libmemcached-0.32/docs/memdump.pod", "ext/libmemcached-0.32/docs/memerror.pod", "ext/libmemcached-0.32/docs/memflush.pod", "ext/libmemcached-0.32/docs/memrm.pod", "ext/libmemcached-0.32/docs/memslap.pod", "ext/libmemcached-0.32/docs/memstat.pod", "ext/libmemcached-0.32/libmemcached/Makefile.am", "ext/libmemcached-0.32/libmemcached/Makefile.in", "ext/libmemcached-0.32/libmemcached/byteorder.c", "ext/libmemcached-0.32/libmemcached/common.h", "ext/libmemcached-0.32/libmemcached/crc.c", "ext/libmemcached-0.32/libmemcached/hsieh_hash.c", "ext/libmemcached-0.32/libmemcached/jenkins_hash.c", "ext/libmemcached-0.32/libmemcached/libmemcached.ver", "ext/libmemcached-0.32/libmemcached/libmemcached_probes.d", "ext/libmemcached-0.32/libmemcached/libmemcached_probes.h", "ext/libmemcached-0.32/libmemcached/md5.c", "ext/libmemcached-0.32/libmemcached/memcached.c", "ext/libmemcached-0.32/libmemcached/memcached.h", "ext/libmemcached-0.32/libmemcached/memcached.hpp", "ext/libmemcached-0.32/libmemcached/memcached/README.txt", "ext/libmemcached-0.32/libmemcached/memcached/protocol_binary.h", "ext/libmemcached-0.32/libmemcached/memcached_allocators.c", "ext/libmemcached-0.32/libmemcached/memcached_analyze.c", "ext/libmemcached-0.32/libmemcached/memcached_auto.c", "ext/libmemcached-0.32/libmemcached/memcached_behavior.c", "ext/libmemcached-0.32/libmemcached/memcached_callback.c", "ext/libmemcached-0.32/libmemcached/memcached_configure.h.in", "ext/libmemcached-0.32/libmemcached/memcached_connect.c", "ext/libmemcached-0.32/libmemcached/memcached_constants.h", "ext/libmemcached-0.32/libmemcached/memcached_delete.c", "ext/libmemcached-0.32/libmemcached/memcached_do.c", "ext/libmemcached-0.32/libmemcached/memcached_dump.c", "ext/libmemcached-0.32/libmemcached/memcached_fetch.c", "ext/libmemcached-0.32/libmemcached/memcached_flush.c", "ext/libmemcached-0.32/libmemcached/memcached_flush_buffers.c", "ext/libmemcached-0.32/libmemcached/memcached_get.c", "ext/libmemcached-0.32/libmemcached/memcached_get.h", "ext/libmemcached-0.32/libmemcached/memcached_hash.c", "ext/libmemcached-0.32/libmemcached/memcached_hosts.c", "ext/libmemcached-0.32/libmemcached/memcached_internal.h", "ext/libmemcached-0.32/libmemcached/memcached_io.c", "ext/libmemcached-0.32/libmemcached/memcached_io.h", "ext/libmemcached-0.32/libmemcached/memcached_key.c", "ext/libmemcached-0.32/libmemcached/memcached_parse.c", "ext/libmemcached-0.32/libmemcached/memcached_pool.h", "ext/libmemcached-0.32/libmemcached/memcached_purge.c", "ext/libmemcached-0.32/libmemcached/memcached_quit.c", "ext/libmemcached-0.32/libmemcached/memcached_response.c", "ext/libmemcached-0.32/libmemcached/memcached_result.c", "ext/libmemcached-0.32/libmemcached/memcached_result.h", "ext/libmemcached-0.32/libmemcached/memcached_sasl.c", "ext/libmemcached-0.32/libmemcached/memcached_sasl.h", "ext/libmemcached-0.32/libmemcached/memcached_server.c", "ext/libmemcached-0.32/libmemcached/memcached_server.h", "ext/libmemcached-0.32/libmemcached/memcached_stats.c", "ext/libmemcached-0.32/libmemcached/memcached_storage.c", "ext/libmemcached-0.32/libmemcached/memcached_storage.h", "ext/libmemcached-0.32/libmemcached/memcached_strerror.c", "ext/libmemcached-0.32/libmemcached/memcached_string.c", "ext/libmemcached-0.32/libmemcached/memcached_string.h", "ext/libmemcached-0.32/libmemcached/memcached_touch.c", "ext/libmemcached-0.32/libmemcached/memcached_touch.h", "ext/libmemcached-0.32/libmemcached/memcached_types.h", "ext/libmemcached-0.32/libmemcached/memcached_util.h", "ext/libmemcached-0.32/libmemcached/memcached_verbosity.c", "ext/libmemcached-0.32/libmemcached/memcached_version.c", "ext/libmemcached-0.32/libmemcached/memcached_watchpoint.h", "ext/libmemcached-0.32/libmemcached/murmur_hash.c", "ext/libmemcached-0.32/libmemcached/visibility.h", "ext/libmemcached-0.32/libmemcachedutil/Makefile.am", "ext/libmemcached-0.32/libmemcachedutil/Makefile.in", "ext/libmemcached-0.32/libmemcachedutil/libmemcachedutil.ver", "ext/libmemcached-0.32/libmemcachedutil/memcached_pool.c", "ext/libmemcached-0.32/m4/ac_cxx_compile_stdcxx_0x.m4", "ext/libmemcached-0.32/m4/ac_cxx_header_stdcxx_98.m4", "ext/libmemcached-0.32/m4/acx_pthread.m4", "ext/libmemcached-0.32/m4/byteorder.m4", "ext/libmemcached-0.32/m4/deprecated.m4", "ext/libmemcached-0.32/m4/enable_utillib.m4", "ext/libmemcached-0.32/m4/extensions.m4", "ext/libmemcached-0.32/m4/hsieh.m4", "ext/libmemcached-0.32/m4/lib-prefix.m4", "ext/libmemcached-0.32/m4/libtool.m4", "ext/libmemcached-0.32/m4/ltoptions.m4", "ext/libmemcached-0.32/m4/ltsugar.m4", "ext/libmemcached-0.32/m4/ltversion.m4", "ext/libmemcached-0.32/m4/lt~obsolete.m4", "ext/libmemcached-0.32/m4/memcached.m4", "ext/libmemcached-0.32/m4/pandora_64bit.m4", "ext/libmemcached-0.32/m4/pandora_canonical.m4", "ext/libmemcached-0.32/m4/pandora_check_compiler_version.m4", "ext/libmemcached-0.32/m4/pandora_check_cxx_standard.m4", "ext/libmemcached-0.32/m4/pandora_enable_dtrace.m4", "ext/libmemcached-0.32/m4/pandora_ensure_gcc_version.m4", "ext/libmemcached-0.32/m4/pandora_have_better_malloc.m4", "ext/libmemcached-0.32/m4/pandora_have_sasl.m4", "ext/libmemcached-0.32/m4/pandora_header_assert.m4", "ext/libmemcached-0.32/m4/pandora_libtool.m4", "ext/libmemcached-0.32/m4/pandora_optimize.m4", "ext/libmemcached-0.32/m4/pandora_shared_ptr.m4", "ext/libmemcached-0.32/m4/pandora_vc_build.m4", "ext/libmemcached-0.32/m4/pandora_warnings.m4", "ext/libmemcached-0.32/m4/pod2man.m4", "ext/libmemcached-0.32/m4/protocol_binary.m4", "ext/libmemcached-0.32/m4/setsockopt.m4", "ext/libmemcached-0.32/m4/visibility.m4", "ext/libmemcached-0.32/support/Makefile.am", "ext/libmemcached-0.32/support/Makefile.in", "ext/libmemcached-0.32/support/libmemcached-fc.spec.in", "ext/libmemcached-0.32/support/libmemcached.pc.in", "ext/libmemcached-0.32/support/libmemcached.spec", "ext/libmemcached-0.32/support/libmemcached.spec.in", "ext/libmemcached-0.32/support/set_benchmark.sh", "ext/libmemcached-0.32/tests/Makefile.am", "ext/libmemcached-0.32/tests/Makefile.in", "ext/libmemcached-0.32/tests/atomsmasher.c", "ext/libmemcached-0.32/tests/function.c", "ext/libmemcached-0.32/tests/ketama_test_cases.h", "ext/libmemcached-0.32/tests/output.cmp", "ext/libmemcached-0.32/tests/output.res", "ext/libmemcached-0.32/tests/output2.res", "ext/libmemcached-0.32/tests/plus.cpp", "ext/libmemcached-0.32/tests/r/memcat.res", "ext/libmemcached-0.32/tests/r/memcp.res", "ext/libmemcached-0.32/tests/r/memrm.res", "ext/libmemcached-0.32/tests/r/memslap.res", "ext/libmemcached-0.32/tests/r/memstat.res", "ext/libmemcached-0.32/tests/server.c", "ext/libmemcached-0.32/tests/server.h", "ext/libmemcached-0.32/tests/start.c", "ext/libmemcached-0.32/tests/t/memcat.test", "ext/libmemcached-0.32/tests/t/memcp.test", "ext/libmemcached-0.32/tests/t/memrm.test", "ext/libmemcached-0.32/tests/t/memslap.test", "ext/libmemcached-0.32/tests/t/memstat.test", "ext/libmemcached-0.32/tests/test.c", "ext/libmemcached-0.32/tests/test.h", "ext/libmemcached-0.32/tests/udp.c", "ext/rlibmemcached.i", "ext/rlibmemcached_wrap.c", "lib/memcached.rb", "lib/memcached/auth.rb", "lib/memcached/behaviors.rb", "lib/memcached/exceptions.rb", "lib/memcached/experimental.rb", "lib/memcached/memcached.rb", "lib/memcached/rails.rb", "test/profile/benchmark.rb", "test/profile/c_profiler.rb", "test/profile/exercise.rb", "test/profile/rb_profiler.rb", "test/profile/valgrind.rb", "test/setup.rb", "test/teardown.rb", "test/test_helper.rb", "test/unit/binding_test.rb", "test/unit/memcached_experimental_test.rb", "test/unit/memcached_test.rb", "test/unit/rails_test.rb", "memcached.gemspec"]
15
16
  s.homepage = %q{http://fauna.github.com/fauna/memcached/}
16
17
  s.rdoc_options = ["--line-numbers", "--inline-source", "--title", "Memcached", "--main", "README"]
17
18
  s.require_paths = ["lib", "ext"]
18
19
  s.rubyforge_project = %q{fauna}
19
- s.rubygems_version = %q{1.7.2}
20
+ s.rubygems_version = %q{1.6.2}
21
+ s.signing_key = %q{/Users/eweaver/p/configuration/gem_certificates/evan_weaver-original-private_key.pem}
20
22
  s.summary = %q{An interface to the libmemcached C client.}
21
23
  s.test_files = ["test/test_helper.rb", "test/unit/binding_test.rb", "test/unit/memcached_experimental_test.rb", "test/unit/memcached_test.rb", "test/unit/rails_test.rb"]
22
24
 
@@ -9,21 +9,22 @@ unless defined? UNIX_SOCKET_NAME
9
9
  # Start memcached
10
10
  verbosity = (ENV['DEBUG'] ? "-vv" : "")
11
11
  log = "/tmp/memcached.log"
12
+ memcached = ENV['MEMCACHED_COMMAND'] || 'memcached'
12
13
  system ">#{log}"
13
14
 
14
15
  # TCP memcached
15
16
  (43042..43046).each do |port|
16
- cmd = "memcached #{verbosity} -U 0 -p #{port} >> #{log} 2>&1 &"
17
+ cmd = "#{memcached} #{verbosity} -U 0 -p #{port} >> #{log} 2>&1 &"
17
18
  raise "'#{cmd}' failed to start" unless system(cmd)
18
19
  end
19
20
  # UDP memcached
20
21
  (43052..43053).each do |port|
21
- cmd = "memcached #{verbosity} -U #{port} -p 0 >> #{log} 2>&1 &"
22
+ cmd = "#{memcached} #{verbosity} -U #{port} -p 0 >> #{log} 2>&1 &"
22
23
  raise "'#{cmd}' failed to start" unless system(cmd)
23
24
  end
24
25
  # Domain socket memcached
25
26
  (0..1).each do |i|
26
- cmd = "memcached -M -s #{UNIX_SOCKET_NAME}#{i} #{verbosity} >> #{log} 2>&1 &"
27
+ cmd = "#{memcached} -M -s #{UNIX_SOCKET_NAME}#{i} #{verbosity} >> #{log} 2>&1 &"
27
28
  raise "'#{cmd}' failed to start" unless system(cmd)
28
29
  end
29
30
  end
@@ -51,6 +51,14 @@ class MemcachedExperimentalTest < Test::Unit::TestCase
51
51
  end
52
52
  end
53
53
 
54
+ def server_touch_capable
55
+ @experimental_binary_protocol_cache.set(key, 'touchval')
56
+ @experimental_binary_protocol_cache.touch(key)
57
+ yield
58
+ rescue Memcached::ProtocolError
59
+ # Skip tests when the server does not support the experimental touch command
60
+ end
61
+
54
62
  def test_get_len
55
63
  server_get_len_capable {
56
64
  value = "foobar"
@@ -200,6 +208,45 @@ class MemcachedExperimentalTest < Test::Unit::TestCase
200
208
  }
201
209
  end
202
210
 
211
+ # Touch command
212
+
213
+ def test_touch_capability
214
+ server_touch_capable {
215
+ @cache.set(key, "value", 3)
216
+ assert_nothing_raised do
217
+ @experimental_binary_protocol_cache.touch(key, 10)
218
+ end
219
+ assert_raises(Memcached::ActionNotSupported) do
220
+ @experimental_cache.touch(key, 10)
221
+ end
222
+ }
223
+ end
224
+
225
+ def test_touch_missing_key
226
+ server_touch_capable {
227
+ @experimental_binary_protocol_cache.delete key rescue nil
228
+ assert_raises(Memcached::NotFound) do
229
+ @experimental_binary_protocol_cache.touch(key, 10)
230
+ end
231
+ }
232
+ end
233
+
234
+ def test_touch
235
+ server_touch_capable {
236
+ @experimental_binary_protocol_cache.set key, @value, 2
237
+ assert_equal @value, @experimental_binary_protocol_cache.get(key)
238
+ sleep(1)
239
+ assert_equal @value, @experimental_binary_protocol_cache.get(key)
240
+ @experimental_binary_protocol_cache.touch(key, 3)
241
+ sleep(2)
242
+ assert_equal @value, @experimental_binary_protocol_cache.get(key)
243
+ sleep(2)
244
+ assert_raises(Memcached::NotFound) do
245
+ @experimental_binary_protocol_cache.get(key)
246
+ end
247
+ }
248
+ end
249
+
203
250
  # Memory cleanup
204
251
 
205
252
  def test_reset
metadata CHANGED
@@ -1,21 +1,38 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: memcached
3
3
  version: !ruby/object:Gem::Version
4
- hash: 17
5
4
  prerelease:
6
- segments:
7
- - 1
8
- - 2
9
- - 7
10
- version: 1.2.7
5
+ version: "1.3"
11
6
  platform: ruby
12
7
  authors:
13
8
  - Evan Weaver
14
9
  autorequire:
15
10
  bindir: bin
16
- cert_chain: []
11
+ cert_chain:
12
+ - |
13
+ -----BEGIN CERTIFICATE-----
14
+ MIIDLjCCAhagAwIBAgIBADANBgkqhkiG9w0BAQUFADA9MQ0wCwYDVQQDDARldmFu
15
+ MRgwFgYKCZImiZPyLGQBGRYIY2xvdWRidXIxEjAQBgoJkiaJk/IsZAEZFgJzdDAe
16
+ Fw0wNzA5MTYxMDMzMDBaFw0wODA5MTUxMDMzMDBaMD0xDTALBgNVBAMMBGV2YW4x
17
+ GDAWBgoJkiaJk/IsZAEZFghjbG91ZGJ1cjESMBAGCgmSJomT8ixkARkWAnN0MIIB
18
+ IjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA5C0Io89nyApnr+PvbNFge9Vs
19
+ yRWAlGBUEMahpXp28VrrfXZT0rAW7JBo4PlCE3jl4nE4dzE6gAdItSycjTosrw7A
20
+ Ir5+xoyl4Vb35adv56TIQQXvNz+BzlqnkAY5JN0CSBRTQb6mxS3hFyD/h4qgDosj
21
+ R2RFVzHqSxCS8xq4Ny8uzOwOi+Xyu4w67fI5JvnPvMxqrlR1eaIQHmxnf76RzC46
22
+ QO5QhufjAYGGXd960XzbQsQyTDUYJzrvT7AdOfiyZzKQykKt8dEpDn+QPjFTnGnT
23
+ QmgJBX5WJN0lHF2l1sbv3gh4Kn1tZu+kTUqeXY6ShAoDTyvZRiFqQdwh8w2lTQID
24
+ AQABozkwNzAJBgNVHRMEAjAAMAsGA1UdDwQEAwIEsDAdBgNVHQ4EFgQU+WqJz3xQ
25
+ XSea1hRvvHWcIMgeeC4wDQYJKoZIhvcNAQEFBQADggEBAGLZ75jfOEW8Nsl26CTt
26
+ JFrWxQTcQT/UljeefVE3xYr7lc9oQjbqO3FOyued3qW7TaNEtZfSHoYeUSMYbpw1
27
+ XAwocIPuSRFDGM4B+hgQGVDx8PMGiJKom4qLXjO40UZsR7QyN/u869Vj45LURm6h
28
+ MBcPeqCASI+WNprj9+uZa2kmHiitrFqqfMBNlm5IFbn9XeYSta9AHVvs5QQqV2m5
29
+ hIPfLqCyxsn/YgOGvo6iwyQTWyTswamaAC3HRWZxIS1sfn/Ssqa7E7oQMkv5FAXr
30
+ x5rKePfXINf8XTJczkl9OBEYdE9aNdJsJpXD0asLgGVwBICS5Bjohp6mizJcDC1+
31
+ yZ0=
32
+ -----END CERTIFICATE-----
17
33
 
18
- date: 2011-05-20 00:00:00 Z
34
+ date: 2011-08-04 00:00:00 -07:00
35
+ default_executable:
19
36
  dependencies: []
20
37
 
21
38
  description: An interface to the libmemcached C client.
@@ -179,6 +196,8 @@ files:
179
196
  - ext/libmemcached-0.32/libmemcached/memcached_strerror.c
180
197
  - ext/libmemcached-0.32/libmemcached/memcached_string.c
181
198
  - ext/libmemcached-0.32/libmemcached/memcached_string.h
199
+ - ext/libmemcached-0.32/libmemcached/memcached_touch.c
200
+ - ext/libmemcached-0.32/libmemcached/memcached_touch.h
182
201
  - ext/libmemcached-0.32/libmemcached/memcached_types.h
183
202
  - ext/libmemcached-0.32/libmemcached/memcached_util.h
184
203
  - ext/libmemcached-0.32/libmemcached/memcached_verbosity.c
@@ -277,6 +296,7 @@ files:
277
296
  - test/unit/memcached_test.rb
278
297
  - test/unit/rails_test.rb
279
298
  - memcached.gemspec
299
+ has_rdoc: true
280
300
  homepage: http://fauna.github.com/fauna/memcached/
281
301
  licenses: []
282
302
 
@@ -296,24 +316,17 @@ required_ruby_version: !ruby/object:Gem::Requirement
296
316
  requirements:
297
317
  - - ">="
298
318
  - !ruby/object:Gem::Version
299
- hash: 3
300
- segments:
301
- - 0
302
319
  version: "0"
303
320
  required_rubygems_version: !ruby/object:Gem::Requirement
304
321
  none: false
305
322
  requirements:
306
323
  - - ">="
307
324
  - !ruby/object:Gem::Version
308
- hash: 11
309
- segments:
310
- - 1
311
- - 2
312
325
  version: "1.2"
313
326
  requirements: []
314
327
 
315
328
  rubyforge_project: fauna
316
- rubygems_version: 1.7.2
329
+ rubygems_version: 1.6.2
317
330
  signing_key:
318
331
  specification_version: 3
319
332
  summary: An interface to the libmemcached C client.
Binary file