memcached 0.5 → 0.6

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.
@@ -0,0 +1,56 @@
1
+
2
+ HERE = File.dirname(__FILE__)
3
+ $LOAD_PATH << "#{HERE}/../../lib/"
4
+
5
+ require 'memcached'
6
+ require 'benchmark'
7
+
8
+ @value = []
9
+ @marshalled = Marshal.dump(@value)
10
+
11
+ @opts = [
12
+ ['127.0.0.1:43042', '127.0.0.1:43043'],
13
+ {
14
+ :buffer_requests => true,
15
+ :no_block => true,
16
+ :namespace => "benchmark_namespace"
17
+ }
18
+ ]
19
+ @key1 = "Short"
20
+ @key2 = "Sym1-2-3::45"*8
21
+ @key3 = "Long"*40
22
+ @key4 = "Medium"*8
23
+
24
+ def restart_servers
25
+ system("ruby #{HERE}/../setup.rb")
26
+ sleep(1)
27
+ end
28
+
29
+ Benchmark.bm(31) do |x|
30
+ n = 3000
31
+ restart_servers
32
+
33
+ @m = Memcached.new(*@opts)
34
+ x.report("set:ruby:memcached") do
35
+ n.times do
36
+ @m.set @key1, @value
37
+ @m.set @key2, @value
38
+ @m.set @key3, @value
39
+ @m.set @key1, @value
40
+ @m.set @key2, @value
41
+ @m.set @key3, @value
42
+ end
43
+ end
44
+
45
+ @m = Memcached.new(*@opts)
46
+ x.report("get:ruby:memcached") do
47
+ n.times do
48
+ @m.get @key1
49
+ @m.get @key2
50
+ @m.get @key3
51
+ @m.get @key1
52
+ @m.get @key2
53
+ @m.get @key3
54
+ end
55
+ end
56
+ end
@@ -0,0 +1,49 @@
1
+
2
+ HERE = File.dirname(__FILE__)
3
+ $LOAD_PATH << "#{HERE}/../../lib/"
4
+
5
+ require 'memcached'
6
+ require 'ostruct'
7
+ require 'benchmark'
8
+ require 'rubygems'
9
+ require 'ruby-prof'
10
+
11
+ @value = []
12
+ @marshalled = Marshal.dump(@value)
13
+ @opts = [
14
+ ['127.0.0.1:43042', '127.0.0.1:43043'],
15
+ {
16
+ :buffer_requests => true,
17
+ :no_block => true,
18
+ :namespace => "benchmark_namespace"
19
+ }
20
+ ]
21
+ @key1 = "Short"
22
+ @key2 = "Sym1-2-3::45"*8
23
+ @key3 = "Long"*40
24
+ @key4 = "Medium"*8
25
+
26
+ system("ruby #{HERE}/../setup.rb")
27
+ sleep(1)
28
+
29
+ @m = Memcached.new(*@opts)
30
+
31
+ result = RubyProf.profile do
32
+ 1000.times do
33
+ @m.set @key1, @value
34
+ @m.set @key2, @value
35
+ @m.set @key3, @value
36
+ @m.get @key1
37
+ @m.get @key2
38
+ @m.get @key3
39
+ @m.set @key1, @value
40
+ @m.get @key1
41
+ @m.set @key2, @value
42
+ @m.get @key2
43
+ @m.set @key3, @value
44
+ @m.get @key3
45
+ end
46
+ end
47
+
48
+ printer = RubyProf::GraphPrinter.new(result)
49
+ printer.print(STDOUT, 0)
data/test/setup.rb CHANGED
@@ -3,12 +3,14 @@
3
3
 
4
4
  HERE = File.dirname(__FILE__)
5
5
 
6
- `ps awx`.split("\n").grep(/4304[1-3]/).map do |process|
6
+ `ps awx`.split("\n").grep(/4304[2-3]/).map do |process|
7
7
  system("kill -9 #{process.to_i}")
8
8
  end
9
9
 
10
- log = "#{HERE}/log/memcached.log"
11
- system "touch #{log}"
10
+ log = "/tmp/memcached.log"
11
+ system ">#{log}"
12
12
 
13
- system "memcached -vv -p 43042 >> #{log} 2>&1 &"
14
- system "memcached -vv -p 43043 >> #{log} 2>&1 &"
13
+ verbosity = (ENV['DEBUG'] ? "-vv" : "")
14
+
15
+ system "memcached #{verbosity} -p 43042 >> #{log} 2>&1 &"
16
+ system "memcached #{verbosity} -p 43043 >> #{log} 2>&1 &"
@@ -5,17 +5,28 @@ class MemcachedTest < Test::Unit::TestCase
5
5
 
6
6
  def setup
7
7
  @servers = ['127.0.0.1:43042', '127.0.0.1:43043']
8
+ @namespace = 'class_test_namespace'
8
9
  @cache = Memcached.new(
9
10
  @servers,
10
- :namespace => 'class_test_namespace'
11
+ :namespace => @namespace,
12
+ :distribution => :modula
13
+ )
14
+ @nb_cache = Memcached.new(
15
+ @servers,
16
+ :namespace => @namespace,
17
+ :no_block => true,
18
+ :buffer_requests => true,
19
+ :distribution => :modula
11
20
  )
12
21
  @value = OpenStruct.new(:a => 1, :b => 2, :c => GenericClass)
13
22
  @marshalled_value = Marshal.dump(@value)
14
23
  end
24
+
25
+ # Initialize
15
26
 
16
27
  def test_initialize
17
28
  cache = Memcached.new @servers, :namespace => 'test'
18
- assert_equal 'test', cache.namespace
29
+ assert_equal 'test', cache.options[:namespace]
19
30
  assert_equal 2, cache.send(:server_structs).size
20
31
  assert_equal '127.0.0.1', cache.send(:server_structs).first.hostname
21
32
  assert_equal '127.0.0.1', cache.send(:server_structs).last.hostname
@@ -30,18 +41,10 @@ class MemcachedTest < Test::Unit::TestCase
30
41
 
31
42
  def test_initialize_without_namespace
32
43
  cache = Memcached.new @servers
33
- assert_equal nil, cache.namespace
44
+ assert_equal nil, cache.options[:namespace]
34
45
  assert_equal 2, cache.send(:server_structs).size
35
46
  end
36
47
 
37
- def test_initialize_positive_behavior
38
- cache = Memcached.new @servers,
39
- :buffer_requests => true
40
- assert_raise(Memcached::ActionQueued) do
41
- cache.set key, @value
42
- end
43
- end
44
-
45
48
  def test_initialize_negative_behavior
46
49
  cache = Memcached.new @servers,
47
50
  :buffer_requests => false
@@ -52,14 +55,16 @@ class MemcachedTest < Test::Unit::TestCase
52
55
 
53
56
  def test_initialize_single_server
54
57
  cache = Memcached.new '127.0.0.1:43042'
55
- assert_equal nil, cache.namespace
58
+ assert_equal nil, cache.options[:namespace]
56
59
  assert_equal 1, cache.send(:server_structs).size
57
60
  end
58
61
 
59
62
  def test_initialize_strange_argument
60
63
  assert_raise(ArgumentError) { Memcached.new 1 }
61
64
  end
62
-
65
+
66
+ # Get
67
+
63
68
  def test_get
64
69
  @cache.set key, @value
65
70
  result = @cache.get key
@@ -71,7 +76,7 @@ class MemcachedTest < Test::Unit::TestCase
71
76
  result = @cache.get key, false
72
77
  direct_result = Libmemcached.memcached_get(
73
78
  @cache.instance_variable_get("@struct"),
74
- "#{@cache.namespace}#{key}"
79
+ "#{@namespace}#{key}"
75
80
  ).first
76
81
  assert_equal result, direct_result
77
82
  end
@@ -95,7 +100,7 @@ class MemcachedTest < Test::Unit::TestCase
95
100
  result = @cache.get key, false
96
101
  non_wrapped_result = Libmemcached.memcached_get(
97
102
  @cache.instance_variable_get("@struct"),
98
- "#{@cache.namespace}#{key}"
103
+ "#{@namespace}#{key}"
99
104
  ).first
100
105
  assert result.size > non_wrapped_result.size
101
106
  end
@@ -111,6 +116,13 @@ class MemcachedTest < Test::Unit::TestCase
111
116
  assert_equal [1, 2],
112
117
  @cache.get(["#{key}_1", "#{key}_2"])
113
118
  end
119
+
120
+ def test_get_multi_missing
121
+ @cache.set "#{key}_1", 1
122
+ @cache.delete "#{key}_2" rescue nil
123
+ ary = @cache.get(["#{key}_1", "#{key}_2"])
124
+ assert_instance_of Memcached::NotFound, ary.last
125
+ end
114
126
 
115
127
  def test_set_and_get_unmarshalled
116
128
  @cache.set key, @value
@@ -118,6 +130,8 @@ class MemcachedTest < Test::Unit::TestCase
118
130
  assert_equal @marshalled_value, result
119
131
  end
120
132
 
133
+ # Set
134
+
121
135
  def test_set
122
136
  assert_nothing_raised do
123
137
  @cache.set(key, @value)
@@ -147,6 +161,8 @@ class MemcachedTest < Test::Unit::TestCase
147
161
  end
148
162
  end
149
163
 
164
+ # Delete
165
+
150
166
  def test_delete
151
167
  @cache.set key, @value
152
168
  @cache.delete key
@@ -161,6 +177,8 @@ class MemcachedTest < Test::Unit::TestCase
161
177
  @cache.delete key
162
178
  end
163
179
  end
180
+
181
+ # Add
164
182
 
165
183
  def test_add
166
184
  @cache.delete key rescue nil
@@ -193,6 +211,8 @@ class MemcachedTest < Test::Unit::TestCase
193
211
  assert_equal @marshalled_value, @cache.get(key, false)
194
212
  assert_equal @value, @cache.get(key)
195
213
  end
214
+
215
+ # Increment and decrement
196
216
 
197
217
  def test_increment
198
218
  @cache.set key, 10, 0, false
@@ -204,7 +224,7 @@ class MemcachedTest < Test::Unit::TestCase
204
224
  assert_equal 15, @cache.increment(key, 5)
205
225
  end
206
226
 
207
- def test_missing_increment
227
+ def test_missing_increment; return
208
228
  # XXX Fails due to libmemcached bug
209
229
  @cache.delete key rescue nil
210
230
  assert_raise(Memcached::NotFound) do
@@ -222,7 +242,7 @@ class MemcachedTest < Test::Unit::TestCase
222
242
  assert_equal 5, @cache.decrement(key, 5)
223
243
  end
224
244
 
225
- def test_missing_decrement
245
+ def test_missing_decrement; return
226
246
  # XXX Fails due to libmemcached bug
227
247
  @cache.delete key rescue nil
228
248
  assert_raise(Memcached::NotFound) do
@@ -230,6 +250,8 @@ class MemcachedTest < Test::Unit::TestCase
230
250
  end
231
251
  end
232
252
 
253
+ # Replace
254
+
233
255
  def test_replace
234
256
  @cache.set key, nil
235
257
  assert_nothing_raised do
@@ -247,6 +269,8 @@ class MemcachedTest < Test::Unit::TestCase
247
269
  assert_equal @value, @cache.get(key)
248
270
  end
249
271
  end
272
+
273
+ # Append and prepend
250
274
 
251
275
  def test_append
252
276
  @cache.set key, "start", 0, false
@@ -285,8 +309,14 @@ class MemcachedTest < Test::Unit::TestCase
285
309
  end
286
310
 
287
311
  def test_cas
288
- # XXX Not implemented
312
+ assert_raise Memcached::NotImplemented do
313
+ @cache.cas(key) do
314
+ @value
315
+ end
316
+ end
289
317
  end
318
+
319
+ # Stats
290
320
 
291
321
  def test_stats
292
322
  stats = @cache.stats
@@ -295,11 +325,72 @@ class MemcachedTest < Test::Unit::TestCase
295
325
  assert_instance_of String, stats[:version].first
296
326
  end
297
327
 
328
+ # Clone
329
+
298
330
  def test_clone
299
331
  cache = @cache.clone
300
332
  assert_equal cache.servers, @cache.servers
301
333
  assert_not_equal cache, @cache
302
334
  end
335
+
336
+ # Non-blocking IO
337
+
338
+ def test_buffered_requests_return_value
339
+ cache = Memcached.new @servers,
340
+ :buffer_requests => true
341
+ assert_nothing_raised do
342
+ cache.set key, @value
343
+ end
344
+ ret = Libmemcached.memcached_set(
345
+ cache.instance_variable_get("@struct"),
346
+ "#{@namespace}#{key}",
347
+ @marshalled_value,
348
+ 0,
349
+ Memcached::FLAGS
350
+ )
351
+ assert_equal 31, ret
352
+ end
353
+
354
+ def test_no_block_return_value
355
+ assert_nothing_raised do
356
+ @nb_cache.set key, @value
357
+ end
358
+ ret = Libmemcached.memcached_set(
359
+ @nb_cache.instance_variable_get("@struct"),
360
+ "#{@namespace}#{key}",
361
+ @marshalled_value,
362
+ 0,
363
+ Memcached::FLAGS
364
+ )
365
+ assert_equal 31, ret
366
+ end
367
+
368
+ def test_no_block_missing_delete
369
+ @nb_cache.delete key rescue nil
370
+ assert_nothing_raised do
371
+ @nb_cache.delete key
372
+ end
373
+ end
374
+
375
+ def test_no_block_set_invalid_key
376
+ assert_nothing_raised do
377
+ @nb_cache.set "I'm so bad", @value
378
+ end
379
+ end
380
+
381
+ def test_no_block_set_object_too_large
382
+ assert_nothing_raised do
383
+ @nb_cache.set key, "I'm big" * 1000000
384
+ end
385
+ end
386
+
387
+ def test_no_block_existing_add
388
+ # Should still raise
389
+ @nb_cache.set key, @value
390
+ assert_raise(Memcached::NotStored) do
391
+ @nb_cache.add key, @value
392
+ end
393
+ end
303
394
 
304
395
  def test_thread_contention
305
396
  threads = []
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: memcached
3
3
  version: !ruby/object:Gem::Version
4
- version: "0.5"
4
+ version: "0.6"
5
5
  platform: ruby
6
6
  authors:
7
7
  - Evan Weaver
@@ -30,7 +30,7 @@ cert_chain:
30
30
  yZ0=
31
31
  -----END CERTIFICATE-----
32
32
 
33
- date: 2008-01-20 00:00:00 -05:00
33
+ date: 2008-01-21 00:00:00 -05:00
34
34
  default_executable:
35
35
  dependencies: []
36
36
 
@@ -45,7 +45,6 @@ extra_rdoc_files: []
45
45
  files:
46
46
  - CHANGELOG
47
47
  - ext/extconf.rb
48
- - ext/libmemcached.h
49
48
  - ext/libmemcached.i
50
49
  - ext/libmemcached_wrap.c
51
50
  - lib/memcached/behaviors.rb
@@ -56,12 +55,15 @@ files:
56
55
  - LICENSE
57
56
  - Manifest
58
57
  - README
59
- - test/benchmark/benchmark_test.rb
58
+ - test/benchmark/benchmark.rb
59
+ - test/benchmark/benchmark_set_get.rb
60
+ - test/benchmark/profile.rb
60
61
  - test/setup.rb
61
62
  - test/teardown.rb
62
63
  - test/test_helper.rb
63
64
  - test/unit/binding_test.rb
64
65
  - test/unit/memcached_test.rb
66
+ - TODO
65
67
  - memcached.gemspec
66
68
  has_rdoc: true
67
69
  homepage: http://blog.evanweaver.com/files/doc/fauna/memcached/
@@ -91,7 +93,6 @@ signing_key:
91
93
  specification_version: 2
92
94
  summary: An interface to the libmemcached C client.
93
95
  test_files:
94
- - test/benchmark/benchmark_test.rb
95
96
  - test/test_helper.rb
96
97
  - test/unit/binding_test.rb
97
98
  - test/unit/memcached_test.rb
metadata.gz.sig CHANGED
Binary file
data/ext/libmemcached.h DELETED
@@ -1,425 +0,0 @@
1
- /*
2
- * Summary: interface for memcached server
3
- * Description: main include file for libmemcached
4
- *
5
- * Copy: See Copyright for the status of this software.
6
- *
7
- * Author: Brian Aker
8
- */
9
-
10
- #ifndef __MEMCACHED_H__
11
- #define __MEMCACHED_H__
12
-
13
- #include <stdlib.h>
14
- #include <inttypes.h>
15
- #include <sys/types.h>
16
- #include <netinet/in.h>
17
-
18
- #ifdef __cplusplus
19
- extern "C" {
20
- #endif
21
-
22
- typedef struct memcached_st memcached_st;
23
- typedef struct memcached_stat_st memcached_stat_st;
24
- typedef struct memcached_result_st memcached_result_st;
25
- typedef struct memcached_string_st memcached_string_st;
26
- typedef struct memcached_server_st memcached_server_st;
27
-
28
- #define MEMCACHED_VERSION_STRING 12
29
- #define MEMCACHED_DEFAULT_PORT 11211
30
- #define MEMCACHED_DEFAULT_COMMAND_SIZE 350
31
- #define SMALL_STRING_LEN 1024
32
- #define HUGE_STRING_LEN 8196
33
- #define MEMCACHED_MAX_KEY 251 /* We add one to have it null terminated */
34
- #define MEMCACHED_MAX_BUFFER HUGE_STRING_LEN
35
- #define MEMCACHED_MAX_HOST_LENGTH 64
36
- #define MEMCACHED_WHEEL_SIZE 1024
37
- #define MEMCACHED_STRIDE 4
38
- #define MEMCACHED_DEFAULT_TIMEOUT INT32_MAX
39
-
40
- typedef enum {
41
- MEMCACHED_SUCCESS,
42
- MEMCACHED_FAILURE,
43
- MEMCACHED_HOST_LOOKUP_FAILURE,
44
- MEMCACHED_CONNECTION_FAILURE,
45
- MEMCACHED_CONNECTION_BIND_FAILURE,
46
- MEMCACHED_WRITE_FAILURE,
47
- MEMCACHED_READ_FAILURE,
48
- MEMCACHED_UNKNOWN_READ_FAILURE,
49
- MEMCACHED_PROTOCOL_ERROR,
50
- MEMCACHED_CLIENT_ERROR,
51
- MEMCACHED_SERVER_ERROR,
52
- MEMCACHED_CONNECTION_SOCKET_CREATE_FAILURE,
53
- MEMCACHED_DATA_EXISTS,
54
- MEMCACHED_DATA_DOES_NOT_EXIST,
55
- MEMCACHED_NOTSTORED,
56
- MEMCACHED_STORED,
57
- MEMCACHED_NOTFOUND,
58
- MEMCACHED_MEMORY_ALLOCATION_FAILURE,
59
- MEMCACHED_PARTIAL_READ,
60
- MEMCACHED_SOME_ERRORS,
61
- MEMCACHED_NO_SERVERS,
62
- MEMCACHED_END,
63
- MEMCACHED_DELETED,
64
- MEMCACHED_VALUE,
65
- MEMCACHED_STAT,
66
- MEMCACHED_ERRNO,
67
- MEMCACHED_FAIL_UNIX_SOCKET,
68
- MEMCACHED_NOT_SUPPORTED,
69
- MEMCACHED_NO_KEY_PROVIDED,
70
- MEMCACHED_FETCH_NOTFINISHED,
71
- MEMCACHED_TIMEOUT,
72
- MEMCACHED_BUFFERED,
73
- MEMCACHED_MAXIMUM_RETURN, /* Always add new error code before */
74
- } memcached_return;
75
-
76
- typedef enum {
77
- MEMCACHED_DISTRIBUTION_MODULA,
78
- MEMCACHED_DISTRIBUTION_CONSISTENT,
79
- } memcached_server_distribution;
80
-
81
- typedef enum {
82
- MEMCACHED_BEHAVIOR_NO_BLOCK,
83
- MEMCACHED_BEHAVIOR_TCP_NODELAY,
84
- MEMCACHED_BEHAVIOR_HASH,
85
- MEMCACHED_BEHAVIOR_KETAMA,
86
- MEMCACHED_BEHAVIOR_SOCKET_SEND_SIZE,
87
- MEMCACHED_BEHAVIOR_SOCKET_RECV_SIZE,
88
- MEMCACHED_BEHAVIOR_CACHE_LOOKUPS,
89
- MEMCACHED_BEHAVIOR_SUPPORT_CAS,
90
- MEMCACHED_BEHAVIOR_POLL_TIMEOUT,
91
- MEMCACHED_BEHAVIOR_DISTRIBUTION,
92
- MEMCACHED_BEHAVIOR_BUFFER_REQUESTS,
93
- MEMCACHED_BEHAVIOR_USER_DATA,
94
- } memcached_behavior;
95
-
96
- typedef enum {
97
- MEMCACHED_HASH_DEFAULT= 0,
98
- MEMCACHED_HASH_MD5,
99
- MEMCACHED_HASH_CRC,
100
- MEMCACHED_HASH_FNV1_64,
101
- MEMCACHED_HASH_FNV1A_64,
102
- MEMCACHED_HASH_FNV1_32,
103
- MEMCACHED_HASH_FNV1A_32,
104
- MEMCACHED_HASH_KETAMA,
105
- MEMCACHED_HASH_HSIEH,
106
- } memcached_hash;
107
-
108
- typedef enum {
109
- MEMCACHED_CONNECTION_UNKNOWN,
110
- MEMCACHED_CONNECTION_TCP,
111
- MEMCACHED_CONNECTION_UDP,
112
- MEMCACHED_CONNECTION_UNIX_SOCKET,
113
- } memcached_connection;
114
-
115
- typedef enum {
116
- MEMCACHED_NOT_ALLOCATED,
117
- MEMCACHED_ALLOCATED,
118
- MEMCACHED_USED,
119
- } memcached_allocated;
120
-
121
- struct memcached_server_st {
122
- char hostname[MEMCACHED_MAX_HOST_LENGTH];
123
- unsigned int port;
124
- int fd;
125
- unsigned int cursor_active;
126
- char write_buffer[MEMCACHED_MAX_BUFFER];
127
- size_t write_buffer_offset;
128
- char *write_ptr;
129
- char read_buffer[MEMCACHED_MAX_BUFFER];
130
- size_t read_data_length;
131
- size_t read_buffer_length;
132
- char *read_ptr;
133
- memcached_allocated sockaddr_inited;
134
- struct addrinfo *address_info;
135
- memcached_connection type;
136
- uint8_t major_version;
137
- uint8_t minor_version;
138
- uint8_t micro_version;
139
- uint16_t count;
140
- };
141
-
142
- struct memcached_stat_st {
143
- uint32_t pid;
144
- uint32_t uptime;
145
- uint32_t threads;
146
- uint32_t time;
147
- uint32_t pointer_size;
148
- uint32_t rusage_user_seconds;
149
- uint32_t rusage_user_microseconds;
150
- uint32_t rusage_system_seconds;
151
- uint32_t rusage_system_microseconds;
152
- uint32_t curr_items;
153
- uint32_t total_items;
154
- uint32_t limit_maxbytes;
155
- uint32_t curr_connections;
156
- uint32_t total_connections;
157
- uint32_t connection_structures;
158
- uint64_t bytes;
159
- uint64_t cmd_get;
160
- uint64_t cmd_set;
161
- uint64_t get_hits;
162
- uint64_t get_misses;
163
- uint64_t evictions;
164
- uint64_t bytes_read;
165
- uint64_t bytes_written;
166
- char version[MEMCACHED_VERSION_STRING];
167
- };
168
-
169
- struct memcached_string_st {
170
- memcached_st *root;
171
- memcached_allocated is_allocated;
172
- char *string;
173
- char *end;
174
- size_t current_size;
175
- size_t block_size;
176
- };
177
-
178
- struct memcached_result_st {
179
- memcached_allocated is_allocated;
180
- memcached_st *root;
181
- char key[MEMCACHED_MAX_KEY];
182
- size_t key_length;
183
- memcached_string_st value;
184
- uint32_t flags;
185
- uint64_t cas;
186
- /* Add result callback function */
187
- };
188
-
189
- struct memcached_st {
190
- memcached_allocated is_allocated;
191
- memcached_server_st *hosts;
192
- unsigned int number_of_hosts;
193
- unsigned int cursor_server;
194
- char connected;
195
- int cached_errno;
196
- unsigned long long flags;
197
- int send_size;
198
- int recv_size;
199
- int32_t poll_timeout;
200
- memcached_result_st result;
201
- memcached_hash hash;
202
- memcached_server_distribution distribution;
203
- void *user_data;
204
- unsigned int wheel[MEMCACHED_WHEEL_SIZE];
205
- #ifdef NOT_USED /* Future Use */
206
- uint8_t replicas;
207
- memcached_return warning;
208
- #endif
209
- };
210
-
211
- /* Public API */
212
- memcached_st *memcached_create(memcached_st *ptr);
213
- void memcached_free(memcached_st *ptr);
214
- memcached_st *memcached_clone(memcached_st *clone, memcached_st *ptr);
215
-
216
- memcached_return memcached_delete(memcached_st *ptr, char *key, size_t key_length,
217
- time_t expiration);
218
- memcached_return memcached_increment(memcached_st *ptr,
219
- char *key, size_t key_length,
220
- uint32_t offset,
221
- uint64_t *value);
222
- memcached_return memcached_decrement(memcached_st *ptr,
223
- char *key, size_t key_length,
224
- uint32_t offset,
225
- uint64_t *value);
226
- void memcached_stat_free(memcached_st *, memcached_stat_st *);
227
- memcached_stat_st *memcached_stat(memcached_st *ptr, char *args, memcached_return *error);
228
- memcached_return memcached_stat_servername(memcached_stat_st *stat, char *args,
229
- char *hostname, unsigned int port);
230
- memcached_return memcached_flush(memcached_st *ptr, time_t expiration);
231
- memcached_return memcached_verbosity(memcached_st *ptr, unsigned int verbosity);
232
- void memcached_quit(memcached_st *ptr);
233
- char *memcached_strerror(memcached_st *ptr, memcached_return rc);
234
- memcached_return memcached_behavior_set(memcached_st *ptr, memcached_behavior flag, void *data);
235
- unsigned long long memcached_behavior_get(memcached_st *ptr, memcached_behavior flag);
236
-
237
- /* All of the functions for adding data to the server */
238
- memcached_return memcached_set(memcached_st *ptr, char *key, size_t key_length,
239
- char *value, size_t value_length,
240
- time_t expiration,
241
- uint32_t flags);
242
- memcached_return memcached_add(memcached_st *ptr, char *key, size_t key_length,
243
- char *value, size_t value_length,
244
- time_t expiration,
245
- uint32_t flags);
246
- memcached_return memcached_replace(memcached_st *ptr, char *key, size_t key_length,
247
- char *value, size_t value_length,
248
- time_t expiration,
249
- uint32_t flags);
250
- memcached_return memcached_append(memcached_st *ptr,
251
- char *key, size_t key_length,
252
- char *value, size_t value_length,
253
- time_t expiration,
254
- uint32_t flags);
255
- memcached_return memcached_prepend(memcached_st *ptr,
256
- char *key, size_t key_length,
257
- char *value, size_t value_length,
258
- time_t expiration,
259
- uint32_t flags);
260
- memcached_return memcached_cas(memcached_st *ptr,
261
- char *key, size_t key_length,
262
- char *value, size_t value_length,
263
- time_t expiration,
264
- uint32_t flags,
265
- uint64_t cas);
266
-
267
- /* Get functions */
268
- char *memcached_get(memcached_st *ptr, char *key, size_t key_length,
269
- size_t *value_length,
270
- uint32_t *flags,
271
- memcached_return *error);
272
- memcached_return memcached_mget(memcached_st *ptr,
273
- char **keys, size_t *key_length,
274
- unsigned int number_of_keys);
275
- char *memcached_fetch(memcached_st *ptr, char *key, size_t *key_length,
276
- size_t *value_length, uint32_t *flags,
277
- memcached_return *error);
278
- memcached_result_st *memcached_fetch_result(memcached_st *ptr,
279
- memcached_result_st *result,
280
- memcached_return *error);
281
-
282
- /* Server Public functions */
283
- #define memcached_server_count(A) (A)->number_of_hosts
284
- #define memcached_server_name(A,B) (B).hostname
285
- #define memcached_server_port(A,B) (B).port
286
- #define memcached_server_list(A) (A)->hosts
287
- #define memcached_server_response_count(A,B) (A)->hosts[B].cursor_active
288
-
289
- memcached_return memcached_server_add_udp(memcached_st *ptr,
290
- char *hostname,
291
- unsigned int port);
292
- memcached_return memcached_server_add_unix_socket(memcached_st *ptr,
293
- char *filename);
294
- memcached_return memcached_server_add(memcached_st *ptr, char *hostname,
295
- unsigned int port);
296
- void memcached_server_list_free(memcached_server_st *ptr);
297
- memcached_return memcached_server_push(memcached_st *ptr, memcached_server_st *list);
298
-
299
- memcached_server_st *memcached_server_list_append(memcached_server_st *ptr,
300
- char *hostname, unsigned int port,
301
- memcached_return *error);
302
- unsigned int memcached_server_list_count(memcached_server_st *ptr);
303
- memcached_server_st *memcached_servers_parse(char *server_strings);
304
-
305
- char *memcached_stat_get_value(memcached_st *ptr, memcached_stat_st *stat,
306
- char *key, memcached_return *error);
307
- char ** memcached_stat_get_keys(memcached_st *ptr, memcached_stat_st *stat,
308
- memcached_return *error);
309
-
310
- char *memcached_get_by_key(memcached_st *ptr,
311
- char *master_key, size_t master_key_length,
312
- char *key, size_t key_length,
313
- size_t *value_length,
314
- uint32_t *flags,
315
- memcached_return *error);
316
-
317
- memcached_return memcached_mget_by_key(memcached_st *ptr,
318
- char *master_key, size_t master_key_length,
319
- char **keys, size_t *key_length,
320
- unsigned int number_of_keys);
321
-
322
- memcached_return memcached_set_by_key(memcached_st *ptr,
323
- char *master_key, size_t master_key_length,
324
- char *key, size_t key_length,
325
- char *value, size_t value_length,
326
- time_t expiration,
327
- uint32_t flags);
328
-
329
- memcached_return memcached_add_by_key(memcached_st *ptr,
330
- char *master_key, size_t master_key_length,
331
- char *key, size_t key_length,
332
- char *value, size_t value_length,
333
- time_t expiration,
334
- uint32_t flags);
335
-
336
- memcached_return memcached_replace_by_key(memcached_st *ptr,
337
- char *master_key, size_t master_key_length,
338
- char *key, size_t key_length,
339
- char *value, size_t value_length,
340
- time_t expiration,
341
- uint32_t flags);
342
-
343
- memcached_return memcached_prepend_by_key(memcached_st *ptr,
344
- char *master_key, size_t master_key_length,
345
- char *key, size_t key_length,
346
- char *value, size_t value_length,
347
- time_t expiration,
348
- uint32_t flags);
349
-
350
- memcached_return memcached_append_by_key(memcached_st *ptr,
351
- char *master_key, size_t master_key_length,
352
- char *key, size_t key_length,
353
- char *value, size_t value_length,
354
- time_t expiration,
355
- uint32_t flags);
356
-
357
- memcached_return memcached_cas_by_key(memcached_st *ptr,
358
- char *master_key, size_t master_key_length,
359
- char *key, size_t key_length,
360
- char *value, size_t value_length,
361
- time_t expiration,
362
- uint32_t flags,
363
- uint64_t cas);
364
- memcached_return memcached_delete_by_key(memcached_st *ptr,
365
- char *master_key, size_t master_key_length,
366
- char *key, size_t key_length,
367
- time_t expiration);
368
-
369
- memcached_return memcached_fetch_execute(memcached_st *ptr,
370
- unsigned int (*callback[])(memcached_st *ptr, memcached_result_st *result, void *context),
371
- void *context,
372
- unsigned int number_of_callbacks
373
- );
374
-
375
- /* Result Struct */
376
- void memcached_result_free(memcached_result_st *result);
377
- memcached_result_st *memcached_result_create(memcached_st *ptr,
378
- memcached_result_st *result);
379
- #define memcached_result_key_value(A) (A)->key
380
- #define memcached_result_key_length(A) (A)->key_length
381
- #ifdef FIX
382
- #define memcached_result_value(A) memcached_string_value((A)->value)
383
- #define memcached_result_length(A) memcached_string_length((A)->value)
384
- #else
385
- char *memcached_result_value(memcached_result_st *ptr);
386
- size_t memcached_result_length(memcached_result_st *ptr);
387
- #endif
388
- #define memcached_result_flags(A) (A)->flags
389
- #define memcached_result_cas(A) (A)->cas
390
-
391
-
392
- #ifndef __WATCHPOINT_H__
393
- #define __WATCHPOINT_H__
394
- /* Some personal debugging functions */
395
- #ifdef HAVE_DEBUG
396
- #define WATCHPOINT fprintf(stderr, "\nWATCHPOINT %s:%d (%s)\n", __FILE__, __LINE__,__func__);fflush(stdout);
397
- #ifdef __MEMCACHED_H__
398
- #define WATCHPOINT_ERROR(A) fprintf(stderr, "\nWATCHPOINT %s:%d %s\n", __FILE__, __LINE__, memcached_strerror(NULL, A));fflush(stdout);
399
- #define WATCHPOINT_IFERROR(A) if(A != MEMCACHED_SUCCESS)fprintf(stderr, "\nWATCHPOINT %s:%d %s\n", __FILE__, __LINE__, memcached_strerror(NULL, A));fflush(stdout);
400
- #endif
401
- #define WATCHPOINT_STRING(A) fprintf(stderr, "\nWATCHPOINT %s:%d (%s) %s\n", __FILE__, __LINE__,__func__,A);fflush(stdout);
402
- #define WATCHPOINT_STRING_LENGTH(A,B) fprintf(stderr, "\nWATCHPOINT %s:%d (%s) %.*s\n", __FILE__, __LINE__,__func__,(int)B,A);fflush(stdout);
403
- #define WATCHPOINT_NUMBER(A) fprintf(stderr, "\nWATCHPOINT %s:%d (%s) %zu\n", __FILE__, __LINE__,__func__,(size_t)(A));fflush(stdout);
404
- #define WATCHPOINT_ERRNO(A) fprintf(stderr, "\nWATCHPOINT %s:%d (%s) %s\n", __FILE__, __LINE__,__func__, strerror(A));A= 0;fflush(stdout);
405
- #define WATCHPOINT_ASSERT(A) assert((A));
406
- #else
407
- #define WATCHPOINT
408
- #ifdef __MEMCACHED_H__
409
- #define WATCHPOINT_ERROR(A)
410
- #define WATCHPOINT_IFERROR(A)
411
- #endif
412
- #define WATCHPOINT_STRING(A)
413
- #define WATCHPOINT_NUMBER(A)
414
- #define WATCHPOINT_ERRNO(A)
415
- #define WATCHPOINT_ASSERT(A)
416
- #endif
417
-
418
- #endif /* __WATCHPOINT_H__ */
419
-
420
-
421
- #ifdef __cplusplus
422
- }
423
- #endif
424
-
425
- #endif /* __MEMCACHED_H__ */