couchbase 1.2.0.beta-x86-mingw32 → 1.2.0-x86-mingw32

Sign up to get free protection for your applications and to get access to all the features.
Files changed (45) hide show
  1. data/.travis.yml +1 -1
  2. data/Makefile +3 -0
  3. data/README.markdown +15 -4
  4. data/RELEASE_NOTES.markdown +513 -0
  5. data/couchbase.gemspec +0 -1
  6. data/ext/couchbase_ext/arguments.c +161 -244
  7. data/ext/couchbase_ext/arithmetic.c +29 -37
  8. data/ext/couchbase_ext/bucket.c +252 -219
  9. data/ext/couchbase_ext/couchbase_ext.c +540 -417
  10. data/ext/couchbase_ext/couchbase_ext.h +218 -191
  11. data/ext/couchbase_ext/delete.c +30 -27
  12. data/ext/couchbase_ext/extconf.rb +15 -3
  13. data/ext/couchbase_ext/get.c +45 -37
  14. data/ext/couchbase_ext/http.c +95 -74
  15. data/ext/couchbase_ext/multithread_plugin.c +1201 -0
  16. data/ext/couchbase_ext/observe.c +42 -37
  17. data/ext/couchbase_ext/result.c +17 -20
  18. data/ext/couchbase_ext/stats.c +30 -28
  19. data/ext/couchbase_ext/store.c +46 -39
  20. data/ext/couchbase_ext/timer.c +11 -11
  21. data/ext/couchbase_ext/touch.c +30 -27
  22. data/ext/couchbase_ext/unlock.c +30 -27
  23. data/ext/couchbase_ext/utils.c +166 -89
  24. data/ext/couchbase_ext/version.c +29 -26
  25. data/lib/action_dispatch/middleware/session/couchbase_store.rb +2 -2
  26. data/lib/active_support/cache/couchbase_store.rb +6 -6
  27. data/lib/couchbase.rb +1 -0
  28. data/lib/couchbase/bucket.rb +6 -11
  29. data/lib/couchbase/cluster.rb +105 -0
  30. data/lib/couchbase/utils.rb +8 -5
  31. data/lib/couchbase/version.rb +1 -1
  32. data/lib/couchbase/view.rb +51 -5
  33. data/lib/couchbase/view_row.rb +1 -1
  34. data/lib/ext/multi_json_fix.rb +13 -9
  35. data/lib/rack/session/couchbase.rb +11 -7
  36. data/tasks/compile.rake +1 -1
  37. data/tasks/test.rake +40 -34
  38. data/tasks/util.rake +1 -1
  39. data/test/setup.rb +9 -2
  40. data/test/test_arithmetic.rb +37 -0
  41. data/test/test_async.rb +22 -18
  42. data/test/test_unlock.rb +0 -1
  43. data/test/test_utils.rb +32 -0
  44. metadata +13 -23
  45. data/HISTORY.markdown +0 -215
data/.travis.yml CHANGED
@@ -9,7 +9,7 @@ before_install:
9
9
  - wget -O- http://packages.couchbase.com/ubuntu/couchbase.key | sudo apt-key add -
10
10
  - echo deb http://packages.couchbase.com/snapshot/ubuntu oneiric oneiric/main | sudo tee /etc/apt/sources.list.d/couchbase.list
11
11
  - sudo apt-get update
12
- - sudo apt-get -y install libevent-dev libvbucket-dev libcouchbase-dev
12
+ - sudo apt-get -y install libcouchbase2-dev
13
13
 
14
14
  rvm:
15
15
  - 1.8.7
data/Makefile ADDED
@@ -0,0 +1,3 @@
1
+ all:
2
+ $(MAKE) -C../.. ruby-client
3
+
data/README.markdown CHANGED
@@ -1,6 +1,13 @@
1
- # Couchbase Ruby Client [![Build Status](https://secure.travis-ci.org/couchbase/couchbase-ruby-client.png?branch=master)](http://travis-ci.org/couchbase/couchbase-ruby-client)
1
+ # Couchbase Ruby Client
2
2
 
3
- This is the official client library for use with Couchbase Server.
3
+ This is the official client library for use with Couchbase Server. There
4
+ are related libraries available:
5
+
6
+ * [couchbase-model][6] the ActiveModel implementation, git repository:
7
+ [https://github.com/couchbase/couchbase-ruby-model][7]
8
+
9
+ * [em-couchbase][8] EventMachine friendly implementation of couchbase
10
+ client, git repository: [https://github.com/couchbase/couchbase-ruby-client-em][9]
4
11
 
5
12
  ## SUPPORT
6
13
 
@@ -436,7 +443,6 @@ store a couple of posts using memcached API:
436
443
  c['hello-world'] = {:title => 'Hello World',
437
444
  :body => 'Well hello and welcome to my new blog...',
438
445
  :date => '2009/01/15 15:52:20'}
439
- c.all_docs.count #=> 3
440
446
 
441
447
  Now let's create design doc with sample view and save it in file
442
448
  'blog.json':
@@ -486,7 +492,7 @@ You can also use Enumerator to iterate view results
486
492
 
487
493
  require 'date'
488
494
  posts_by_date = Hash.new{|h,k| h[k] = []}
489
- enum = c.all_docs(:include_docs => true).each # request hasn't issued yet
495
+ enum = c.recent_posts(:include_docs => true).each # request hasn't issued yet
490
496
  enum.inject(posts_by_date) do |acc, doc|
491
497
  acc[date] = Date.strptime(doc['date'], '%Y/%m/%d')
492
498
  acc
@@ -519,3 +525,8 @@ the error is detected.
519
525
  [3]: http://www.couchbase.com/develop/c/current
520
526
  [4]: https://github.com/mxcl/homebrew/pulls/avsej
521
527
  [5]: http://code.google.com/p/memcached/wiki/BinaryProtocolRevamped
528
+ [6]: https://rubygems.org/gems/couchbase-model
529
+ [7]: https://github.com/couchbase/couchbase-ruby-model
530
+ [8]: https://rubygems.org/gems/em-couchbase
531
+ [9]: https://github.com/couchbase/couchbase-ruby-client-em
532
+
@@ -0,0 +1,513 @@
1
+ # Release Notes
2
+
3
+ This document is a list of user visible feature changes and important
4
+ bugfixes. Do not forget to update this doc in every important patch.
5
+
6
+ ## 1.2.0 (2012-12-12)
7
+
8
+ 30 files changed, 2079 insertions(+), 662 deletions(-)
9
+
10
+ * Specialized io plugin for releasing Ruby GVL (thanks to
11
+ Sokolov Yura aka funny_falcon).
12
+
13
+ * Ruby 1.9.x uses global lock for ensuring integrity, and blocking
14
+ calls should be called inside rb_thread_blocking_region to allow
15
+ other threads to be runned.
16
+
17
+ * Ruby 1.8.7 have only green threads, so that rb_thread_schedule
18
+ should be called manually.
19
+
20
+ * RCBC-42 Catch exceptions from ruby callbacks
21
+
22
+ * RCBC-99 read out the StringIO contents in json gem monkey patch
23
+
24
+ * Use marshal serializer by default for session store
25
+
26
+ * Remove debugger development dependency
27
+
28
+ * Fix memory leaks and performance improvements
29
+
30
+ ## 1.2.0.z.beta5 (2012-11-29)
31
+
32
+ 25 files changed, 1419 insertions(+), 1230 deletions(-)
33
+
34
+ * RCBC-95 Use response body to clarify Couchbase::Error::HTTP
35
+
36
+ * Fix memory leaks: in async mode context wasn't freed
37
+
38
+ * Allow to setup default initial value for INCR/DECR on per connection
39
+ level.
40
+
41
+ * Make error message about libcouchbase dependency more verbose
42
+
43
+ ## 1.2.0.z.beta4 (2012-11-21)
44
+
45
+ 27 files changed, 311 insertions(+), 123 deletions(-)
46
+
47
+ * Increase default connection timeout for Views up to 75 seconds
48
+
49
+ * RCBC-94 Reset global exception after usage
50
+
51
+ * RCBC-89 Do not expose docs embedded in HTTP response. Use binary
52
+ protocol for it.
53
+
54
+ * Remove all_docs mentions. It isn't recommended to use it because of
55
+ performance issues
56
+
57
+ * Protect against non string values in :plain mode. Will raise error
58
+ if the value given isn't a string.
59
+
60
+ * RCBC-90 Update documentation about session store
61
+
62
+ * Make rack session store adapter quiet
63
+
64
+ * Update to recent libcouchbase API
65
+
66
+ * Adjust version check for MultiJson monkeypatch (8098da1)
67
+
68
+ * Do not hide ValueFormat reason
69
+
70
+ ## 1.2.0.z.beta3 (2012-10-16)
71
+
72
+ 18 files changed, 241 insertions(+), 57 deletions(-)
73
+
74
+ * RCBC-52 Implement bucket create/delete operations
75
+
76
+ * Propogate status code for HTTP responses
77
+
78
+ * RCBC-87 Fix build error on macos
79
+
80
+ * Use global scope to find Error classes (thanks to @wr0ngway)
81
+
82
+ * Fix memory leaks
83
+
84
+ * Update to recent libcouchbase API
85
+
86
+ ## 1.2.0.z.beta2 (2012-09-21)
87
+
88
+ 3 files changed, 6 insertions(+), 2 deletions(-)
89
+
90
+ * RCBC-82 Not all rubies are fat on MacOS. Fixes build there
91
+
92
+ ## 1.2.0.z.beta (2012-09-18)
93
+
94
+ 2 files changed, 5 insertions(+), 1 deletion(-)
95
+
96
+ * Fix version ordering by using ".z" prefix before .beta
97
+
98
+ ## 1.2.0.beta (2012-09-18)
99
+
100
+ 51 files changed, 9301 insertions(+), 3364 deletions(-)
101
+
102
+ * RCBC-81 Protect against NoMethodError in extconf.rb. Fixes
103
+ gem installation
104
+
105
+ * RCBC-79 Use RESTful flush
106
+
107
+ * Various build fixes
108
+
109
+ * Add attribute reader for Error::Base status code
110
+
111
+ * CCBC-98 Expose client temporary failure error
112
+
113
+ * RCBC-28 Implement Bucket#unlock
114
+
115
+ * Fix CAS conversion for Bucket#delete method for 32-bit systems
116
+
117
+ ## 1.1.5 (2012-09-17)
118
+
119
+ 3 files changed, 9 insertions(+), 5 deletions(-)
120
+
121
+ * RCBC-81 Fixed installing issue on MacOS.
122
+
123
+ ## 1.1.4 (2012-08-30)
124
+
125
+ 5 files changed, 64 insertions(+), 30 deletions(-)
126
+
127
+ * RCBC-37 Allow to pass intial list of nodes which will allow to
128
+ iterate addresses until alive node will be found.
129
+
130
+ Couchbase.connect(:node_list => ['example.com:8091', 'example.org:8091', 'example.net'])
131
+
132
+ * RCBC-70 Fixed UTF-8 in the keys. Original discussion
133
+ https://groups.google.com/d/topic/couchbase/bya0lSf9uGE/discussion
134
+
135
+ ## 1.2.0.dp6 (2012-06-28)
136
+
137
+ 21 files changed, 1520 insertions(+), 428 deletions(-)
138
+
139
+ * RCBC-47 Allow to skip username for protected buckets. The will use
140
+ bucket name for credentials.
141
+
142
+ * Expose number of replicas to the user
143
+
144
+ * RCBC-6 Implement OBSERVE command
145
+
146
+ * RCBC-49 :observe option for storage functions
147
+
148
+ * RCBC-50 Allow to read keys from replica
149
+
150
+ * RCBC-57 Expose timers API from libcouchbase
151
+
152
+ * RCBC-59 Replicate flags in Bucket#cas operation
153
+
154
+ * Apply timeout value before connection. Currently libcouchbase shares
155
+ timeouts for connection and IO operations. This patch allows to
156
+ setup timeout on the instantiating the connection.
157
+
158
+ * RCBC-39 Allow to specify delta for incr/decr in options
159
+
160
+ * RCBC-40 Fix Bucket#cas operation behaviour in async mode. The
161
+ callback of the Bucket#cas method is triggered only once, when it
162
+ fetches old value, and it isn't possible to receive notification if
163
+ the next store operation was successful. Example, append JSON
164
+ encoded value asynchronously:
165
+
166
+ c.default_format = :document
167
+ c.set("foo", {"bar" => 1})
168
+ c.run do
169
+ c.cas("foo") do |val|
170
+ case val.operation
171
+ when :get
172
+ val["baz"] = 2
173
+ val
174
+ when :set
175
+ # verify all is ok
176
+ puts "error: #{ret.error.inspect}" unless ret.success?
177
+ end
178
+ end
179
+ end
180
+ c.get("foo") #=> {"bar" => 1, "baz" => 2}
181
+
182
+ * RCBC-43 More docs and examples on views
183
+
184
+ * RCBC-37 Bootstrapping using multiple nodes
185
+
186
+ Couchbase.connect(:node_list => ['example.com:8091', 'example.org:8091', 'example.net'])
187
+
188
+ * Inherit StandardError instead RuntimeError for errors
189
+
190
+ ## 1.2.0.dp5 (2012-06-15)
191
+
192
+ 12 files changed, 939 insertions(+), 20 deletions(-)
193
+
194
+ * Integrate with Rack and Rails session store
195
+
196
+ # rack
197
+ require 'rack/session/couchbase'
198
+ use Rack::Session::Couchbase
199
+
200
+ # rails
201
+ require 'action_dispatch/middleware/session/couchbase_store'
202
+ AppName::Application.config.session_store :couchbase_store
203
+
204
+ * Implement cache store adapter for Rails
205
+
206
+ cache_options = {
207
+ :bucket => 'protected',
208
+ :username => 'protected',
209
+ :password => 'secret',
210
+ :expires_in => 30.seconds
211
+ }
212
+ config.cache_store = :couchbase_store, cache_options
213
+
214
+ * Implement key prefix (simple namespacing)
215
+
216
+ Couchbase.connect(:key_prefix => "prefix:")
217
+
218
+ * Allow to force assembling result Hash for multi-get
219
+
220
+ connection.get("foo", "bar")
221
+ #=> [1, 2]
222
+ connection.get("foo", "bar", :assemble_hash => true)
223
+ #=> {"foo" => 1, "bar" => 2}
224
+
225
+ ## 1.2.0.dp4 (2012-06-07)
226
+
227
+ 4 files changed, 34 insertions(+), 19 deletions(-)
228
+
229
+ * Update replace documentation: it accepts :cas option
230
+
231
+ * RCBC-36 Fix segfault. Ocassional segfault when accessing the
232
+ results of a View. https://gist.github.com/2883925
233
+
234
+ ## 1.2.0.dp3 (2012-06-06)
235
+
236
+ 4 files changed, 22 insertions(+), 4 deletions(-)
237
+
238
+ * Fix for multi_json < 1.3.3
239
+
240
+ * Break out from event loop for non-chunked responses (fix creating
241
+ design create)
242
+
243
+ ## 1.2.0.dp2 (2012-06-06)
244
+
245
+ 22 files changed, 859 insertions(+), 253 deletions(-)
246
+
247
+ * RCBC-31 Make Bucket#get more consistent. The pattern of using more
248
+ than one argument to determine if an array should be returned is not
249
+ idiomatic. Consider the case of a multi-get in an application where
250
+ I have n items to return. If there happens to be only one item it
251
+ will be treated differently than if there happens to be 2 items.
252
+
253
+ get(["foo"]) #=> ["bar"]
254
+ get("foo") #=> "bar"
255
+ get(["x"], :extended => true) #=> {"x"=>["xval", 0, 18336939621176836096]}
256
+
257
+ * Use monotonic high resolution clock
258
+
259
+ * Implement threshold for outgoing commands
260
+
261
+ * Allow to stop event loop from ruby
262
+
263
+ * RCBC-35 Fix the View parameters escaping. More info at
264
+ https://gist.github.com/2775050
265
+
266
+ * RCBC-34 Use multi_json gem. json_gem compatibility (require
267
+ 'yajl/json_gem') is notorious for causing all kinds of issues with
268
+ various gems. The most compatible way to use yajl is to call
269
+ Yajl::Parser and Yajl::Encoder directly.
270
+
271
+ * Allow to block and wait for part of the requests
272
+
273
+ * Fix view iterator. It doesn't lock event loop anymore
274
+
275
+ * Define views only if "views" key presented
276
+
277
+ * Require yajl as development dependency
278
+
279
+ * Implement get with lock operation
280
+
281
+ * Update documentation
282
+
283
+ ## 1.1.3 (2012-07-27)
284
+
285
+ 5 files changed, 192 insertions(+), 101 deletions(-)
286
+
287
+ * RCBC-64 The Couchbase::Bucket class hasn't implemented the #dup
288
+ method. So it caused SEGFAULT. The patch is implementing correct
289
+ function, which copy the internals and initializes new connection.
290
+
291
+ * RCBC-59 The flags might be reset if caller will use
292
+ Couchbase::Bucket#cas operation. Here is IRB session demostrating
293
+ the issue:
294
+
295
+ irb>Couchbase.bucket.set("foo", "bar", :flags => 0x100)
296
+ 17982951084586893312
297
+ irb> Couchbase.bucket.cas("foo") { "baz" }
298
+ 1712422461213442048
299
+ irb> Couchbase.bucket.get("foo", :extended => true)
300
+ ["baz", 0, 1712422461213442048]
301
+
302
+
303
+ * RCBC-60 Make object_space GC protector per-bucket object. Previous
304
+ version provided not completely thread-safe bucket instance, because
305
+ it was sharing global hash for protecting objects, created in
306
+ extension, from garbage collecting.
307
+
308
+ ## 1.1.2 (2012-06-05)
309
+
310
+ 5 files changed, 9 insertions(+), 4 deletions(-)
311
+
312
+ * Upgrade libcouchbase dependency to 1.0.4. Version 1.0.4 includes
313
+ important stability fixes.
314
+
315
+ * Backport debugger patch. The gem used to require debugger as
316
+ development dependency. Unfortunately ruby-debug19 isn't supported
317
+ anymore for ruby 1.9.x. But there is new gem 'debugger'. This patch
318
+ replaces this dependency.
319
+
320
+ ## 1.2.0.dp (2012-04-10)
321
+
322
+ 19 files changed, 1606 insertions(+), 93 deletions(-)
323
+
324
+ * Properly handle hashes as Couchbase.connection_options
325
+
326
+ * Implement views
327
+
328
+ * Use verbose mode by default throwing exceptions on NOT_FOUND errors.
329
+ This means that quiet attribute is false now on new connections.
330
+
331
+ * Documentation fixes
332
+
333
+ ## 1.1.1 (2012-03-19)
334
+
335
+ 5 files changed, 83 insertions(+), 23 deletions(-)
336
+
337
+ * Flags are used differently in different clients for example between
338
+ Python and Ruby. This fix will force the format to a known value
339
+ irrespective of the flags.
340
+
341
+ * Calls between Ruby and C libraries for Couchbase which involved
342
+ default arguments had an associated arity of -1 which was not being
343
+ handled correctly. That is being handled correctly now.
344
+
345
+ ## 1.1.0 (2012-03-07)
346
+
347
+ 27 files changed, 2460 insertions(+), 849 deletions(-)
348
+
349
+ * With the usage of the URI parser from stdlib it is possible to
350
+ validate the bucket URI more strictly. Also, it is possible to
351
+ specify credentials in the URI like:
352
+ http://username:password@example.com:8091/pools/default/buckets/custom
353
+
354
+ * The "default" connection is available in thread local storage. This
355
+ mean that using the Couchbase.bucket method it is possible to get
356
+ access to current connection and there is no need to share
357
+ connections when running in multi-thread environment. Each thread
358
+ has its own connection reference.
359
+
360
+ * The direct dependency on libevent and sasl has been removed. Now the
361
+ library doesn't require libevent headers installed.
362
+
363
+ * The disconnect and reconnect interfaces are implemented which
364
+ provide routines for explicit resource management. Connections were
365
+ freed only when the Garbage Collector found that the connection was
366
+ not being used. Now it's possible for the client to check if the
367
+ bucket was connected using 'connected?' or 'disconnect' it manually
368
+ or 'reconnect' using old settings.
369
+
370
+ * There were spurious timeout issues with a compound statement like
371
+ below. No timeout will occur unless there is a problem with the
372
+ connection.
373
+
374
+ connection.run do
375
+ connection.get("foo") {|ret| puts "got foo = #{ret.value}"}
376
+ sleep(5)
377
+ end
378
+
379
+ * It is not required to install libcouchbase or libvbucket on windows.
380
+
381
+ * It is possible to store nil as a value. It is possible to
382
+ distinguish a nil value from a missing key by looking at at the
383
+ value returned and the flags and CAS values as well.
384
+
385
+ * Based on the time out fix (CCBC-20), clients will be notified when
386
+ the connection was dropped or host isn't available.
387
+
388
+ ## 1.0.0 (2012-03-01)
389
+
390
+ 50 files changed, 4696 insertions(+), 2647 deletions(-)
391
+
392
+ * Port library to use libcouchbase instead of memcached gem.
393
+ Implemented following operations:
394
+
395
+ * get, []
396
+ * set, []=
397
+ * add
398
+ * replace
399
+ * append
400
+ * prepend
401
+ * compare-and-swap
402
+ * arithmetic (incr/decr)
403
+ * flush
404
+ * stats
405
+ * delete
406
+ * touch
407
+
408
+ * Introduce support for three data formats:
409
+
410
+ * document
411
+ * marshal
412
+ * plain
413
+
414
+ * Removed Views support
415
+
416
+ * Added benchmarks, couchbase vs. memcached vs. dalli
417
+
418
+ * Implement asynchronous protocol
419
+
420
+ * e36c2e7 Implement basic commands
421
+
422
+ ## 0.9.8 (2011-12-16)
423
+
424
+ 3 files changed, 8 insertions(+), 3 deletions(-)
425
+
426
+ * RCBC-10 Always specify credentials for non-default buckets. It was
427
+ impossible to store data in non-default buckets
428
+
429
+ ## 0.9.7 (2011-10-05)
430
+
431
+ 7 files changed, 31 insertions(+), 19 deletions(-)
432
+
433
+ * Fix design doc removing
434
+
435
+ * Fix 'set' method signature: add missing options argument
436
+
437
+ * Rename gem to 'couchbase' for easy of use. The github project still
438
+ is 'couchbase-ruby-client'
439
+
440
+ ## 0.9.6 (2011-10-04)
441
+
442
+ 13 files changed, 609 insertions(+), 99 deletions(-)
443
+
444
+ * Fix bug with decoding multiget result
445
+
446
+ * Allow create design documents from IO and String
447
+
448
+ * Rename 'json' format to 'document', and describe possible formats
449
+
450
+ * Allow to handle errors in view result stream
451
+
452
+ * Remove dependency on libyajl library: it bundled with yaji now
453
+
454
+ ## 0.9.5 (2011-08-24)
455
+
456
+ 4 files changed, 59 insertions(+), 28 deletions(-)
457
+
458
+ * Update README. Make it more human-friendly
459
+
460
+ * Removed depency on will_paginate in development mode
461
+
462
+ ## 0.9.4 (2011-08-01)
463
+
464
+ 24 files changed, 1240 insertions(+), 78 deletions(-)
465
+
466
+ * Use streaming json parser to iterate over view results
467
+
468
+ * Update memcached gem dependency to v1.3
469
+
470
+ * Proxy TOUCH command to memcached client
471
+
472
+ * Fix minor bugs in RestClient and Document classes
473
+
474
+ * Disable CouchDB API for nodes without 'couchApiBase' key provided.
475
+
476
+ * Fix bug with unicode parsing in config listener
477
+
478
+ * 61f394e RCBC-5 Add Dave's test case: ensure memcached client
479
+ initialized. Fixes Timeout error on connecting to membase with
480
+ Couchbase.new on Ruby 1.8.7
481
+
482
+ ## 0.9.3 (2011-07-29)
483
+
484
+ 6 files changed, 167 insertions(+), 9 deletions(-)
485
+
486
+ * Use Latch (via Mutex and ConditionVariable) to wait until initial
487
+ setup will be finished.
488
+
489
+ * Update prefix for development views (from '$dev_' to 'dev_')
490
+
491
+ ## 0.9.2 (2011-07-28)
492
+
493
+ 5 files changed, 31 insertions(+), 20 deletions(-)
494
+
495
+ * Use zero TTL by default to store records forever
496
+
497
+ * Update documentation
498
+
499
+ * Wait until configuration is done
500
+
501
+ ## 0.9.1 (2011-07-25)
502
+
503
+ 3 files changed, 5 insertions(+), 2 deletions(-)
504
+
505
+ * Minor bugfix for RestClient initialization
506
+
507
+ ## 0.9.0 (2011-07-25)
508
+
509
+ 19 files changed, 1174 insertions(+)
510
+
511
+ * Initial public release. It suppors most of the binary protocol
512
+ commands through memcached gem and also is able to listen to bucket
513
+ configuration and make View requests.