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.
Files changed (211) hide show
  1. checksums.yaml +4 -4
  2. data/.github/workflows/build_release_pipeline.yaml +53 -0
  3. data/.gitignore +33 -0
  4. data/BENCHMARKS +130 -126
  5. data/CHANGELOG +1 -6
  6. data/Gemfile +8 -1
  7. data/Gemfile.lock +25 -25
  8. data/README.md +144 -0
  9. data/Rakefile +21 -93
  10. data/ext/rlibmemcached/extconf.rb +76 -0
  11. data/ext/{rlibmemcached.i → rlibmemcached/rlibmemcached.i} +48 -63
  12. data/ext/{rlibmemcached_wrap.c → rlibmemcached/rlibmemcached_wrap.c} +629 -612
  13. data/lib/memcached/exceptions.rb +1 -12
  14. data/lib/memcached/experimental.rb +1 -33
  15. data/lib/memcached/memcached.rb +41 -34
  16. data/lib/memcached/version.rb +1 -1
  17. data/lib/memcached.rb +9 -4
  18. data/memcached.gemspec +0 -0
  19. data/memcached.pem +21 -0
  20. data/{ext → vendor}/libmemcached-0.32/libmemcached/memcached_connect.c +23 -13
  21. data/{ext → vendor}/libmemcached-0.32/libmemcached/memcached_io.c +18 -13
  22. data/{ext → vendor}/libmemcached-0.32/libmemcached/memcached_purge.c +1 -1
  23. metadata +193 -233
  24. data/Manifest +0 -209
  25. data/README.rdoc +0 -124
  26. data/ext/extconf-make.rb +0 -25
  27. data/ext/extconf.rb +0 -78
  28. data/lib/memcached/auth.rb +0 -16
  29. data/test/profile/benchmark.rb +0 -280
  30. data/test/profile/c_profiler.rb +0 -14
  31. data/test/profile/exercise.rb +0 -185
  32. data/test/profile/rb_profiler.rb +0 -21
  33. data/test/profile/valgrind.rb +0 -10
  34. data/test/setup.rb +0 -30
  35. data/test/teardown.rb +0 -0
  36. data/test/test_helper.rb +0 -18
  37. data/test/unit/binding_test.rb +0 -8
  38. data/test/unit/memcached_experimental_test.rb +0 -272
  39. data/test/unit/memcached_test.rb +0 -1487
  40. data/test/unit/rails_test.rb +0 -330
  41. /data/{ext → vendor}/libmemcached-0.32/AUTHORS +0 -0
  42. /data/{ext → vendor}/libmemcached-0.32/COPYING +0 -0
  43. /data/{ext → vendor}/libmemcached-0.32/ChangeLog +0 -0
  44. /data/{ext → vendor}/libmemcached-0.32/INSTALL +0 -0
  45. /data/{ext → vendor}/libmemcached-0.32/Makefile.am +0 -0
  46. /data/{ext → vendor}/libmemcached-0.32/Makefile.in +0 -0
  47. /data/{ext → vendor}/libmemcached-0.32/NEWS +0 -0
  48. /data/{ext → vendor}/libmemcached-0.32/README +0 -0
  49. /data/{ext → vendor}/libmemcached-0.32/THANKS +0 -0
  50. /data/{ext → vendor}/libmemcached-0.32/TODO +0 -0
  51. /data/{ext → vendor}/libmemcached-0.32/aclocal.m4 +0 -0
  52. /data/{ext → vendor}/libmemcached-0.32/clients/Makefile.am +0 -0
  53. /data/{ext → vendor}/libmemcached-0.32/clients/Makefile.in +0 -0
  54. /data/{ext → vendor}/libmemcached-0.32/clients/client_options.h +0 -0
  55. /data/{ext → vendor}/libmemcached-0.32/clients/execute.c +0 -0
  56. /data/{ext → vendor}/libmemcached-0.32/clients/execute.h +0 -0
  57. /data/{ext → vendor}/libmemcached-0.32/clients/generator.c +0 -0
  58. /data/{ext → vendor}/libmemcached-0.32/clients/generator.h +0 -0
  59. /data/{ext → vendor}/libmemcached-0.32/clients/memcat.c +0 -0
  60. /data/{ext → vendor}/libmemcached-0.32/clients/memcp.c +0 -0
  61. /data/{ext → vendor}/libmemcached-0.32/clients/memdump.c +0 -0
  62. /data/{ext → vendor}/libmemcached-0.32/clients/memerror.c +0 -0
  63. /data/{ext → vendor}/libmemcached-0.32/clients/memflush.c +0 -0
  64. /data/{ext → vendor}/libmemcached-0.32/clients/memrm.c +0 -0
  65. /data/{ext → vendor}/libmemcached-0.32/clients/memslap.c +0 -0
  66. /data/{ext → vendor}/libmemcached-0.32/clients/memstat.c +0 -0
  67. /data/{ext → vendor}/libmemcached-0.32/clients/utilities.c +0 -0
  68. /data/{ext → vendor}/libmemcached-0.32/clients/utilities.h +0 -0
  69. /data/{ext → vendor}/libmemcached-0.32/config/compile +0 -0
  70. /data/{ext → vendor}/libmemcached-0.32/config/config.guess +0 -0
  71. /data/{ext → vendor}/libmemcached-0.32/config/config.rpath +0 -0
  72. /data/{ext → vendor}/libmemcached-0.32/config/config.sub +0 -0
  73. /data/{ext → vendor}/libmemcached-0.32/config/depcomp +0 -0
  74. /data/{ext → vendor}/libmemcached-0.32/config/install-sh +0 -0
  75. /data/{ext → vendor}/libmemcached-0.32/config/ltmain.sh +0 -0
  76. /data/{ext → vendor}/libmemcached-0.32/config/missing +0 -0
  77. /data/{ext → vendor}/libmemcached-0.32/config.h.in +0 -0
  78. /data/{ext → vendor}/libmemcached-0.32/configure +0 -0
  79. /data/{ext → vendor}/libmemcached-0.32/configure.ac +0 -0
  80. /data/{ext → vendor}/libmemcached-0.32/libmemcached/Makefile.am +0 -0
  81. /data/{ext → vendor}/libmemcached-0.32/libmemcached/Makefile.in +0 -0
  82. /data/{ext → vendor}/libmemcached-0.32/libmemcached/byteorder.c +0 -0
  83. /data/{ext → vendor}/libmemcached-0.32/libmemcached/common.h +0 -0
  84. /data/{ext → vendor}/libmemcached-0.32/libmemcached/crc.c +0 -0
  85. /data/{ext → vendor}/libmemcached-0.32/libmemcached/hsieh_hash.c +0 -0
  86. /data/{ext → vendor}/libmemcached-0.32/libmemcached/jenkins_hash.c +0 -0
  87. /data/{ext → vendor}/libmemcached-0.32/libmemcached/libmemcached.ver +0 -0
  88. /data/{ext → vendor}/libmemcached-0.32/libmemcached/libmemcached_probes.d +0 -0
  89. /data/{ext → vendor}/libmemcached-0.32/libmemcached/libmemcached_probes.h +0 -0
  90. /data/{ext → vendor}/libmemcached-0.32/libmemcached/md5.c +0 -0
  91. /data/{ext → vendor}/libmemcached-0.32/libmemcached/memcached/README.txt +0 -0
  92. /data/{ext → vendor}/libmemcached-0.32/libmemcached/memcached/protocol_binary.h +0 -0
  93. /data/{ext → vendor}/libmemcached-0.32/libmemcached/memcached.c +0 -0
  94. /data/{ext → vendor}/libmemcached-0.32/libmemcached/memcached.h +0 -0
  95. /data/{ext → vendor}/libmemcached-0.32/libmemcached/memcached.hpp +0 -0
  96. /data/{ext → vendor}/libmemcached-0.32/libmemcached/memcached_allocators.c +0 -0
  97. /data/{ext → vendor}/libmemcached-0.32/libmemcached/memcached_analyze.c +0 -0
  98. /data/{ext → vendor}/libmemcached-0.32/libmemcached/memcached_auto.c +0 -0
  99. /data/{ext → vendor}/libmemcached-0.32/libmemcached/memcached_behavior.c +0 -0
  100. /data/{ext → vendor}/libmemcached-0.32/libmemcached/memcached_callback.c +0 -0
  101. /data/{ext → vendor}/libmemcached-0.32/libmemcached/memcached_configure.h.in +0 -0
  102. /data/{ext → vendor}/libmemcached-0.32/libmemcached/memcached_constants.h +0 -0
  103. /data/{ext → vendor}/libmemcached-0.32/libmemcached/memcached_delete.c +0 -0
  104. /data/{ext → vendor}/libmemcached-0.32/libmemcached/memcached_do.c +0 -0
  105. /data/{ext → vendor}/libmemcached-0.32/libmemcached/memcached_dump.c +0 -0
  106. /data/{ext → vendor}/libmemcached-0.32/libmemcached/memcached_exist.c +0 -0
  107. /data/{ext → vendor}/libmemcached-0.32/libmemcached/memcached_exist.h +0 -0
  108. /data/{ext → vendor}/libmemcached-0.32/libmemcached/memcached_fetch.c +0 -0
  109. /data/{ext → vendor}/libmemcached-0.32/libmemcached/memcached_flush.c +0 -0
  110. /data/{ext → vendor}/libmemcached-0.32/libmemcached/memcached_flush_buffers.c +0 -0
  111. /data/{ext → vendor}/libmemcached-0.32/libmemcached/memcached_get.c +0 -0
  112. /data/{ext → vendor}/libmemcached-0.32/libmemcached/memcached_get.h +0 -0
  113. /data/{ext → vendor}/libmemcached-0.32/libmemcached/memcached_hash.c +0 -0
  114. /data/{ext → vendor}/libmemcached-0.32/libmemcached/memcached_hosts.c +0 -0
  115. /data/{ext → vendor}/libmemcached-0.32/libmemcached/memcached_internal.h +0 -0
  116. /data/{ext → vendor}/libmemcached-0.32/libmemcached/memcached_io.h +0 -0
  117. /data/{ext → vendor}/libmemcached-0.32/libmemcached/memcached_key.c +0 -0
  118. /data/{ext → vendor}/libmemcached-0.32/libmemcached/memcached_parse.c +0 -0
  119. /data/{ext → vendor}/libmemcached-0.32/libmemcached/memcached_pool.h +0 -0
  120. /data/{ext → vendor}/libmemcached-0.32/libmemcached/memcached_quit.c +0 -0
  121. /data/{ext → vendor}/libmemcached-0.32/libmemcached/memcached_response.c +0 -0
  122. /data/{ext → vendor}/libmemcached-0.32/libmemcached/memcached_result.c +0 -0
  123. /data/{ext → vendor}/libmemcached-0.32/libmemcached/memcached_result.h +0 -0
  124. /data/{ext → vendor}/libmemcached-0.32/libmemcached/memcached_sasl.c +0 -0
  125. /data/{ext → vendor}/libmemcached-0.32/libmemcached/memcached_sasl.h +0 -0
  126. /data/{ext → vendor}/libmemcached-0.32/libmemcached/memcached_server.c +0 -0
  127. /data/{ext → vendor}/libmemcached-0.32/libmemcached/memcached_server.h +0 -0
  128. /data/{ext → vendor}/libmemcached-0.32/libmemcached/memcached_stats.c +0 -0
  129. /data/{ext → vendor}/libmemcached-0.32/libmemcached/memcached_storage.c +0 -0
  130. /data/{ext → vendor}/libmemcached-0.32/libmemcached/memcached_storage.h +0 -0
  131. /data/{ext → vendor}/libmemcached-0.32/libmemcached/memcached_strerror.c +0 -0
  132. /data/{ext → vendor}/libmemcached-0.32/libmemcached/memcached_string.c +0 -0
  133. /data/{ext → vendor}/libmemcached-0.32/libmemcached/memcached_string.h +0 -0
  134. /data/{ext → vendor}/libmemcached-0.32/libmemcached/memcached_touch.c +0 -0
  135. /data/{ext → vendor}/libmemcached-0.32/libmemcached/memcached_touch.h +0 -0
  136. /data/{ext → vendor}/libmemcached-0.32/libmemcached/memcached_types.h +0 -0
  137. /data/{ext → vendor}/libmemcached-0.32/libmemcached/memcached_util.h +0 -0
  138. /data/{ext → vendor}/libmemcached-0.32/libmemcached/memcached_verbosity.c +0 -0
  139. /data/{ext → vendor}/libmemcached-0.32/libmemcached/memcached_version.c +0 -0
  140. /data/{ext → vendor}/libmemcached-0.32/libmemcached/memcached_watchpoint.h +0 -0
  141. /data/{ext → vendor}/libmemcached-0.32/libmemcached/murmur_hash.c +0 -0
  142. /data/{ext → vendor}/libmemcached-0.32/libmemcached/visibility.h +0 -0
  143. /data/{ext → vendor}/libmemcached-0.32/libmemcachedutil/Makefile.am +0 -0
  144. /data/{ext → vendor}/libmemcached-0.32/libmemcachedutil/Makefile.in +0 -0
  145. /data/{ext → vendor}/libmemcached-0.32/libmemcachedutil/libmemcachedutil.ver +0 -0
  146. /data/{ext → vendor}/libmemcached-0.32/libmemcachedutil/memcached_pool.c +0 -0
  147. /data/{ext → vendor}/libmemcached-0.32/m4/ac_cxx_compile_stdcxx_0x.m4 +0 -0
  148. /data/{ext → vendor}/libmemcached-0.32/m4/ac_cxx_header_stdcxx_98.m4 +0 -0
  149. /data/{ext → vendor}/libmemcached-0.32/m4/acx_pthread.m4 +0 -0
  150. /data/{ext → vendor}/libmemcached-0.32/m4/byteorder.m4 +0 -0
  151. /data/{ext → vendor}/libmemcached-0.32/m4/deprecated.m4 +0 -0
  152. /data/{ext → vendor}/libmemcached-0.32/m4/enable_utillib.m4 +0 -0
  153. /data/{ext → vendor}/libmemcached-0.32/m4/extensions.m4 +0 -0
  154. /data/{ext → vendor}/libmemcached-0.32/m4/hsieh.m4 +0 -0
  155. /data/{ext → vendor}/libmemcached-0.32/m4/lib-prefix.m4 +0 -0
  156. /data/{ext → vendor}/libmemcached-0.32/m4/libtool.m4 +0 -0
  157. /data/{ext → vendor}/libmemcached-0.32/m4/ltoptions.m4 +0 -0
  158. /data/{ext → vendor}/libmemcached-0.32/m4/ltsugar.m4 +0 -0
  159. /data/{ext → vendor}/libmemcached-0.32/m4/ltversion.m4 +0 -0
  160. /data/{ext → vendor}/libmemcached-0.32/m4/lt~obsolete.m4 +0 -0
  161. /data/{ext → vendor}/libmemcached-0.32/m4/memcached.m4 +0 -0
  162. /data/{ext → vendor}/libmemcached-0.32/m4/pandora_64bit.m4 +0 -0
  163. /data/{ext → vendor}/libmemcached-0.32/m4/pandora_canonical.m4 +0 -0
  164. /data/{ext → vendor}/libmemcached-0.32/m4/pandora_check_compiler_version.m4 +0 -0
  165. /data/{ext → vendor}/libmemcached-0.32/m4/pandora_check_cxx_standard.m4 +0 -0
  166. /data/{ext → vendor}/libmemcached-0.32/m4/pandora_enable_dtrace.m4 +0 -0
  167. /data/{ext → vendor}/libmemcached-0.32/m4/pandora_ensure_gcc_version.m4 +0 -0
  168. /data/{ext → vendor}/libmemcached-0.32/m4/pandora_have_better_malloc.m4 +0 -0
  169. /data/{ext → vendor}/libmemcached-0.32/m4/pandora_have_sasl.m4 +0 -0
  170. /data/{ext → vendor}/libmemcached-0.32/m4/pandora_header_assert.m4 +0 -0
  171. /data/{ext → vendor}/libmemcached-0.32/m4/pandora_libtool.m4 +0 -0
  172. /data/{ext → vendor}/libmemcached-0.32/m4/pandora_optimize.m4 +0 -0
  173. /data/{ext → vendor}/libmemcached-0.32/m4/pandora_shared_ptr.m4 +0 -0
  174. /data/{ext → vendor}/libmemcached-0.32/m4/pandora_vc_build.m4 +0 -0
  175. /data/{ext → vendor}/libmemcached-0.32/m4/pandora_warnings.m4 +0 -0
  176. /data/{ext → vendor}/libmemcached-0.32/m4/pod2man.m4 +0 -0
  177. /data/{ext → vendor}/libmemcached-0.32/m4/protocol_binary.m4 +0 -0
  178. /data/{ext → vendor}/libmemcached-0.32/m4/setsockopt.m4 +0 -0
  179. /data/{ext → vendor}/libmemcached-0.32/m4/visibility.m4 +0 -0
  180. /data/{ext → vendor}/libmemcached-0.32/support/Makefile.am +0 -0
  181. /data/{ext → vendor}/libmemcached-0.32/support/Makefile.in +0 -0
  182. /data/{ext → vendor}/libmemcached-0.32/support/libmemcached-fc.spec.in +0 -0
  183. /data/{ext → vendor}/libmemcached-0.32/support/libmemcached.pc.in +0 -0
  184. /data/{ext → vendor}/libmemcached-0.32/support/libmemcached.spec +0 -0
  185. /data/{ext → vendor}/libmemcached-0.32/support/libmemcached.spec.in +0 -0
  186. /data/{ext → vendor}/libmemcached-0.32/support/set_benchmark.sh +0 -0
  187. /data/{ext → vendor}/libmemcached-0.32/tests/Makefile.am +0 -0
  188. /data/{ext → vendor}/libmemcached-0.32/tests/Makefile.in +0 -0
  189. /data/{ext → vendor}/libmemcached-0.32/tests/atomsmasher.c +0 -0
  190. /data/{ext → vendor}/libmemcached-0.32/tests/function.c +0 -0
  191. /data/{ext → vendor}/libmemcached-0.32/tests/ketama_test_cases.h +0 -0
  192. /data/{ext → vendor}/libmemcached-0.32/tests/output.cmp +0 -0
  193. /data/{ext → vendor}/libmemcached-0.32/tests/output.res +0 -0
  194. /data/{ext → vendor}/libmemcached-0.32/tests/output2.res +0 -0
  195. /data/{ext → vendor}/libmemcached-0.32/tests/plus.cpp +0 -0
  196. /data/{ext → vendor}/libmemcached-0.32/tests/r/memcat.res +0 -0
  197. /data/{ext → vendor}/libmemcached-0.32/tests/r/memcp.res +0 -0
  198. /data/{ext → vendor}/libmemcached-0.32/tests/r/memrm.res +0 -0
  199. /data/{ext → vendor}/libmemcached-0.32/tests/r/memslap.res +0 -0
  200. /data/{ext → vendor}/libmemcached-0.32/tests/r/memstat.res +0 -0
  201. /data/{ext → vendor}/libmemcached-0.32/tests/server.c +0 -0
  202. /data/{ext → vendor}/libmemcached-0.32/tests/server.h +0 -0
  203. /data/{ext → vendor}/libmemcached-0.32/tests/start.c +0 -0
  204. /data/{ext → vendor}/libmemcached-0.32/tests/t/memcat.test +0 -0
  205. /data/{ext → vendor}/libmemcached-0.32/tests/t/memcp.test +0 -0
  206. /data/{ext → vendor}/libmemcached-0.32/tests/t/memrm.test +0 -0
  207. /data/{ext → vendor}/libmemcached-0.32/tests/t/memslap.test +0 -0
  208. /data/{ext → vendor}/libmemcached-0.32/tests/t/memstat.test +0 -0
  209. /data/{ext → vendor}/libmemcached-0.32/tests/test.c +0 -0
  210. /data/{ext → vendor}/libmemcached-0.32/tests/test.h +0 -0
  211. /data/{ext → vendor}/libmemcached-0.32/tests/udp.c +0 -0
@@ -1,280 +0,0 @@
1
- Bundler.require(:benchmark)
2
-
3
- HERE = File.dirname(__FILE__)
4
- $LOAD_PATH << "#{HERE}/../../lib/"
5
- UNIX_SOCKET_NAME = File.join(ENV['TMPDIR']||'/tmp','memcached')
6
- JRUBY = defined?(JRUBY_VERSION)
7
-
8
- require 'ffi/times' if JRUBY
9
- require 'memcached'
10
- require 'benchmark'
11
- require 'rubygems'
12
- require 'ruby-debug' if ENV['DEBUG'] && !JRUBY
13
- if ENV['PROFILE']
14
- require 'ruby-prof'
15
- require 'fileutils'
16
- FileUtils.mkdir_p 'profiles'
17
- end
18
- begin; require 'memory'; rescue LoadError; end
19
-
20
-
21
- puts `uname -a`
22
- puts `ruby -v`
23
- puts `env | egrep '^RUBY'`
24
- puts "Ruby #{RUBY_VERSION}p#{RUBY_PATCHLEVEL}"
25
-
26
- [
27
- ["memcached"],
28
- ["remix-stash", "remix/stash"],
29
- [JRUBY ? "jruby-memcache-client" : "memcache-client", "memcache"],
30
- ["kgio"], ["dalli"]
31
- ].each do |gem_name, requirement|
32
- begin
33
- require requirement || gem_name
34
- gem gem_name
35
- puts "Loaded #{gem_name} #{Gem.loaded_specs[gem_name].version.to_s rescue nil}"
36
- rescue LoadError
37
- end
38
- end
39
-
40
- class Remix::Stash
41
- # Remix::Stash API doesn't let you set servers
42
- @@clusters = {:default => Remix::Stash::Cluster.new(['127.0.0.1:43042', '127.0.0.1:43043'])}
43
- end
44
-
45
- class Dalli::ClientCompat < Dalli::Client
46
- def set(*args)
47
- super(*args[0..2])
48
- end
49
- def get(*args)
50
- super(args.first)
51
- end
52
- def get_multi(*args)
53
- super(args.first)
54
- end
55
- def append(*args)
56
- super
57
- rescue Dalli::DalliError
58
- end
59
- def prepend(*args)
60
- super
61
- rescue Dalli::DalliError
62
- end
63
- def exist?(key)
64
- !get(key).nil?
65
- end
66
- end
67
-
68
- class Bench
69
-
70
- def initialize(loops = nil, stack_depth = nil)
71
- @loops = (loops || 50000).to_i
72
- @stack_depth = (stack_depth || 0).to_i
73
-
74
- puts "PID is #{Process.pid}"
75
- puts "Loops is #{@loops}"
76
- puts "Stack depth is #{@stack_depth}"
77
-
78
- @m_value = Marshal.dump(
79
- @small_value = ["testing"])
80
- @m_large_value = Marshal.dump(
81
- @large_value = [{"test" => "1", "test2" => "2", Object.new => "3", 4 => 4, "test5" => 2**65}] * 2048)
82
-
83
- puts "Small value size is: #{@m_value.size} bytes"
84
- puts "Large value size is: #{@m_large_value.size} bytes"
85
-
86
- @keys = [
87
- @k1 = "Short",
88
- @k2 = "Sym1-2-3::45" * 8,
89
- @k3 = "Long" * 40,
90
- @k4 = "Medium" * 8,
91
- @k5 = "Medium2" * 8,
92
- @k6 = "Long3" * 40]
93
-
94
- reset_servers
95
- reset_clients
96
-
97
- Benchmark.bm(36) do |x|
98
- @benchmark = x
99
- end
100
- end
101
-
102
- def run(level = @stack_depth)
103
- level > 0 ? run(level - 1) : run_without_recursion
104
- end
105
-
106
- private
107
-
108
- def reset_servers
109
- system("ruby #{HERE}/../setup.rb")
110
- sleep(1)
111
- end
112
-
113
- def reset_clients
114
- # Other clients
115
- @clients = {
116
- "mclient:ascii" => MemCache.new(['127.0.0.1:43042', '127.0.0.1:43043']),
117
- "stash:bin" => Remix::Stash.new(:root),
118
- "dalli:bin" => Dalli::ClientCompat.new(['127.0.0.1:43042', '127.0.0.1:43043'], :marshal => false, :threadsafe => false)}
119
-
120
- # Us
121
- @clients.merge!({
122
- "libm:ascii" => Memcached::Rails.new(
123
- ['127.0.0.1:43042', '127.0.0.1:43043'],
124
- :buffer_requests => false, :no_block => false, :namespace => "namespace"),
125
- "libm:ascii:pipeline" => Memcached::Rails.new(
126
- ['127.0.0.1:43042', '127.0.0.1:43043'],
127
- :no_block => true, :buffer_requests => true, :noreply => true, :namespace => "namespace"),
128
- "libm:ascii:udp" => Memcached::Rails.new(
129
- ["#{UNIX_SOCKET_NAME}0", "#{UNIX_SOCKET_NAME}1"],
130
- :buffer_requests => false, :no_block => false, :namespace => "namespace"),
131
- "libm:bin" => Memcached::Rails.new(
132
- ['127.0.0.1:43042', '127.0.0.1:43043'],
133
- :buffer_requests => false, :no_block => false, :namespace => "namespace", :binary_protocol => true),
134
- "libm:bin:buffer" => Memcached::Rails.new(
135
- ['127.0.0.1:43042', '127.0.0.1:43043'],
136
- :no_block => true, :buffer_requests => true, :namespace => "namespace", :binary_protocol => true)})
137
- end
138
-
139
- def benchmark_clients(test_name, populate_keys = true)
140
- return if ENV["TEST"] and !test_name.include?(ENV["TEST"])
141
-
142
- @clients.keys.sort.each do |client_name|
143
- next if ENV["CLIENT"] and !client_name.include?(ENV["CLIENT"])
144
- next if client_name == "stash" and test_name == "set-large" # Don't let stash break the world
145
-
146
- client = @clients[client_name]
147
- begin
148
- if populate_keys
149
- client.set @k1, @m_value, 0, true
150
- client.set @k2, @m_value, 0, true
151
- client.set @k3, @m_value, 0, true
152
- else
153
- client.delete @k1
154
- client.delete @k2
155
- client.delete @k3
156
- end
157
-
158
- # Force any JITs to run
159
- 10003.times { yield client }
160
-
161
- GC.disable if !JRUBY
162
- RubyProf.start if ENV['PROFILE']
163
- @benchmark.report("#{test_name}: #{client_name}") { @loops.times { yield client } }
164
- if ENV['PROFILE']
165
- prof = RubyProf::MultiPrinter.new(RubyProf.stop)
166
- prof.print(:path => 'profiles', :profile => "#{test_name}-#{client_name.gsub(':','-')}")
167
- end
168
- rescue Exception => e
169
- puts "#{test_name}: #{client_name} => #{e.inspect}" if ENV["DEBUG"]
170
- reset_clients
171
- end
172
- GC.enable if !JRUBY
173
- end
174
- puts
175
- end
176
-
177
- def benchmark_hashes(hashes, test_name)
178
- hashes.each do |hash_name, int|
179
- @m = Memcached::Rails.new(:hash => hash_name)
180
- @benchmark.report("#{test_name}:#{hash_name}") do
181
- (@loops * 5).times { yield int }
182
- end
183
- end
184
- end
185
-
186
- def run_without_recursion
187
- benchmark_clients("set") do |c|
188
- c.set @k1, @m_value, 0, true
189
- c.set @k2, @m_value, 0, true
190
- c.set @k3, @m_value, 0, true
191
- end
192
-
193
- benchmark_clients("get") do |c|
194
- c.get @k1, true
195
- c.get @k2, true
196
- c.get @k3, true
197
- end
198
-
199
- benchmark_clients("get-multi") do |c|
200
- c.get_multi @keys, true
201
- end
202
-
203
- benchmark_clients("append") do |c|
204
- c.append @k1, @m_value
205
- c.append @k2, @m_value
206
- c.append @k3, @m_value
207
- end
208
-
209
- benchmark_clients("prepend") do |c|
210
- c.prepend @k1, @m_value
211
- c.prepend @k2, @m_value
212
- c.prepend @k3, @m_value
213
- end
214
-
215
- benchmark_clients("delete") do |c|
216
- c.delete @k1
217
- c.delete @k2
218
- c.delete @k3
219
- end
220
-
221
- benchmark_clients("exist") do |c|
222
- c.exist? @k1
223
- c.exist? @k2
224
- c.exist? @k3
225
- end
226
-
227
- benchmark_clients("get-missing", false) do |c|
228
- c.get @k1
229
- c.get @k2
230
- c.get @k3
231
- end
232
-
233
- benchmark_clients("append-missing", false) do |c|
234
- c.append @k1, @m_value
235
- c.append @k2, @m_value
236
- c.append @k3, @m_value
237
- end
238
-
239
- benchmark_clients("prepend-missing", false) do |c|
240
- c.prepend @k1, @m_value
241
- c.prepend @k2, @m_value
242
- c.prepend @k3, @m_value
243
- end
244
-
245
- benchmark_clients("exist-missing", false) do |c|
246
- c.exist? @k1
247
- c.exist? @k2
248
- c.exist? @k3
249
- end
250
-
251
- benchmark_clients("set-large") do |c|
252
- c.set @k1, @m_large_value, 0, true
253
- c.set @k2, @m_large_value, 0, true
254
- c.set @k3, @m_large_value, 0, true
255
- end
256
-
257
- benchmark_clients("get-large") do |c|
258
- c.get @k1, true
259
- c.get @k2, true
260
- c.get @k3, true
261
- end
262
-
263
- if defined?(Memcached) && !ENV['TEST'] && !ENV['CLIENT']
264
- benchmark_hashes(Memcached::HASH_VALUES, "hash") do |i|
265
- Rlibmemcached.memcached_generate_hash_rvalue(@k1, i)
266
- Rlibmemcached.memcached_generate_hash_rvalue(@k2, i)
267
- Rlibmemcached.memcached_generate_hash_rvalue(@k3, i)
268
- Rlibmemcached.memcached_generate_hash_rvalue(@k4, i)
269
- Rlibmemcached.memcached_generate_hash_rvalue(@k5, i)
270
- Rlibmemcached.memcached_generate_hash_rvalue(@k6, i)
271
- end
272
- end
273
- end
274
- end
275
-
276
- Bench.new(ENV["LOOPS"], ENV["STACK_DEPTH"]).run
277
-
278
- Process.memory.each do |key, value|
279
- puts "#{key}: #{value/1024.0}M"
280
- end if Process.respond_to? :memory
@@ -1,14 +0,0 @@
1
- require "#{File.dirname(__FILE__)}/../setup"
2
-
3
- $LOAD_PATH << "#{File.dirname(__FILE__)}/../../lib/"
4
- require 'memcached'
5
-
6
- profile = "/tmp/memcached_#{Memcached::VERSION}_c"
7
-
8
- system("env CPUPROFILE_FREQUENCY=500 CPUPROFILE=#{profile}.out DYLD_INSERT_LIBRARIES=/opt/local/lib/libprofiler.dylib ruby -r#{File.dirname(__FILE__)}/exercise -e \"Worker.new('mixed', 200000).work\"")
9
-
10
- ruby = `which ruby`.chomp
11
-
12
- system("pprof --nodefraction=0.0000001 --text #{ruby} #{profile}.out")
13
- system("pprof --nodefraction=0.0000001 --pdf #{ruby} #{profile}.out > #{profile}.pdf")
14
- system("open #{profile}.pdf")
@@ -1,185 +0,0 @@
1
-
2
- require "#{File.dirname(__FILE__)}/../setup"
3
-
4
- $LOAD_PATH << "#{File.dirname(__FILE__)}/../../lib/"
5
- require 'memcached'
6
- require 'rubygems'
7
- require 'ostruct'
8
-
9
- GC.copy_on_write_friendly = true if GC.respond_to?("copy_on_write_friendly=")
10
-
11
- class Worker
12
- def initialize(method_name, iterations, with_memory = 'false')
13
- @method = method_name || 'mixed'
14
- @i = (iterations || 10000).to_i
15
- @with_memory = with_memory
16
-
17
- puts "*** Running #{@method.inspect} test for #{@i} loops. ***"
18
-
19
- @key1 = "key1--------------------------------"
20
- @key2 = "key2--------------------------------"
21
- @key3 = "key3--------------------------------"
22
-
23
- @value = OpenStruct.new(
24
- :a => 1, :b => 2, "array" => [1, 2, 3], "hash" => {:badger => 1}
25
- )
26
- @marshalled = Marshal.dump(@value)
27
-
28
- @opts = [
29
- ['localhost:43042', 'localhost:43043', 'localhost:43044'],
30
- {
31
- :buffer_requests => true,
32
- :no_block => true,
33
- :noreply => false,
34
- :namespace => "namespace"
35
- }
36
- ]
37
- @cache = Memcached::Rails.new(*@opts)
38
-
39
- @cache.set @key1, @value
40
- end
41
-
42
- def work
43
- case @method
44
- when "set"
45
- @i.times do
46
- @cache.set @key1, @value
47
- end
48
- when "get"
49
- @i.times do
50
- @cache.get @key1
51
- end
52
- when "delete"
53
- @i.times do
54
- @cache.set @key1, @value
55
- @cache.delete @key1
56
- end
57
- when "delete-miss"
58
- @i.times do
59
- @cache.delete @key1
60
- end
61
- when "get-miss"
62
- @i.times do
63
- @cache.get @key2
64
- end
65
- when "get-increasing"
66
- one_k = "x"*1024
67
- @i.times do |i|
68
- @cache.set @key1, one_k*(i+1), 0, false
69
- @cache.get @key1, false
70
- end
71
- when "get-miss-increasing"
72
- @i.times do |i|
73
- @cache.delete @key2
74
- @cache.get @key2
75
- end
76
- when "add"
77
- @i.times do
78
- @cache.delete @key1
79
- @cache.add @key1, @value
80
- end
81
- when "add-present"
82
- @cache.set @key1, @value
83
- @i.times do
84
- @cache.add @key1, @value
85
- end
86
- when "mixed"
87
- @i.times do
88
- @cache.set @key1, @value
89
- @cache.set @key2, @value
90
- @cache.get @key1
91
- @cache.get @key3
92
- @cache.get [@key1, @key2, @key3]
93
- @cache.prepend @key1, @marshalled
94
- @cache.prepend @key2, @marshalled
95
- @cache.delete @key1
96
- @cache.delete @key2
97
- end
98
- when "everything"
99
- @i.times do
100
- @cache.set @key1, @value
101
- @cache.set @key2, @value
102
- @cache.get @key1
103
- @cache.get @key3
104
- @cache.get [@key1, @key2, @key3]
105
- @cache.prepend @key1, @marshalled
106
- @cache.prepend @key2, @marshalled
107
- @cache.delete @key1
108
- @cache.delete @key2
109
- @cache.prepend @key1, @marshalled
110
- @cache.prepend @key2, @marshalled
111
- @cache.get @key1
112
- @cache.get @key3
113
- cache = Memcached::Rails.new(*@opts)
114
- cache = @cache.clone
115
- servers = @cache.servers
116
- server = @cache.server_by_key(@key1)
117
- @cache.stats
118
- end
119
- @i.times do
120
- @cache.reset
121
- end
122
- system("killall -9 memcached")
123
- @i.times do
124
- @cache.set @key1, @value rescue nil
125
- @cache.get @key3 rescue nil
126
- @cache.delete @key2 rescue nil
127
- end
128
- when "stats"
129
- @cache.stats
130
- when "multiget"
131
- @i.times do
132
- @cache.get([@key1, @key2, @key3])
133
- end
134
- when "clone"
135
- @i.times do
136
- cache = @cache.clone
137
- end
138
- when "reset"
139
- @i.times do
140
- @cache.reset
141
- end
142
- when "servers"
143
- @i.times do
144
- @cache.servers
145
- end
146
- when "server_by_key"
147
- @i.times do
148
- @cache.server_by_key(@key1)
149
- end
150
- when "server_error"
151
- @i.times do
152
- begin
153
- @cache.set @key1, "I'm big" * 1000000
154
- rescue
155
- end
156
- end
157
- else
158
- raise "No such method"
159
- end
160
-
161
- @cache = nil
162
-
163
- if @with_memory == "true"
164
- puts "*** Garbage collect. ***"
165
- 10.times do
166
- GC.start
167
- sleep 0.1
168
- end
169
-
170
- sts, server_sts, clients = 0, 0, 0
171
- ObjectSpace.each_object(Memcached) { clients += 1 }
172
- ObjectSpace.each_object(Rlibmemcached::MemcachedSt) { sts += 1 }
173
- ObjectSpace.each_object(Rlibmemcached::MemcachedServerSt) { server_sts += 1 }
174
- puts "*** memcached_st structs: #{sts} ***"
175
- puts "*** memcached_server_st structs: #{server_sts} ***"
176
- puts "*** Memcached instances: #{clients} ***"
177
-
178
- begin;
179
- require 'memory'
180
- Process.memory.each { |key, value| puts "#{key}: #{value/1024.0}M" }
181
- rescue LoadError
182
- end
183
- end
184
- end
185
- end
@@ -1,21 +0,0 @@
1
-
2
- require "#{File.dirname(__FILE__)}/../setup"
3
-
4
- $LOAD_PATH << "#{File.dirname(__FILE__)}/../../lib/"
5
-
6
- ENV['CPUPROFILE_FREQUENCY'] = '500'
7
- require 'memcached'
8
- require 'rubygems'
9
- require 'perftools'
10
- require "#{HERE}/profile/exercise"
11
-
12
- profile = "/tmp/memcached_#{Memcached::VERSION}_rb"
13
- worker = Worker.new('mixed', 200000)
14
-
15
- PerfTools::CpuProfiler.start("#{profile}.out") do
16
- worker.work
17
- end
18
-
19
- system("pprof.rb --nodefraction=0.0000001 --text #{profile}.out")
20
- system("pprof.rb --nodefraction=0.0000001 --edgefraction=0.0000001 --pdf #{profile}.out > #{profile}.pdf")
21
- system("open #{profile}.pdf")
@@ -1,10 +0,0 @@
1
- require "#{File.dirname(__FILE__)}/../setup"
2
-
3
- COMMAND = "--dsymutil=yes ruby -r#{File.dirname(__FILE__)}/exercise.rb -e \"Worker.new(ENV['TEST'] || 'everything', (ENV['LOOPS'] || 50).to_i, 'true').work\""
4
-
5
- case ENV["TOOL"]
6
- when nil, "memcheck":
7
- exec("valgrind --tool=memcheck --error-limit=no --undef-value-errors=no --leak-check=full --show-reachable=no --num-callers=15 --track-fds=yes --workaround-gcc296-bugs=yes --leak-resolution=med --max-stackframe=7304328 #{COMMAND}")
8
- when "massif":
9
- exec("valgrind --tool=massif --time-unit=B #{COMMAND}")
10
- end
data/test/setup.rb DELETED
@@ -1,30 +0,0 @@
1
-
2
- unless defined? UNIX_SOCKET_NAME
3
- HERE = File.dirname(__FILE__)
4
- UNIX_SOCKET_NAME = File.join(ENV['TMPDIR']||'/tmp','memcached')
5
-
6
- # Kill memcached
7
- system("killall -9 memcached")
8
-
9
- # Start memcached
10
- verbosity = (ENV['DEBUG'] ? "-vv" : "")
11
- log = "/tmp/memcached.log"
12
- memcached = ENV['MEMCACHED_COMMAND'] || 'memcached'
13
- system ">#{log}"
14
-
15
- # TCP memcached
16
- (43042..43046).each do |port|
17
- cmd = "#{memcached} #{verbosity} -U 0 -p #{port} >> #{log} 2>&1 &"
18
- raise "'#{cmd}' failed to start" unless system(cmd)
19
- end
20
- # UDP memcached
21
- (43052..43053).each do |port|
22
- cmd = "#{memcached} #{verbosity} -U #{port} -p 0 >> #{log} 2>&1 &"
23
- raise "'#{cmd}' failed to start" unless system(cmd)
24
- end
25
- # Domain socket memcached
26
- (0..1).each do |i|
27
- cmd = "#{memcached} -M -s #{UNIX_SOCKET_NAME}#{i} #{verbosity} >> #{log} 2>&1 &"
28
- raise "'#{cmd}' failed to start" unless system(cmd)
29
- end
30
- end
data/test/teardown.rb DELETED
File without changes
data/test/test_helper.rb DELETED
@@ -1,18 +0,0 @@
1
- $LOAD_PATH << "#{File.dirname(__FILE__)}/../lib"
2
-
3
- require 'socket'
4
- require 'benchmark'
5
-
6
- require 'rubygems'
7
- require 'ruby-debug' if ENV['DEBUG']
8
- require 'memcached'
9
-
10
- require 'test/unit'
11
- require 'test/unit/assertions'
12
- require 'mocha/test_unit'
13
- require 'ostruct'
14
-
15
- UNIX_SOCKET_NAME = File.join(ENV['TMPDIR']||'/tmp','memcached') unless defined? UNIX_SOCKET_NAME
16
-
17
- class GenericClass
18
- end
@@ -1,8 +0,0 @@
1
-
2
- require File.expand_path("#{File.dirname(__FILE__)}/../test_helper")
3
-
4
- class BindingTest < Test::Unit::TestCase
5
- def test_libmemcached_loaded
6
- assert_nothing_raised { Rlibmemcached }
7
- end
8
- end