memcached 1.1 → 1.1.1

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.
data.tar.gz.sig CHANGED
@@ -1,4 +1,3 @@
1
- ��c (�8>%�X?�n�R�
2
- w�y�� ��Hy��c@,ȫLV�+V��, ��lڸ)��d,��Tvd�ދ�]#�J����y7�&��Y�څ��oDlU?4eQ5
3
- 69sT���~�b׆N��\���w�\_f�E2)-����N
4
- 㩙O���6@k�Š��ު��y�"�
1
+ 
2
+ �MY���i�3+�7T3��L لh���<���� s$��.:��?�� �ZU�&���ZVc<fBf}Fe��Ft0yhh?=8Irk���W��X�s{���G��:/)
3
+ �������4��"+�x5x��A����A���Fc}���C:<�����r��ʶ�V��w� ���d����c��7M���nޟc8B����]y�ik�\ ��$�A���99!��k���!GP�ґ�A�y��{&�F��
data/BENCHMARKS CHANGED
@@ -20,117 +20,115 @@ These benchmarks were run on a 64-bit OS X machine, with memcached 1.4.5:
20
20
  RUBY_HEAP_SLOTS_GROWTH_FACTOR=1
21
21
  RUBY_VERSION=ree-1.8.7-2010.02
22
22
  Ruby 1.8.7p253
23
- Loaded memcached 1.1
23
+ Loaded memcached 1.1.1
24
24
  Loaded remix-stash 1.1.3
25
25
  Loaded memcache-client 1.8.5
26
26
  Loaded kgio 2.0.0
27
27
  Loaded dalli 1.0.2
28
+ PID is 21173
28
29
  Loops is 20000
29
30
  Stack depth is 0
30
31
  Small value size is: 13 bytes
31
32
  Large value size is: 4158 bytes
32
33
 
33
34
  user system total real
34
- set: dalli:bin 4.260000 1.390000 5.650000 ( 7.781403)
35
- set: libm:ascii 0.620000 1.000000 1.620000 ( 3.850559)
36
- set: libm:ascii:pipeline 0.250000 0.010000 0.260000 ( 0.257739)
37
- set: libm:ascii:udp 0.540000 0.560000 1.100000 ( 2.628061)
38
- set: libm:bin 0.500000 0.870000 1.370000 ( 3.304144)
39
- set: libm:bin:buffer 0.270000 0.110000 0.380000 ( 0.868976)
40
- set: mclient:ascii 7.090000 1.940000 9.030000 ( 9.799150)
41
- set: stash:bin 2.660000 1.090000 3.750000 ( 6.359556)
42
-
43
- get: dalli:bin 4.630000 1.510000 6.140000 ( 8.750410)
44
- get: libm:ascii 0.750000 0.980000 1.730000 ( 4.106665)
45
- get: libm:ascii:pipeline 0.790000 1.190000 1.980000 ( 4.097790)
46
- get: libm:ascii:udp 0.710000 0.580000 1.290000 ( 3.024444)
47
- get: libm:bin 0.640000 0.980000 1.620000 ( 3.675987)
48
- get: libm:bin:buffer 0.660000 1.100000 1.760000 ( 4.125261)
49
- get: mclient:ascii 8.570000 1.860000 10.430000 ( 11.258154)
50
- get: stash:bin 2.320000 1.010000 3.330000 ( 5.785865)
51
-
52
- get-multi: dalli:bin 7.900000 2.310000 10.210000 ( 11.062836)
53
- get-multi: libm:ascii 0.830000 0.580000 1.410000 ( 2.314816)
54
- get-multi: libm:ascii:pipeline 0.780000 0.590000 1.370000 ( 2.505246)
55
- get-multi: libm:ascii:udp 0.820000 0.460000 1.280000 ( 1.778208)
56
- get-multi: libm:bin 0.820000 0.750000 1.570000 ( 3.781036)
57
- get-multi: libm:bin:buffer 0.820000 0.710000 1.530000 ( 3.197627)
58
-
59
- append: dalli:bin 3.770000 1.260000 5.030000 ( 9.071970)
60
- append: libm:ascii 0.660000 0.990000 1.650000 ( 5.801622)
61
- append: libm:ascii:pipeline 0.270000 0.010000 0.280000 ( 0.875748)
62
- append: libm:ascii:udp 0.570000 0.600000 1.170000 ( 4.486811)
63
- append: libm:bin 0.540000 0.880000 1.420000 ( 5.101226)
64
- append: libm:bin:buffer 0.560000 0.770000 1.330000 ( 2.742466)
65
- append: mclient:ascii 7.410000 1.820000 9.230000 ( 11.881533)
66
-
67
- prepend: dalli:bin 3.600000 1.190000 4.790000 ( 8.895472)
68
- prepend: libm:ascii 0.670000 1.000000 1.670000 ( 5.946532)
69
- prepend: libm:ascii:pipeline 0.280000 0.010000 0.290000 ( 0.766421)
70
- prepend: libm:ascii:udp 0.640000 0.570000 1.210000 ( 4.405895)
71
- prepend: libm:bin 0.540000 0.900000 1.440000 ( 4.795609)
72
- prepend: libm:bin:buffer 0.490000 0.760000 1.250000 ( 2.440978)
73
- prepend: mclient:ascii 7.130000 1.680000 8.810000 ( 11.276423)
74
-
75
- delete: dalli:bin 3.830000 1.400000 5.230000 ( 7.029441)
76
- delete: libm:ascii 1.340000 0.960000 2.300000 ( 4.673076)
77
- delete: libm:ascii:pipeline 0.330000 0.340000 0.670000 ( 0.727365)
78
- delete: libm:ascii:udp 1.260000 0.690000 1.950000 ( 3.978592)
79
- delete: libm:bin 1.170000 0.950000 2.120000 ( 4.623145)
80
- delete: libm:bin:buffer 0.270000 0.330000 0.600000 ( 1.233183)
81
- delete: mclient:ascii 6.840000 1.590000 8.430000 ( 9.413134)
82
-
83
- get-missing: dalli:bin 3.750000 1.360000 5.110000 ( 7.640075)
84
- get-missing: libm:ascii 1.390000 0.960000 2.350000 ( 4.956339)
85
- get-missing: libm:ascii:pipeline 1.460000 1.290000 2.750000 ( 5.100596)
86
- get-missing: libm:ascii:udp 1.290000 0.660000 1.950000 ( 3.916012)
87
- get-missing: libm:bin 1.370000 0.950000 2.320000 ( 4.699251)
88
- get-missing: libm:bin:buffer 1.430000 1.250000 2.680000 ( 5.016395)
89
- get-missing: mclient:ascii 7.030000 1.630000 8.660000 ( 10.143076)
90
-
91
- append-missing: dalli:bin 3.870000 1.360000 5.230000 ( 7.454089)
92
- append-missing: libm:ascii 1.430000 0.950000 2.380000 ( 5.313864)
93
- append-missing: libm:ascii:pipeline 0.250000 0.010000 0.260000 ( 0.262928)
94
- append-missing: libm:ascii:udp 1.330000 0.680000 2.010000 ( 4.366685)
95
- append-missing: libm:bin 1.350000 0.940000 2.290000 ( 5.314118)
96
- append-missing: mclient:ascii 6.510000 1.510000 8.020000 ( 10.445953)
97
-
98
- prepend-missing: dalli:bin 3.930000 1.400000 5.330000 ( 7.723462)
99
- prepend-missing: libm:ascii 1.440000 0.980000 2.420000 ( 5.013569)
100
- prepend-missing: libm:ascii:pipeline 0.260000 0.010000 0.270000 ( 0.268678)
101
- prepend-missing: libm:ascii:udp 1.370000 0.720000 2.090000 ( 4.132354)
102
- prepend-missing: libm:bin 1.340000 0.930000 2.270000 ( 5.525098)
103
- prepend-missing: mclient:ascii 7.030000 1.670000 8.700000 ( 9.769180)
104
-
105
- set-large: dalli:bin 4.950000 1.670000 6.620000 ( 9.261310)
106
- set-large: libm:ascii 0.670000 1.060000 1.730000 ( 4.484607)
107
- set-large: libm:ascii:pipeline 0.400000 0.260000 0.660000 ( 0.879186)
108
- set-large: libm:ascii:udp 0.620000 0.690000 1.310000 ( 4.016410)
109
- set-large: libm:bin 0.540000 1.010000 1.550000 ( 3.763049)
110
- set-large: libm:bin:buffer 0.370000 0.440000 0.810000 ( 1.543509)
111
- set-large: mclient:ascii 7.570000 2.120000 9.690000 ( 10.677677)
112
- set-large: stash:bin 3.950000 1.080000 5.030000 ( 7.506158)
113
-
114
- get-large: dalli:bin 4.580000 1.370000 5.950000 ( 7.917984)
115
- get-large: libm:ascii 0.740000 0.900000 1.640000 ( 3.994640)
116
- get-large: libm:ascii:pipeline 0.800000 1.190000 1.990000 ( 4.067327)
117
- get-large: libm:ascii:udp 0.750000 0.560000 1.310000 ( 2.875825)
118
- get-large: libm:bin 0.630000 0.990000 1.620000 ( 3.536786)
119
- get-large: libm:bin:buffer 0.690000 1.140000 1.830000 ( 3.937316)
120
- get-large: mclient:ascii 8.840000 1.980000 10.820000 ( 11.897647)
121
- get-large: stash:bin 2.450000 0.960000 3.410000 ( 5.595178)
122
-
123
- hash:murmur 0.240000 0.000000 0.240000 ( 0.244843)
124
- hash:md5 0.580000 0.000000 0.580000 ( 0.584214)
125
- hash:fnv1a_64 0.360000 0.000000 0.360000 ( 0.382996)
126
- hash:fnv1a_32 0.310000 0.010000 0.320000 ( 0.332762)
127
- hash:jenkins 0.270000 0.000000 0.270000 ( 0.282539)
128
- hash:default 0.380000 0.000000 0.380000 ( 0.387484)
129
- hash:crc 0.390000 0.000000 0.390000 ( 0.388273)
130
- hash:hsieh 0.210000 0.000000 0.210000 ( 0.208599)
131
- hash:fnv1_32 0.310000 0.000000 0.310000 ( 0.314305)
132
- hash:fnv1_64 0.430000 0.000000 0.430000 ( 0.425971)
133
- hash:none 0.230000 0.000000 0.230000 ( 0.225403)
134
-
135
-
136
-
35
+ set: libm:ascii 0.600000 0.960000 1.560000 ( 3.790868)
36
+ set: libm:ascii:pipeline 0.230000 0.010000 0.240000 ( 0.240365)
37
+ set: libm:ascii:udp 0.530000 0.580000 1.110000 ( 2.573610)
38
+ set: libm:bin 0.480000 0.860000 1.340000 ( 3.355849)
39
+ set: libm:bin:buffer 0.250000 0.100000 0.350000 ( 0.859416)
40
+ set: dalli:bin 4.270000 1.380000 5.650000 ( 7.673922)
41
+ set: mclient:ascii 7.020000 1.920000 8.940000 ( 9.739894)
42
+ set: stash:bin 2.640000 1.060000 3.700000 ( 6.100208)
43
+
44
+ get: libm:ascii 0.830000 0.990000 1.820000 ( 3.912925)
45
+ get: libm:ascii:pipeline 0.780000 1.070000 1.850000 ( 4.166414)
46
+ get: libm:ascii:udp 0.680000 0.620000 1.300000 ( 2.872687)
47
+ get: libm:bin 0.690000 1.020000 1.710000 ( 3.588579)
48
+ get: libm:bin:buffer 0.690000 1.210000 1.900000 ( 3.927647)
49
+ get: dalli:bin 4.530000 1.490000 6.020000 ( 8.197772)
50
+ get: mclient:ascii 8.660000 1.870000 10.530000 ( 11.176572)
51
+ get: stash:bin 2.310000 1.000000 3.310000 ( 5.581331)
52
+
53
+ get-multi: libm:ascii 0.650000 0.560000 1.210000 ( 2.101080)
54
+ get-multi: libm:ascii:pipeline 0.750000 0.560000 1.310000 ( 2.188553)
55
+ get-multi: libm:ascii:udp 0.710000 0.470000 1.180000 ( 1.680744)
56
+ get-multi: libm:bin 0.730000 0.800000 1.530000 ( 4.046271)
57
+ get-multi: libm:bin:buffer 0.710000 0.670000 1.380000 ( 2.853617)
58
+ get-multi: dalli:bin 7.700000 2.190000 9.890000 ( 10.021851)
59
+
60
+ append: libm:ascii 0.740000 1.000000 1.740000 ( 5.609197)
61
+ append: libm:ascii:pipeline 0.250000 0.010000 0.260000 ( 0.875205)
62
+ append: libm:ascii:udp 0.570000 0.560000 1.130000 ( 4.695231)
63
+ append: libm:bin 0.540000 0.900000 1.440000 ( 4.962085)
64
+ append: libm:bin:buffer 0.560000 0.780000 1.340000 ( 2.669085)
65
+ append: dalli:bin 3.620000 1.240000 4.860000 ( 8.718248)
66
+ append: mclient:ascii 7.220000 1.750000 8.970000 ( 11.657408)
67
+
68
+ prepend: libm:ascii 0.660000 1.040000 1.700000 ( 5.461676)
69
+ prepend: libm:ascii:pipeline 0.260000 0.010000 0.270000 ( 0.760103)
70
+ prepend: libm:ascii:udp 0.670000 0.600000 1.270000 ( 4.324850)
71
+ prepend: libm:bin 0.560000 0.900000 1.460000 ( 5.801869)
72
+ prepend: libm:bin:buffer 0.530000 0.800000 1.330000 ( 3.631074)
73
+ prepend: dalli:bin 3.620000 1.240000 4.860000 ( 8.531561)
74
+ prepend: mclient:ascii 6.400000 1.590000 7.990000 ( 12.047692)
75
+
76
+ delete: libm:ascii 1.350000 0.920000 2.270000 ( 4.693438)
77
+ delete: libm:ascii:pipeline 0.320000 0.320000 0.640000 ( 0.706662)
78
+ delete: libm:ascii:udp 1.270000 0.660000 1.930000 ( 3.851781)
79
+ delete: libm:bin 1.190000 0.960000 2.150000 ( 4.456707)
80
+ delete: libm:bin:buffer 0.230000 0.250000 0.480000 ( 0.911735)
81
+ delete: dalli:bin 3.850000 1.440000 5.290000 ( 7.160706)
82
+ delete: mclient:ascii 7.270000 1.670000 8.940000 ( 9.618969)
83
+
84
+ get-missing: libm:ascii 1.430000 0.970000 2.400000 ( 4.982100)
85
+ get-missing: libm:ascii:pipeline 1.480000 1.200000 2.680000 ( 5.505560)
86
+ get-missing: libm:ascii:udp 1.340000 0.690000 2.030000 ( 3.706029)
87
+ get-missing: libm:bin 1.390000 0.960000 2.350000 ( 4.676127)
88
+ get-missing: libm:bin:buffer 1.460000 1.230000 2.690000 ( 5.048332)
89
+ get-missing: dalli:bin 3.810000 1.380000 5.190000 ( 7.874001)
90
+ get-missing: mclient:ascii 6.920000 1.600000 8.520000 ( 9.999317)
91
+
92
+ append-missing: libm:ascii 1.370000 0.990000 2.360000 ( 5.073530)
93
+ append-missing: libm:ascii:pipeline 0.330000 0.010000 0.340000 ( 0.374423)
94
+ append-missing: libm:ascii:udp 1.300000 0.690000 1.990000 ( 4.005369)
95
+ append-missing: libm:bin 1.340000 0.920000 2.260000 ( 5.339037)
96
+ append-missing: dalli:bin 4.020000 1.420000 5.440000 ( 8.193874)
97
+ append-missing: mclient:ascii 6.930000 1.630000 8.560000 ( 10.637547)
98
+
99
+ prepend-missing: libm:ascii 1.460000 0.970000 2.430000 ( 5.002199)
100
+ prepend-missing: libm:ascii:pipeline 0.240000 0.010000 0.250000 ( 0.253590)
101
+ prepend-missing: libm:ascii:udp 1.370000 0.710000 2.080000 ( 4.243274)
102
+ prepend-missing: libm:bin 1.360000 0.950000 2.310000 ( 4.946014)
103
+ prepend-missing: dalli:bin 3.910000 1.430000 5.340000 ( 7.407236)
104
+ prepend-missing: mclient:ascii 7.380000 1.730000 9.110000 ( 10.140385)
105
+
106
+ set-large: libm:ascii 0.670000 0.980000 1.650000 ( 5.181314)
107
+ set-large: libm:ascii:pipeline 0.410000 0.330000 0.740000 ( 1.757769)
108
+ set-large: libm:ascii:udp 0.590000 0.670000 1.260000 ( 3.510175)
109
+ set-large: libm:bin 0.540000 0.980000 1.520000 ( 3.878854)
110
+ set-large: libm:bin:buffer 0.350000 0.440000 0.790000 ( 2.036610)
111
+ set-large: dalli:bin 5.010000 1.670000 6.680000 ( 9.884379)
112
+ set-large: mclient:ascii 7.500000 2.130000 9.630000 ( 11.357448)
113
+ set-large: stash:bin 3.920000 1.130000 5.050000 ( 7.488534)
114
+
115
+ get-large: libm:ascii 0.760000 0.950000 1.710000 ( 4.151140)
116
+ get-large: libm:ascii:pipeline 0.820000 1.190000 2.010000 ( 4.079482)
117
+ get-large: libm:ascii:udp 0.770000 0.580000 1.350000 ( 2.763797)
118
+ get-large: libm:bin 0.640000 0.970000 1.610000 ( 3.686591)
119
+ get-large: libm:bin:buffer 0.690000 1.110000 1.800000 ( 3.974967)
120
+ get-large: dalli:bin 4.710000 1.430000 6.140000 ( 8.011834)
121
+ get-large: mclient:ascii 8.860000 1.970000 10.830000 ( 12.136812)
122
+ get-large: stash:bin 2.420000 0.970000 3.390000 ( 5.643309)
123
+
124
+ hash:murmur 0.250000 0.000000 0.250000 ( 0.250730)
125
+ hash:md5 0.670000 0.000000 0.670000 ( 0.680286)
126
+ hash:fnv1a_64 0.320000 0.000000 0.320000 ( 0.319818)
127
+ hash:fnv1a_32 0.310000 0.000000 0.310000 ( 0.328325)
128
+ hash:jenkins 0.270000 0.010000 0.280000 ( 0.270705)
129
+ hash:default 0.410000 0.000000 0.410000 ( 0.412068)
130
+ hash:crc 0.380000 0.000000 0.380000 ( 0.377563)
131
+ hash:hsieh 0.210000 0.000000 0.210000 ( 0.212948)
132
+ hash:fnv1_32 0.310000 0.000000 0.310000 ( 0.316208)
133
+ hash:fnv1_64 0.450000 0.000000 0.450000 ( 0.453148)
134
+ hash:none 0.210000 0.000000 0.210000 ( 0.213811)
data/CHANGELOG CHANGED
@@ -1,3 +1,5 @@
1
+ v1.1.1. Speed up multiget. Don't cast types on unmarshalled set.
2
+
1
3
  v1.1. TTL interface requires Fixnums.
2
4
 
3
5
  v1.0.7. Fix build on BSD (Stew Mckinney). Fix build on Rubinius (brixen).
data/Manifest CHANGED
@@ -24,8 +24,11 @@ lib/memcached/exceptions.rb
24
24
  lib/memcached/experimental.rb
25
25
  lib/memcached/memcached.rb
26
26
  lib/memcached/rails.rb
27
+ lib/rlibmemcached.bundle.dSYM/Contents/Info.plist
27
28
  test/profile/benchmark.rb
28
- test/profile/profile.rb
29
+ test/profile/c_profiler.rb
30
+ test/profile/exercise.rb
31
+ test/profile/rb_profiler.rb
29
32
  test/profile/valgrind.rb
30
33
  test/setup.rb
31
34
  test/teardown.rb
data/Rakefile CHANGED
@@ -4,8 +4,6 @@ Echoe.new("memcached") do |p|
4
4
  p.author = "Evan Weaver"
5
5
  p.project = "fauna"
6
6
  p.summary = "An interface to the libmemcached C client."
7
- p.url = "http://blog.evanweaver.com/files/doc/fauna/memcached/"
8
- p.docs_host = "blog.evanweaver.com:~/www/bax/public/files/doc/"
9
7
  p.rdoc_pattern = /README|TODO|LICENSE|CHANGELOG|BENCH|COMPAT|exceptions|experimental.rb|behaviors|rails.rb|memcached.rb/
10
8
  p.clean_pattern += ["ext/lib", "ext/include", "ext/share", "ext/libmemcached-?.??", "ext/bin", "ext/conftest.dSYM"]
11
9
  end
@@ -22,10 +20,18 @@ task :exceptions do
22
20
  end
23
21
  end
24
22
 
25
- task :valgrind do
26
- exec("valgrind --tool=memcheck --leak-check=full --show-reachable=no --num-callers=15 --track-fds=yes --workaround-gcc296-bugs=yes --max-stackframe=7304328 --dsymutil=yes --track-origins=yes ruby #{File.dirname(__FILE__)}/test/profile/valgrind.rb")
23
+ task :benchmark do
24
+ exec("ruby #{File.dirname(__FILE__)}/test/profile/benchmark.rb")
25
+ end
26
+
27
+ task :rb_profile do
28
+ exec("ruby #{File.dirname(__FILE__)}/test/profile/rb_profiler.rb")
27
29
  end
28
30
 
29
- task :profile do
30
- exec("ruby #{File.dirname(__FILE__)}/test/profile/profile.rb")
31
+ task :c_profile do
32
+ exec("ruby #{File.dirname(__FILE__)}/test/profile/c_profiler.rb")
33
+ end
34
+
35
+ task :valgrind do
36
+ exec("ruby #{File.dirname(__FILE__)}/test/profile/valgrind.rb")
31
37
  end
@@ -308,7 +308,7 @@ Please note that when <tt>:no_block => true</tt>, update methods do not raise on
308
308
  # Also accepts a <tt>marshal</tt> value, which defaults to <tt>true</tt>. Set <tt>marshal</tt> to <tt>false</tt> if you want the <tt>value</tt> to be set directly.
309
309
  #
310
310
  def set(key, value, ttl=@default_ttl, marshal=true, flags=FLAGS)
311
- value = marshal ? Marshal.dump(value) : value.to_s
311
+ value = marshal ? Marshal.dump(value) : value
312
312
  begin
313
313
  check_return_code(
314
314
  Lib.memcached_set(@struct, key, value, ttl, flags),
@@ -325,7 +325,7 @@ Please note that when <tt>:no_block => true</tt>, update methods do not raise on
325
325
 
326
326
  # Add a key/value pair. Raises <b>Memcached::NotStored</b> if the key already exists on the server. The parameters are the same as <tt>set</tt>.
327
327
  def add(key, value, ttl=@default_ttl, marshal=true, flags=FLAGS)
328
- value = marshal ? Marshal.dump(value) : value.to_s
328
+ value = marshal ? Marshal.dump(value) : value
329
329
  begin
330
330
  check_return_code(
331
331
  Lib.memcached_add(@struct, key, value, ttl, flags),
@@ -374,7 +374,7 @@ Please note that when <tt>:no_block => true</tt>, update methods do not raise on
374
374
 
375
375
  # Replace a key/value pair. Raises <b>Memcached::NotFound</b> if the key does not exist on the server. The parameters are the same as <tt>set</tt>.
376
376
  def replace(key, value, ttl=@default_ttl, marshal=true, flags=FLAGS)
377
- value = marshal ? Marshal.dump(value) : value.to_s
377
+ value = marshal ? Marshal.dump(value) : value
378
378
  begin
379
379
  check_return_code(
380
380
  Lib.memcached_replace(@struct, key, value, ttl, flags),
@@ -504,14 +504,14 @@ Please note that when <tt>:no_block => true</tt>, update methods do not raise on
504
504
  check_return_code(ret, keys)
505
505
 
506
506
  hash = {}
507
- keys.each do
508
- value, key, flags, ret = Lib.memcached_fetch_rvalue(@struct)
509
- break if ret == Lib::MEMCACHED_END
510
- if ret != Lib::MEMCACHED_NOTFOUND
511
- check_return_code(ret, key)
512
- # Assign the value
507
+ value, key, flags, ret = Lib.memcached_fetch_rvalue(@struct)
508
+ while ret != 21 do # Lib::MEMCACHED_END
509
+ if ret == 0 # Lib::MEMCACHED_SUCCESS
513
510
  hash[key] = (marshal ? Marshal.load(value) : value)
511
+ elsif ret != 16 # Lib::MEMCACHED_NOTFOUND
512
+ check_return_code(ret, key)
514
513
  end
514
+ value, key, flags, ret = Lib.memcached_fetch_rvalue(@struct)
515
515
  end
516
516
  hash
517
517
  else
@@ -591,28 +591,34 @@ Please note that when <tt>:no_block => true</tt>, update methods do not raise on
591
591
 
592
592
  # Checks the return code from Rlibmemcached against the exception list. Raises the corresponding exception if the return code is not Memcached::Success or Memcached::ActionQueued. Accepts an integer return code and an optional key, for exception messages.
593
593
  def check_return_code(ret, key = nil) #:doc:
594
- if ret == 0 # Memcached::Success
595
- elsif ret == Lib::MEMCACHED_BUFFERED # Memcached::ActionQueued
596
- elsif ret == Lib::MEMCACHED_NOTFOUND and @not_found
597
- raise @not_found
598
- elsif ret == Lib::MEMCACHED_NOTSTORED and @not_stored
599
- raise @not_stored
594
+ if ret == 0 # Lib::MEMCACHED_SUCCESS
595
+ elsif ret == 32 # Lib::MEMCACHED_BUFFERED
596
+ elsif ret == 16
597
+ raise @not_found # Lib::MEMCACHED_NOTFOUND
598
+ elsif ret == 14
599
+ raise @not_stored # Lib::MEMCACHED_NOTSTORED
600
600
  else
601
- message = "Key #{inspect_keys(key, (detect_failure if ret == Lib::MEMCACHED_SERVER_MARKED_DEAD)).inspect}"
602
- if key.is_a?(String)
603
- if ret == Lib::MEMCACHED_ERRNO
604
- if (server = Lib.memcached_server_by_key(@struct, key)).is_a?(Array)
605
- errno = server.first.cached_errno
606
- message = "Errno #{errno}: #{ERRNO_HASH[errno].inspect}. #{message}"
607
- end
608
- elsif ret == Lib::MEMCACHED_SERVER_ERROR
609
- if (server = Lib.memcached_server_by_key(@struct, key)).is_a?(Array)
610
- message = "\"#{server.first.cached_server_error}\". #{message}."
611
- end
601
+ reraise(key, ret)
602
+ end
603
+ rescue TypeError
604
+ reraise(key, ret)
605
+ end
606
+
607
+ def reraise(key, ret)
608
+ message = "Key #{inspect_keys(key, (detect_failure if ret == Lib::MEMCACHED_SERVER_MARKED_DEAD)).inspect}"
609
+ if key.is_a?(String)
610
+ if ret == Lib::MEMCACHED_ERRNO
611
+ if (server = Lib.memcached_server_by_key(@struct, key)).is_a?(Array)
612
+ errno = server.first.cached_errno
613
+ message = "Errno #{errno}: #{ERRNO_HASH[errno].inspect}. #{message}"
614
+ end
615
+ elsif ret == Lib::MEMCACHED_SERVER_ERROR
616
+ if (server = Lib.memcached_server_by_key(@struct, key)).is_a?(Array)
617
+ message = "\"#{server.first.cached_server_error}\". #{message}."
612
618
  end
613
619
  end
614
- raise EXCEPTIONS[ret], message
615
620
  end
621
+ raise EXCEPTIONS[ret], message
616
622
  end
617
623
 
618
624
  # Turn an array of keys into a hash of keys to servers.
@@ -0,0 +1,20 @@
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
3
+ <plist version="1.0">
4
+ <dict>
5
+ <key>CFBundleDevelopmentRegion</key>
6
+ <string>English</string>
7
+ <key>CFBundleIdentifier</key>
8
+ <string>com.apple.xcode.dsym.rlibmemcached.bundle</string>
9
+ <key>CFBundleInfoDictionaryVersion</key>
10
+ <string>6.0</string>
11
+ <key>CFBundlePackageType</key>
12
+ <string>dSYM</string>
13
+ <key>CFBundleSignature</key>
14
+ <string>????</string>
15
+ <key>CFBundleShortVersionString</key>
16
+ <string>1.0</string>
17
+ <key>CFBundleVersion</key>
18
+ <string>1</string>
19
+ </dict>
20
+ </plist>
@@ -2,18 +2,18 @@
2
2
 
3
3
  Gem::Specification.new do |s|
4
4
  s.name = %q{memcached}
5
- s.version = "1.1"
5
+ s.version = "1.1.1"
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
9
  s.cert_chain = ["/Users/eweaver/p/configuration/gem_certificates/evan_weaver-original-public_cert.pem"]
10
- s.date = %q{2011-02-22}
10
+ s.date = %q{2011-02-23}
11
11
  s.description = %q{An interface to the libmemcached C client.}
12
12
  s.email = %q{}
13
13
  s.extensions = ["ext/extconf.rb"]
14
14
  s.extra_rdoc_files = ["BENCHMARKS", "CHANGELOG", "LICENSE", "README", "TODO", "lib/memcached.rb", "lib/memcached/behaviors.rb", "lib/memcached/exceptions.rb", "lib/memcached/experimental.rb", "lib/memcached/memcached.rb", "lib/memcached/rails.rb"]
15
- s.files = ["BENCHMARKS", "CHANGELOG", "LICENSE", "Manifest", "README", "Rakefile", "TODO", "ext/extconf-make.rb", "ext/extconf.rb", "ext/libmemcached-0.32.tar.gz", "ext/libmemcached-2.patch", "ext/libmemcached-3.patch", "ext/libmemcached-4.patch", "ext/libmemcached-5.patch", "ext/libmemcached-6.patch", "ext/libmemcached.patch", "ext/rlibmemcached.i", "ext/rlibmemcached_wrap.c", "ext/sasl.patch", "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/profile.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"]
16
- s.homepage = %q{http://blog.evanweaver.com/files/doc/fauna/memcached/}
15
+ s.files = ["BENCHMARKS", "CHANGELOG", "LICENSE", "Manifest", "README", "Rakefile", "TODO", "ext/extconf-make.rb", "ext/extconf.rb", "ext/libmemcached-0.32.tar.gz", "ext/libmemcached-2.patch", "ext/libmemcached-3.patch", "ext/libmemcached-4.patch", "ext/libmemcached-5.patch", "ext/libmemcached-6.patch", "ext/libmemcached.patch", "ext/rlibmemcached.i", "ext/rlibmemcached_wrap.c", "ext/sasl.patch", "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", "lib/rlibmemcached.bundle.dSYM/Contents/Info.plist", "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"]
16
+ s.homepage = %q{http://fauna.github.com/fauna/memcached/}
17
17
  s.rdoc_options = ["--line-numbers", "--inline-source", "--title", "Memcached", "--main", "README"]
18
18
  s.require_paths = ["lib", "ext"]
19
19
  s.rubyforge_project = %q{fauna}
@@ -120,8 +120,12 @@ class Bench
120
120
  end
121
121
 
122
122
  def benchmark_clients(test_name, populate_keys = true)
123
+ return if ENV["TEST"] and !test_name.include?(ENV["TEST"])
124
+
123
125
  @clients.keys.sort.each do |client_name|
126
+ next if ENV["CLIENT"] and !client_name.include?(ENV["CLIENT"])
124
127
  next if client_name == "stash" and test_name == "set-large" # Don't let stash break the world
128
+
125
129
  client = @clients[client_name]
126
130
  begin
127
131
  if populate_keys
@@ -0,0 +1,14 @@
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")
@@ -0,0 +1,150 @@
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
+ Struct
12
+
13
+ class Worker
14
+ def initialize(method_name, iterations, with_memory = 'false')
15
+ @method = method_name || 'mixed'
16
+ @i = (iterations || 10000).to_i
17
+ @with_memory = with_memory
18
+
19
+ puts "*** Running #{@method.inspect} test for #{@i} loops. ***"
20
+
21
+ @key1 = "key1--------------------------------"
22
+ @key2 = "key2--------------------------------"
23
+ @key3 = "key3--------------------------------"
24
+
25
+ @value = OpenStruct.new(
26
+ :a => 1, :b => 2, "array" => [1, 2, 3], "hash" => {:badger => 1}
27
+ )
28
+ @marshalled = Marshal.dump(@value)
29
+
30
+ @opts = [
31
+ ['localhost:43042', 'localhost:43043', 'localhost:43044'],
32
+ {
33
+ :buffer_requests => true,
34
+ :no_block => true,
35
+ :noreply => true,
36
+ :namespace => "namespace"
37
+ }
38
+ ]
39
+ @cache = Memcached::Rails.new(*@opts)
40
+
41
+ @cache.set @key1, @value
42
+ end
43
+
44
+ def work
45
+ case @method
46
+ when "set"
47
+ @i.times do
48
+ @cache.set @key1, @value
49
+ end
50
+ when "get"
51
+ @i.times do
52
+ @cache.get @key1
53
+ end
54
+ when "delete"
55
+ @i.times do
56
+ @cache.set @key1, @value
57
+ @cache.delete @key1
58
+ end
59
+ when "delete-miss"
60
+ @i.times do
61
+ @cache.delete @key1
62
+ end
63
+ when "get-miss"
64
+ @i.times do
65
+ @cache.get @key2
66
+ end
67
+ when "get-increasing"
68
+ one_k = "x"*1024
69
+ @i.times do |i|
70
+ @cache.set @key1, one_k*(i+1), 0, false
71
+ @cache.get @key1, false
72
+ end
73
+ when "get-miss-increasing"
74
+ @i.times do |i|
75
+ @cache.delete @key2
76
+ @cache.get @key2
77
+ end
78
+ when "add"
79
+ @i.times do
80
+ @cache.delete @key1
81
+ @cache.add @key1, @value
82
+ end
83
+ when "add-present"
84
+ @cache.set @key1, @value
85
+ @i.times do
86
+ @cache.add @key1, @value
87
+ end
88
+ when "mixed"
89
+ @i.times do
90
+ @cache.set @key1, @value
91
+ @cache.set @key2, @value
92
+ @cache.get @key1
93
+ @cache.get @key3
94
+ @cache.get [@key1, @key2, @key3]
95
+ @cache.prepend @key1, @marshalled
96
+ @cache.prepend @key2, @marshalled
97
+ @cache.delete @key1
98
+ @cache.delete @key2
99
+ end
100
+ when "stats"
101
+ @i.times do
102
+ @cache.stats
103
+ end
104
+ when "multiget"
105
+ @i.times do
106
+ @cache.get([@key1, @key2])
107
+ end
108
+ when "clone"
109
+ @i.times do
110
+ cache = @cache.clone
111
+ end
112
+ when "reset"
113
+ @i.times do
114
+ @cache.reset
115
+ end
116
+ when "servers"
117
+ @i.times do
118
+ @cache.servers
119
+ end
120
+ when "server_by_key"
121
+ @i.times do
122
+ @cache.server_by_key(@key1)
123
+ end
124
+ else
125
+ raise "No such method"
126
+ end
127
+
128
+ if @with_memory == "true"
129
+ puts "*** Garbage collect. ***"
130
+ 10.times do
131
+ GC.start
132
+ sleep 0.1
133
+ end
134
+
135
+ sts, server_sts, clients = 0, 0, 0
136
+ ObjectSpace.each_object(Memcached) { clients += 1 }
137
+ ObjectSpace.each_object(Rlibmemcached::MemcachedSt) { sts += 1 }
138
+ ObjectSpace.each_object(Rlibmemcached::MemcachedServerSt) { server_sts += 1 }
139
+ puts "*** Structs: #{sts} ***"
140
+ puts "*** Server structs: #{server_sts} ***"
141
+ puts "*** Clients: #{clients} ***"
142
+
143
+ begin;
144
+ require 'memory'
145
+ Process.memory.each { |key, value| puts "#{key}: #{value/1024.0}M" }
146
+ rescue LoadError
147
+ end
148
+ end
149
+ end
150
+ end
@@ -0,0 +1,21 @@
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,149 +1,3 @@
1
-
2
1
  require "#{File.dirname(__FILE__)}/../setup"
3
2
 
4
- $LOAD_PATH << "#{File.dirname(__FILE__)}/../../lib/"
5
- require 'memcached'
6
- require 'rubygems'
7
-
8
- GC.copy_on_write_friendly = true if GC.respond_to?("copy_on_write_friendly=")
9
-
10
- class Worker
11
- def initialize(method_name, iterations)
12
- @method = method_name || 'mixed'
13
- @i = (iterations || 10000).to_i
14
-
15
- puts "*** Running #{@method.inspect} test for #{@i} loops. ***"
16
-
17
- @key1 = "key1-"*8
18
- @key2 = "key2-"*8
19
-
20
- @value = []
21
- @marshalled = Marshal.dump(@value)
22
-
23
- @opts = [
24
- ["#{UNIX_SOCKET_NAME}0", "#{UNIX_SOCKET_NAME}1"],
25
- {
26
- :buffer_requests => false,
27
- :no_block => false,
28
- :namespace => "namespace"
29
- }
30
- ]
31
- @cache = Memcached.new(*@opts)
32
-
33
- @cache.set @key1, @value
34
- end
35
-
36
- def work
37
- case @method
38
- when "set"
39
- @i.times do
40
- @cache.set @key1, @value
41
- end
42
- when "get"
43
- @i.times do
44
- @cache.get @key1
45
- end
46
- when "delete"
47
- @i.times do
48
- @cache.set @key1, @value
49
- @cache.delete @key1
50
- end
51
- when "delete-miss"
52
- @i.times do
53
- @cache.delete @key1
54
- end
55
- when "get-miss"
56
- @i.times do
57
- begin
58
- @cache.get @key2
59
- rescue Memcached::NotFound
60
- end
61
- end
62
- when "get-increasing"
63
- one_k = "x"*1024
64
- @i.times do |i|
65
- @cache.set @key1, one_k*(i+1), 0, false
66
- @cache.get @key1, false
67
- end
68
- when "get-miss-increasing"
69
- @i.times do |i|
70
- @cache.delete @key2 rescue nil
71
- begin
72
- @cache.get @key2
73
- rescue Memcached::NotFound
74
- end
75
- end
76
- when "add"
77
- @i.times do
78
- begin
79
- @cache.delete @key1
80
- rescue
81
- end
82
- @cache.add @key1, @value
83
- end
84
- when "add-present"
85
- @cache.set @key1, @value
86
- @i.times do
87
- begin
88
- @cache.add @key1, @value
89
- rescue Memcached::NotStored
90
- end
91
- end
92
- when "mixed"
93
- @i.times do
94
- @cache.set @key1, @value
95
- @cache.get @key1
96
- end
97
- when "stats"
98
- @i.times do
99
- @cache.stats
100
- end
101
- when "multiget"
102
- @i.times do
103
- @cache.get([@key1, @key2])
104
- end
105
- when "clone"
106
- @i.times do
107
- cache = @cache.clone
108
- end
109
- when "reset"
110
- @i.times do
111
- @cache.reset
112
- end
113
- when "servers"
114
- @i.times do
115
- @cache.servers
116
- end
117
- when "server_by_key"
118
- @i.times do
119
- @cache.server_by_key(@key1)
120
- end
121
- else
122
- raise "No such method"
123
- end
124
-
125
- puts "*** Garbage collect. ***"
126
- 10.times do
127
- GC.start
128
- sleep 0.1
129
- end
130
-
131
- sts, server_sts, clients = 0, 0, 0
132
- ObjectSpace.each_object(Memcached) { clients += 1 }
133
- ObjectSpace.each_object(Rlibmemcached::MemcachedSt) { sts += 1 }
134
- ObjectSpace.each_object(Rlibmemcached::MemcachedServerSt) { server_sts += 1 }
135
- puts "*** Structs: #{sts} ***"
136
- puts "*** Server structs: #{server_sts} ***"
137
- puts "*** Clients: #{clients} ***"
138
- end
139
- end
140
-
141
- Worker.new(ENV['METHOD'], ENV['LOOPS']).work
142
-
143
- begin
144
- require 'memory'
145
- Process.memory.each do |key, value|
146
- puts "#{key}: #{value/1024.0}M"
147
- end
148
- rescue LoadError
149
- end
3
+ exec("valgrind --tool=memcheck --leak-check=full --show-reachable=no --num-callers=15 --track-fds=yes --workaround-gcc296-bugs=yes --max-stackframe=7304328 --dsymutil=yes --track-origins=yes ruby -r#{File.dirname(__FILE__)}/exercise.rb -e \"Worker.new('mixed', 10000, 'true').work\"")
@@ -177,9 +177,8 @@ class MemcachedTest < Test::Unit::TestCase
177
177
  end
178
178
 
179
179
  def test_initialize_with_backtraces
180
- cache = Memcached.new @servers,
181
- :show_backtraces => true
182
- cache.delete key rescue
180
+ cache = Memcached.new @servers, :show_backtraces => true
181
+ cache.delete key rescue nil
183
182
  begin
184
183
  cache.get key
185
184
  rescue Memcached::NotFound => e
@@ -404,9 +403,21 @@ class MemcachedTest < Test::Unit::TestCase
404
403
  assert_equal @marshalled_value, result
405
404
  end
406
405
 
406
+ def test_set_unmarshalled_and_get_unmarshalled
407
+ @cache.set key, @marshalled_value, 0, false
408
+ result = @cache.get key, false
409
+ assert_equal @marshalled_value, result
410
+ end
411
+
412
+ def test_set_unmarshalled_error
413
+ assert_raises(TypeError) do
414
+ @cache.set key, @value, 0, false
415
+ end
416
+ end
417
+
407
418
  def test_get_multi_unmarshalled
408
- @cache.set "#{key}_1", 1, 0, false
409
- @cache.set "#{key}_2", 2, 0, false
419
+ @cache.set "#{key}_1", "1", 0, false
420
+ @cache.set "#{key}_2", "2", 0, false
410
421
  assert_equal(
411
422
  {"#{key}_1" => "1", "#{key}_2" => "2"},
412
423
  @cache.get(["#{key}_1", "#{key}_2"], false)
@@ -415,7 +426,7 @@ class MemcachedTest < Test::Unit::TestCase
415
426
 
416
427
  def test_get_multi_mixed_marshalling
417
428
  @cache.set "#{key}_1", 1
418
- @cache.set "#{key}_2", 2, 0, false
429
+ @cache.set "#{key}_2", "2", 0, false
419
430
  assert_nothing_raised do
420
431
  @cache.get(["#{key}_1", "#{key}_2"], false)
421
432
  end
@@ -429,12 +440,15 @@ class MemcachedTest < Test::Unit::TestCase
429
440
  cache.flush
430
441
  20.times { |i| cache.set "#{key}#{i}", @value }
431
442
 
432
- cache, hits = Memcached.new(@servers.first), 0
433
- 20.times do |i|
434
- begin
435
- cache.get "#{key}#{i}"
436
- hits += 1
437
- rescue Memcached::NotFound
443
+ cache, hits = Memcached.new(@servers.first), 4
444
+ while hits == 4 do
445
+ hits = 0
446
+ 20.times do |i|
447
+ begin
448
+ cache.get "#{key}#{i}"
449
+ hits += 1
450
+ rescue Memcached::NotFound
451
+ end
438
452
  end
439
453
  end
440
454
 
@@ -563,12 +577,12 @@ class MemcachedTest < Test::Unit::TestCase
563
577
  # Increment and decrement
564
578
 
565
579
  def test_increment
566
- @cache.set key, 10, 0, false
580
+ @cache.set key, "10", 0, false
567
581
  assert_equal 11, @cache.increment(key)
568
582
  end
569
583
 
570
584
  def test_increment_offset
571
- @cache.set key, 10, 0, false
585
+ @cache.set key, "10", 0, false
572
586
  assert_equal 15, @cache.increment(key, 5)
573
587
  end
574
588
 
@@ -580,12 +594,12 @@ class MemcachedTest < Test::Unit::TestCase
580
594
  end
581
595
 
582
596
  def test_decrement
583
- @cache.set key, 10, 0, false
597
+ @cache.set key, "10", 0, false
584
598
  assert_equal 9, @cache.decrement(key)
585
599
  end
586
600
 
587
601
  def test_decrement_offset
588
- @cache.set key, 10, 0, false
602
+ @cache.set key, "10", 0, false
589
603
  assert_equal 5, @cache.decrement(key, 5)
590
604
  end
591
605
 
metadata CHANGED
@@ -1,12 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: memcached
3
3
  version: !ruby/object:Gem::Version
4
- hash: 13
4
+ hash: 17
5
5
  prerelease: false
6
6
  segments:
7
7
  - 1
8
8
  - 1
9
- version: "1.1"
9
+ - 1
10
+ version: 1.1.1
10
11
  platform: ruby
11
12
  authors:
12
13
  - Evan Weaver
@@ -35,7 +36,7 @@ cert_chain:
35
36
  yZ0=
36
37
  -----END CERTIFICATE-----
37
38
 
38
- date: 2011-02-22 00:00:00 -08:00
39
+ date: 2011-02-23 00:00:00 -08:00
39
40
  default_executable:
40
41
  dependencies: []
41
42
 
@@ -84,8 +85,11 @@ files:
84
85
  - lib/memcached/experimental.rb
85
86
  - lib/memcached/memcached.rb
86
87
  - lib/memcached/rails.rb
88
+ - lib/rlibmemcached.bundle.dSYM/Contents/Info.plist
87
89
  - test/profile/benchmark.rb
88
- - test/profile/profile.rb
90
+ - test/profile/c_profiler.rb
91
+ - test/profile/exercise.rb
92
+ - test/profile/rb_profiler.rb
89
93
  - test/profile/valgrind.rb
90
94
  - test/setup.rb
91
95
  - test/teardown.rb
@@ -96,7 +100,7 @@ files:
96
100
  - test/unit/rails_test.rb
97
101
  - memcached.gemspec
98
102
  has_rdoc: true
99
- homepage: http://blog.evanweaver.com/files/doc/fauna/memcached/
103
+ homepage: http://fauna.github.com/fauna/memcached/
100
104
  licenses: []
101
105
 
102
106
  post_install_message:
metadata.gz.sig CHANGED
Binary file
@@ -1,14 +0,0 @@
1
-
2
- require "#{File.dirname(__FILE__)}/../setup"
3
-
4
- $LOAD_PATH << "#{File.dirname(__FILE__)}/../../lib/"
5
- require 'rubygems'
6
- require 'memcached'
7
- require 'ruby-prof'
8
-
9
- result = RubyProf.profile do
10
- load "#{HERE}/profile/valgrind.rb"
11
- end
12
-
13
- printer = RubyProf::GraphPrinter.new(result)
14
- printer.print(STDOUT, 0)