couchbase 1.3.4-x64-mingw32

Sign up to get free protection for your applications and to get access to all the features.
Files changed (92) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +15 -0
  3. data/.travis.yml +22 -0
  4. data/.yardopts +5 -0
  5. data/CONTRIBUTING.markdown +75 -0
  6. data/Gemfile +4 -0
  7. data/LICENSE +201 -0
  8. data/Makefile +3 -0
  9. data/README.markdown +649 -0
  10. data/RELEASE_NOTES.markdown +796 -0
  11. data/Rakefile +20 -0
  12. data/couchbase.gemspec +49 -0
  13. data/examples/chat-em/Gemfile +7 -0
  14. data/examples/chat-em/README.markdown +45 -0
  15. data/examples/chat-em/server.rb +82 -0
  16. data/examples/chat-goliath-grape/Gemfile +5 -0
  17. data/examples/chat-goliath-grape/README.markdown +50 -0
  18. data/examples/chat-goliath-grape/app.rb +67 -0
  19. data/examples/chat-goliath-grape/config/app.rb +20 -0
  20. data/examples/transcoders/Gemfile +3 -0
  21. data/examples/transcoders/README.markdown +59 -0
  22. data/examples/transcoders/cb-zcat +40 -0
  23. data/examples/transcoders/cb-zcp +45 -0
  24. data/examples/transcoders/gzip_transcoder.rb +49 -0
  25. data/examples/transcoders/options.rb +54 -0
  26. data/ext/couchbase_ext/.gitignore +4 -0
  27. data/ext/couchbase_ext/arguments.c +956 -0
  28. data/ext/couchbase_ext/arithmetic.c +307 -0
  29. data/ext/couchbase_ext/bucket.c +1370 -0
  30. data/ext/couchbase_ext/context.c +65 -0
  31. data/ext/couchbase_ext/couchbase_ext.c +1364 -0
  32. data/ext/couchbase_ext/couchbase_ext.h +644 -0
  33. data/ext/couchbase_ext/delete.c +163 -0
  34. data/ext/couchbase_ext/eventmachine_plugin.c +452 -0
  35. data/ext/couchbase_ext/extconf.rb +168 -0
  36. data/ext/couchbase_ext/get.c +316 -0
  37. data/ext/couchbase_ext/gethrtime.c +129 -0
  38. data/ext/couchbase_ext/http.c +432 -0
  39. data/ext/couchbase_ext/multithread_plugin.c +1090 -0
  40. data/ext/couchbase_ext/observe.c +171 -0
  41. data/ext/couchbase_ext/plugin_common.c +171 -0
  42. data/ext/couchbase_ext/result.c +129 -0
  43. data/ext/couchbase_ext/stats.c +163 -0
  44. data/ext/couchbase_ext/store.c +542 -0
  45. data/ext/couchbase_ext/timer.c +192 -0
  46. data/ext/couchbase_ext/touch.c +186 -0
  47. data/ext/couchbase_ext/unlock.c +176 -0
  48. data/ext/couchbase_ext/utils.c +551 -0
  49. data/ext/couchbase_ext/version.c +142 -0
  50. data/lib/action_dispatch/middleware/session/couchbase_store.rb +38 -0
  51. data/lib/active_support/cache/couchbase_store.rb +430 -0
  52. data/lib/couchbase.rb +155 -0
  53. data/lib/couchbase/bucket.rb +457 -0
  54. data/lib/couchbase/cluster.rb +119 -0
  55. data/lib/couchbase/connection_pool.rb +58 -0
  56. data/lib/couchbase/constants.rb +12 -0
  57. data/lib/couchbase/result.rb +26 -0
  58. data/lib/couchbase/transcoder.rb +120 -0
  59. data/lib/couchbase/utils.rb +62 -0
  60. data/lib/couchbase/version.rb +21 -0
  61. data/lib/couchbase/view.rb +506 -0
  62. data/lib/couchbase/view_row.rb +272 -0
  63. data/lib/ext/multi_json_fix.rb +56 -0
  64. data/lib/rack/session/couchbase.rb +108 -0
  65. data/tasks/benchmark.rake +6 -0
  66. data/tasks/compile.rake +158 -0
  67. data/tasks/test.rake +100 -0
  68. data/tasks/util.rake +21 -0
  69. data/test/profile/.gitignore +1 -0
  70. data/test/profile/Gemfile +6 -0
  71. data/test/profile/benchmark.rb +195 -0
  72. data/test/setup.rb +178 -0
  73. data/test/test_arithmetic.rb +185 -0
  74. data/test/test_async.rb +316 -0
  75. data/test/test_bucket.rb +250 -0
  76. data/test/test_cas.rb +235 -0
  77. data/test/test_couchbase.rb +77 -0
  78. data/test/test_couchbase_connection_pool.rb +77 -0
  79. data/test/test_couchbase_rails_cache_store.rb +361 -0
  80. data/test/test_delete.rb +120 -0
  81. data/test/test_errors.rb +82 -0
  82. data/test/test_eventmachine.rb +70 -0
  83. data/test/test_format.rb +164 -0
  84. data/test/test_get.rb +407 -0
  85. data/test/test_stats.rb +57 -0
  86. data/test/test_store.rb +216 -0
  87. data/test/test_timer.rb +42 -0
  88. data/test/test_touch.rb +97 -0
  89. data/test/test_unlock.rb +119 -0
  90. data/test/test_utils.rb +58 -0
  91. data/test/test_version.rb +52 -0
  92. metadata +336 -0
@@ -0,0 +1,796 @@
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.3.4 (2014-01-08)
7
+
8
+ * [major] Build 64-bit versions of the extensions for Windows
9
+ platform. Also support ruby 2.0 and 2.1.
10
+
11
+ * [minor] Update hacking section in README
12
+
13
+ * [minor] Fix gemspec warnings regarding versions of the dependencies.
14
+ Now it honours semantic versioning and doesn't use strict versions.
15
+
16
+ * [major] RCBC-151 Return CAS in extended mode for incr/decr
17
+
18
+ * [minor] RCBC-150 Update list of options on `Cluster.create_bucket`.
19
+ Added new options: `:replica_index`, `:flush_enabled`,
20
+ `:parallel_db_and_view_compaction`.
21
+
22
+ * [major] Allow retries on Couchbase::Bucket#cas collisions. Now it
23
+ takes a `:retry` Fixnum option that specifies the maximum number of
24
+ times the method should retry the entire get/update/set operation
25
+ when a `Couchbase::Error::KeyExists` error is encountered due to a
26
+ concurrent update from another writer between its `#get` and `#set`
27
+ calls.
28
+
29
+ * [major] MD5 and truncate ActiveSupport::Cache keys that are longer
30
+ than 250 characters.
31
+
32
+ ## 1.3.3 (2013-09-12)
33
+
34
+ * [major] RCBC-134 Allow application to use several connections with
35
+ thread-local singleton.
36
+
37
+ * [major] RCBC-135 Fixed invalid memory access which was detected by
38
+ using 'GC.stress = true' in tests.
39
+
40
+ * [major] RCBC-141 Initialize event indexes correctly. The plugin
41
+ didn't trace event callbacks, which might lead to invalid memory
42
+ access during rebalance, where libcouchbase creates/removes a lot of
43
+ events because of a fast-changing topology.
44
+
45
+ * [major] RCBC-137 Add selection options for new IO engines: select
46
+ and iocp.
47
+
48
+ * [major] When setting the username field, check for password
49
+ presence. Fixes segmentation fault in this code:
50
+
51
+ Couchbase.connect(:username => "default", :bucket => "default")
52
+
53
+ * [minor] Allow to determine the version of libcouchbase:
54
+
55
+ Couchbase.libcouchbase_version
56
+
57
+ * [major] RCBC-136 Build shared object for ruby 2.0 on windows. Also
58
+ fixes build script when using latest rake and rake-compiler.
59
+
60
+ * [minor] Fix deprecation warning on ruby 2.x. On newer versions it
61
+ should use `rb_thread_call_without_gvl()`.
62
+
63
+ ext/couchbase_ext/multithread_plugin.c: In function ‘loop_run_poll’:
64
+ ext/couchbase_ext/multithread_plugin.c:772:5: warning: ‘rb_thread_blocking_region’ is deprecated (declared at .../2.0.0-p247-dbg/include/ruby-2.0.0/ruby/intern.h:839) [-Wdeprecated-declarations]
65
+ rb_thread_blocking_region(loop_blocking_poll, args, RUBY_UBF_PROCESS, NULL);
66
+
67
+ * [major] Do not try to compile with plugins for Windows platform.
68
+
69
+ * [major] Force handle to be NULL on `lcb_create()` failure.
70
+ `lcb_create()` can leave garbage in the pointer even if the call
71
+ itself failed. This behaviour could lead to illegal memory access
72
+ on GC.
73
+
74
+ * [minor] Remove usage of `RARRAY_PTR` in favor of `rb_ary_entry`.
75
+ This improves performance significantly on Rubinius and also
76
+ improves compatibility with future CRuby 2.1 which introduces
77
+ generational garbage collection. This results in these arrays not
78
+ having to be rescanned in Rubinius and not marked as shady in
79
+ RBGCENC in CRuby 2.1.
80
+ For more discussion, also see: https://bugs.ruby-lang.org/issues/8399
81
+
82
+ ## 1.3.2 (2013-07-10)
83
+
84
+ * [major] RCBC-133 Allow application to select the strategy of reading
85
+ from replica nodes. **This version requires libcouchbase >= 2.0.7.**
86
+ Now three strategies are available:
87
+
88
+ * `:first` - synonym to `true`, previous behaviour now the
89
+ default. It means that the library will sequentially iterate
90
+ over all replicas in the configuration supplied by the cluster
91
+ and will return as soon as it finds a successful response, or
92
+ report an error.
93
+
94
+ c.get("foo", :replica => true)
95
+ c.get("foo", :replica => :first)
96
+ #=> "bar"
97
+ c.get("foo", :replica => :first, :extended => true)
98
+ #=> ["bar", 0, 11218368683493556224]
99
+
100
+ * `:all` - query all replicas in parallel. In this case the method
101
+ will return the array of the values on the all replica nodes without
102
+ a particular order. Also if the key isn't on the node, it will be
103
+ skipped in the result array.
104
+
105
+ c.get("foo", :replica => :all)
106
+ #=> ["bar", "bar", "bar"]
107
+ c.get("foo", :replica => :all, :extended => true)
108
+ #=> [["bar", 0, 11218368683493556224],
109
+ # ["bar", 0, 11218368683493556224],
110
+ # ["bar", 0, 11218368683493556224]]
111
+
112
+ * `Fixnum` - you can also select specific replica node by its
113
+ index in the cluster configuration. It should be in interval
114
+ `0...c.num_replicas`
115
+
116
+ 0...c.num_replicas
117
+ #=> 0...3
118
+ c.get("foo", :replica => 1)
119
+ #=> "bar"
120
+ c.get("foo", :replica => 42)
121
+ #=> ArgumentError: replica index should be in interval 0...3
122
+
123
+ Note that applications should not assume the order of the
124
+ replicas indicates more recent data is at a lower index number.
125
+ It is up to the application to determine which version of a
126
+ document/item it may wish to use in the case of retrieving data
127
+ from a replica.
128
+
129
+
130
+ ## 1.3.1 (2013-06-05)
131
+
132
+ * [major] RCBC-131 Couchbase::Cluster instance shouldn't require
133
+ persistent connection.
134
+
135
+ * Fix compatibility with multi_json 1.7.5. They removed VERSION
136
+ constant
137
+
138
+ ## 1.3.0 (2013-05-07)
139
+
140
+ * [major] RCBC-46 implement Couchbase::ConnectionPool to allow
141
+ applications (and ActiveSupport::Cache::CouchbaseStore) use it in
142
+ multi-threaded environment
143
+
144
+ * [major] Introduce Transcoders. This mechanism is more flexible, and
145
+ similar to how other clients encode values.
146
+
147
+ * [minor] Deprecate numeric argument to 'default_format'. Instead
148
+ of this style:
149
+
150
+ Couchbase.connect(:default_format => Couchbase::Bucket::FMT_MARSHAL)
151
+
152
+ Symbol notation or explicit transcoder entity should be used
153
+
154
+ Couchbase.connect(:default_format => :marshal)
155
+ Couchbase.connect(:transcoder => Couchbase::Transcoder::Marshal)
156
+
157
+ ## 1.2.3 (2013-04-02)
158
+
159
+ * [major] Make ActiveSupport::Cache::CouchbaseStore threadsafe
160
+
161
+ * [minor] Check for gethrtime. Needed for solaris/smartos
162
+
163
+ * [minor] Update documentation bits regarding SET operations
164
+
165
+ ## 1.2.2 (2013-02-11)
166
+
167
+ * [minor] Bucket#design_docs will return a Hash with DesignDoc
168
+ instances as a values.
169
+
170
+ * [critical] RCBC-104 Data corruption on intensive store operations.
171
+ The issue could also lead to segfaults.
172
+
173
+ * [major] RCBC-118 Alias #total_rows as #total_entries on view result
174
+ set to match documentation.
175
+
176
+ * [minor] View#fetch_all - async method for fetching all records
177
+
178
+ conn.run do
179
+ doc.recent_posts.fetch_all do |posts|
180
+ do_something_with_all_posts(posts)
181
+ end
182
+ end
183
+
184
+ * [major] Allow to use Bucket instance in completely asynchronous
185
+ environment like this, without blocking on connect:
186
+
187
+ conn = Couchbase.new(:async => true)
188
+ conn.run do
189
+ conn.on_connect do |res|
190
+ if res.success?
191
+ #
192
+ # schedule async requests
193
+ #
194
+ end
195
+ end
196
+ end
197
+
198
+ * [major] RCBC-27 EventMachine plugin to integrate with EventMachine
199
+ library. Note that the plugin is experimental at this stage.
200
+ Example:
201
+
202
+ require 'eventmachine'
203
+ require 'couchbase'
204
+
205
+ EM.epoll = true if EM.epoll?
206
+ EM.kqueue = true if EM.kqueue?
207
+ EM.run do
208
+ con = Couchbase.connect(:engine => :eventmachine, :async => true)
209
+ con.on_connect do |res|
210
+ puts "connected: #{res.inspect}"
211
+ if res.success?
212
+ con.set("emfoo", "bar") do |res|
213
+ puts "set: #{res.inspect}"
214
+ con.get("emfoo") do |res|
215
+ puts "get: #{res.inspect}"
216
+ EM.stop
217
+ end
218
+ end
219
+ else
220
+ EM.stop
221
+ end
222
+ end
223
+ end
224
+
225
+
226
+ ## 1.2.1 (2012-12-28)
227
+
228
+ * [major] RCBC-101 Persistence constraints wasn't passed to mutation
229
+ methods, so they haven't been applied properly.
230
+
231
+ * [major] RCBC-102 Inconsistent return values in case of storage
232
+ functions with persistence constraints. It always return a Hash like
233
+ in case of multi-set, even if there is only one document is being
234
+ set.
235
+
236
+ * [minor] Improve internal structures of multi-threaded IO plugin to
237
+ protect it from memory leaks when the Fiber object is forgotten.
238
+
239
+ ## 1.2.0 (2012-12-12)
240
+
241
+ 30 files changed, 2079 insertions(+), 662 deletions(-)
242
+
243
+ * Specialized io plugin for releasing Ruby GVL (thanks to
244
+ Sokolov Yura aka funny_falcon).
245
+
246
+ * Ruby 1.9.x uses global lock for ensuring integrity, and blocking
247
+ calls should be called inside rb_thread_blocking_region to allow
248
+ other threads to be runned.
249
+
250
+ * Ruby 1.8.7 have only green threads, so that rb_thread_schedule
251
+ should be called manually.
252
+
253
+ * RCBC-42 Catch exceptions from ruby callbacks
254
+
255
+ * RCBC-99 read out the StringIO contents in json gem monkey patch
256
+
257
+ * Use marshal serializer by default for session store
258
+
259
+ * Remove debugger development dependency
260
+
261
+ * Fix memory leaks and performance improvements
262
+
263
+ ## 1.2.0.z.beta5 (2012-11-29)
264
+
265
+ 25 files changed, 1419 insertions(+), 1230 deletions(-)
266
+
267
+ * RCBC-95 Use response body to clarify Couchbase::Error::HTTP
268
+
269
+ * Fix memory leaks: in async mode context wasn't freed
270
+
271
+ * Allow to setup default initial value for INCR/DECR on per connection
272
+ level.
273
+
274
+ * Make error message about libcouchbase dependency more verbose
275
+
276
+ ## 1.2.0.z.beta4 (2012-11-21)
277
+
278
+ 27 files changed, 311 insertions(+), 123 deletions(-)
279
+
280
+ * Increase default connection timeout for Views up to 75 seconds
281
+
282
+ * RCBC-94 Reset global exception after usage
283
+
284
+ * RCBC-89 Do not expose docs embedded in HTTP response. Use binary
285
+ protocol for it.
286
+
287
+ * Remove all_docs mentions. It isn't recommended to use it because of
288
+ performance issues
289
+
290
+ * Protect against non string values in :plain mode. Will raise error
291
+ if the value given isn't a string.
292
+
293
+ * RCBC-90 Update documentation about session store
294
+
295
+ * Make rack session store adapter quiet
296
+
297
+ * Update to recent libcouchbase API
298
+
299
+ * Adjust version check for MultiJson monkeypatch (8098da1)
300
+
301
+ * Do not hide ValueFormat reason. It is accessible using
302
+ Couchbase::Error::Value#inner_exception.
303
+
304
+ ## 1.2.0.z.beta3 (2012-10-16)
305
+
306
+ 18 files changed, 241 insertions(+), 57 deletions(-)
307
+
308
+ * RCBC-52 Implement bucket create/delete operations. Examples:
309
+
310
+ conn = Couchbase::Cluster.new(:hostname => "localhost",
311
+ :username => "Administrator", :password => "secret")
312
+ conn.create_bucket("my_protected_bucket",
313
+ :ram_quota => 500, # megabytes
314
+ :sasl_password => "s3cr3tBuck3t")
315
+
316
+ * Propagate status code for HTTP responses
317
+
318
+ * RCBC-87 Fix build error on Mac OS X
319
+
320
+ * Use global scope to find Error classes (thanks to @wr0ngway)
321
+
322
+ * Fix memory leaks
323
+
324
+ * Update to recent libcouchbase API
325
+
326
+ ## 1.2.0.z.beta2 (2012-09-21)
327
+
328
+ 3 files changed, 6 insertions(+), 2 deletions(-)
329
+
330
+ * RCBC-82 Not all rubies are fat on Mac OS X. Fixes build there
331
+
332
+ ## 1.2.0.z.beta (2012-09-18)
333
+
334
+ 2 files changed, 5 insertions(+), 1 deletion(-)
335
+
336
+ * Fix version ordering by using ".z" prefix before .beta. The problem
337
+ is that DP (Developer Preview) should have lower precedence than
338
+ Beta, but alphabetially ".beta" orders before ".dp". This is why
339
+ further Beta versions have ".z".
340
+
341
+ ## 1.2.0.beta (2012-09-18)
342
+
343
+ 51 files changed, 9301 insertions(+), 3364 deletions(-)
344
+
345
+ * RCBC-81 Protect against NoMethodError in extconf.rb. Fixes
346
+ gem installation
347
+
348
+ * RCBC-79 Use RESTful flush
349
+
350
+ * Various build fixes
351
+
352
+ * Add attribute reader for Error::Base status code
353
+
354
+ * CCBC-98 Expose client temporary failure error
355
+
356
+ * RCBC-28 Implement Bucket#unlock
357
+
358
+ # Unlock the single key
359
+ val, _, cas = c.get("foo", :lock => true, :extended => true)
360
+ c.unlock("foo", :cas => cas)
361
+
362
+ # Unlock several keys
363
+ c.unlock("foo" => cas1, :bar => cas2)
364
+ #=> {"foo" => true, "bar" => true}
365
+
366
+ * Fix CAS conversion for Bucket#delete method for 32-bit systems
367
+
368
+ ## 1.1.5 (2012-09-17)
369
+
370
+ 3 files changed, 9 insertions(+), 5 deletions(-)
371
+
372
+ * RCBC-81 Fixed installing issue on Mac OS X.
373
+
374
+ ## 1.1.4 (2012-08-30)
375
+
376
+ 5 files changed, 64 insertions(+), 30 deletions(-)
377
+
378
+ * RCBC-37 Allow to pass intial list of nodes which will allow to
379
+ iterate addresses until alive node will be found.
380
+
381
+ Couchbase.connect(:node_list => ['example.com:8091', 'example.org:8091', 'example.net'])
382
+
383
+ * RCBC-70 Fixed UTF-8 in the keys. Original discussion
384
+ https://groups.google.com/d/topic/couchbase/bya0lSf9uGE/discussion
385
+
386
+ ## 1.2.0.dp6 (2012-06-28)
387
+
388
+ 21 files changed, 1520 insertions(+), 428 deletions(-)
389
+
390
+ * RCBC-47 Allow to skip username for protected buckets. The will use
391
+ bucket name for credentials.
392
+
393
+ * Expose number of replicas to the user
394
+
395
+ * RCBC-6 Implement Bucket#observe command to query durable state.
396
+ Examples:
397
+
398
+ # Query state of single key
399
+ c.observe("foo")
400
+ #=> [#<Couchbase::Result:0x00000001650df0 ...>, ...]
401
+
402
+ # Query state of multiple keys
403
+ keys = ["foo", "bar"]
404
+ stats = c.observe(keys)
405
+ stats.size #=> 2
406
+ stats["foo"] #=> [#<Couchbase::Result:0x00000001650df0 ...>, ...]
407
+
408
+ * RCBC-49 Storage functions with durability requirements
409
+
410
+ # Ensure that the key will be persisted at least on the one node
411
+ c.set("foo", "bar", :observe => {:persisted => 1})
412
+
413
+ * RCBC-50 Allow to read keys from replica
414
+
415
+ * RCBC-57 Expose timers API from libcouchbase
416
+
417
+ * RCBC-59 Replicate flags in Bucket#cas operation
418
+
419
+ * Apply timeout value before connection. Currently libcouchbase shares
420
+ timeouts for connection and IO operations. This patch allows to
421
+ setup timeout on the instantiating the connection.
422
+
423
+ * RCBC-39 Allow to specify delta for incr/decr in options
424
+
425
+ * RCBC-40 Fix Bucket#cas operation behaviour in async mode. The
426
+ callback of the Bucket#cas method is triggered only once, when it
427
+ fetches old value, and it isn't possible to receive notification if
428
+ the next store operation was successful. Example, append JSON
429
+ encoded value asynchronously:
430
+
431
+ c.default_format = :document
432
+ c.set("foo", {"bar" => 1})
433
+ c.run do
434
+ c.cas("foo") do |val|
435
+ case val.operation
436
+ when :get
437
+ val["baz"] = 2
438
+ val
439
+ when :set
440
+ # verify all is ok
441
+ puts "error: #{ret.error.inspect}" unless ret.success?
442
+ end
443
+ end
444
+ end
445
+ c.get("foo") #=> {"bar" => 1, "baz" => 2}
446
+
447
+ * RCBC-43 More docs and examples on views
448
+
449
+ * RCBC-37 Bootstrapping using multiple nodes
450
+
451
+ Couchbase.connect(:node_list => ['example.com:8091', 'example.org:8091', 'example.net'])
452
+
453
+ * Inherit StandardError instead RuntimeError for errors
454
+
455
+ ## 1.2.0.dp5 (2012-06-15)
456
+
457
+ 12 files changed, 939 insertions(+), 20 deletions(-)
458
+
459
+ * Integrate with Rack and Rails session store
460
+
461
+ # rack
462
+ require 'rack/session/couchbase'
463
+ use Rack::Session::Couchbase
464
+
465
+ # rails
466
+ require 'action_dispatch/middleware/session/couchbase_store'
467
+ AppName::Application.config.session_store :couchbase_store
468
+
469
+ * Implement cache store adapter for Rails
470
+
471
+ cache_options = {
472
+ :bucket => 'protected',
473
+ :username => 'protected',
474
+ :password => 'secret',
475
+ :expires_in => 30.seconds
476
+ }
477
+ config.cache_store = :couchbase_store, cache_options
478
+
479
+ * Implement key prefix (simple namespacing)
480
+
481
+ Couchbase.connect(:key_prefix => "prefix:")
482
+
483
+ * Allow to force assembling result Hash for multi-get
484
+
485
+ connection.get("foo", "bar")
486
+ #=> [1, 2]
487
+ connection.get("foo", "bar", :assemble_hash => true)
488
+ #=> {"foo" => 1, "bar" => 2}
489
+
490
+ ## 1.2.0.dp4 (2012-06-07)
491
+
492
+ 4 files changed, 34 insertions(+), 19 deletions(-)
493
+
494
+ * Update Bucket#replace documentation: it accepts :cas option
495
+
496
+ * RCBC-36 Fix segfault. Occasional segfault when accessing the
497
+ results of a View. https://gist.github.com/2883925
498
+
499
+ ## 1.2.0.dp3 (2012-06-06)
500
+
501
+ 4 files changed, 22 insertions(+), 4 deletions(-)
502
+
503
+ * Fix for multi_json < 1.3.3
504
+
505
+ * Break out from event loop for non-chunked responses. View results
506
+ are chunked by default, so there no problems, but other requests
507
+ like Bucket#save_design_doc() were "locking" awaiting forever.
508
+
509
+ ## 1.2.0.dp2 (2012-06-06)
510
+
511
+ 22 files changed, 859 insertions(+), 253 deletions(-)
512
+
513
+ * RCBC-31 Make Bucket#get more consistent. The pattern of using more
514
+ than one argument to determine if an array should be returned is not
515
+ idiomatic. Consider the case of a multi-get in an application where
516
+ I have n items to return. If there happens to be only one item it
517
+ will be treated differently than if there happens to be 2 items.
518
+
519
+ get(["foo"]) #=> ["bar"]
520
+ get("foo") #=> "bar"
521
+ get(["x"], :extended => true) #=> {"x"=>["xval", 0, 18336939621176836096]}
522
+
523
+ * Use monotonic high resolution clock
524
+
525
+ * Implement threshold for outgoing commands
526
+
527
+ * Allow to stop event loop from ruby
528
+
529
+ * RCBC-35 Fix the View parameters escaping. More info at
530
+ https://gist.github.com/2775050
531
+
532
+ * RCBC-34 Use multi_json gem. json_gem compatibility (require
533
+ 'yajl/json_gem') is notorious for causing all kinds of issues with
534
+ various gems. The most compatible way to use yajl is to call
535
+ Yajl::Parser and Yajl::Encoder directly.
536
+
537
+ * Allow to block and wait for part of the requests
538
+
539
+ * Fixed view iterator. It doesn't lock event loop anymore This used to
540
+ cause "locks", memory leaks or even segmentation fault.
541
+
542
+ * Define views only if "views" key presented
543
+
544
+ * Require yajl as development dependency
545
+
546
+ * RCBC-76 Implement get with lock operation. Examples:
547
+
548
+ # Get and lock key using default timeout
549
+ c.get("foo", :lock => true)
550
+
551
+ # Determine lock timeout parameters
552
+ c.stats.values_at("ep_getl_default_timeout", "ep_getl_max_timeout")
553
+ #=> [{"127.0.0.2:11210"=>"15"}, {"127.0.0.1:11210"=>"30"}]
554
+
555
+ # Get and lock key using custom timeout
556
+ c.get("foo", :lock => 3)
557
+
558
+ * Update documentation
559
+
560
+ ## 1.1.3 (2012-07-27)
561
+
562
+ 5 files changed, 192 insertions(+), 101 deletions(-)
563
+
564
+ * RCBC-64 The Couchbase::Bucket class hasn't implemented the #dup
565
+ method. So it caused SEGFAULT. The patch is implementing correct
566
+ function, which copy the internals and initializes new connection.
567
+
568
+ * RCBC-59 The flags might be reset if caller will use
569
+ Couchbase::Bucket#cas operation. Here is IRB session demonstrating
570
+ the issue:
571
+
572
+ irb> Couchbase.bucket.set("foo", "bar", :flags => 0x100)
573
+ 17982951084586893312
574
+ irb> Couchbase.bucket.cas("foo") { "baz" }
575
+ 1712422461213442048
576
+ irb> Couchbase.bucket.get("foo", :extended => true)
577
+ ["baz", 0, 1712422461213442048]
578
+
579
+
580
+ * RCBC-60 Make object_space GC protector per-bucket object. Previous
581
+ version provided not completely thread-safe bucket instance, because
582
+ it was sharing global hash for protecting objects, created in
583
+ extension, from garbage collecting.
584
+
585
+ ## 1.1.2 (2012-06-05)
586
+
587
+ 5 files changed, 9 insertions(+), 4 deletions(-)
588
+
589
+ * Upgrade libcouchbase dependency to 1.0.4. Version 1.0.4 includes
590
+ important stability fixes.
591
+
592
+ * Backport debugger patch. The gem used to require debugger as
593
+ development dependency. Unfortunately ruby-debug19 isn't supported
594
+ anymore for ruby 1.9.x. But there is new gem 'debugger'. This patch
595
+ replaces this dependency.
596
+
597
+ ## 1.2.0.dp (2012-04-10)
598
+
599
+ 19 files changed, 1606 insertions(+), 93 deletions(-)
600
+
601
+ * Properly handle hashes as Couchbase.connection_options. Fixed a bug
602
+ when 'Couchbase.connection_options' for "default" connection, when
603
+ there are several arguments to pass to the connect() function when
604
+ establishing thread local connection as below:
605
+
606
+ Couchbase.connection_options = {:port => 9000, :bucket => 'myapp'}
607
+
608
+ * Implement views. Couchbase Server Views are accessible using the
609
+ view APIs. Please refer to
610
+ http://www.couchbase.com/docs/couchbase-manual-2.0/couchbase-views.html
611
+ for getting started with views.
612
+
613
+ * Use verbose mode by default throwing exceptions on NOT_FOUND errors.
614
+ This means that quiet attribute is false now on new connections.
615
+
616
+ * Documentation fixes
617
+
618
+ ## 1.1.1 (2012-03-19)
619
+
620
+ 5 files changed, 83 insertions(+), 23 deletions(-)
621
+
622
+ * Flags are used differently in different clients for example between
623
+ Python and Ruby. This fix will force the format to a known value
624
+ irrespective of the flags.
625
+
626
+ * Calls between Ruby and C libraries for Couchbase which involved
627
+ default arguments had an associated arity of -1 which was not being
628
+ handled correctly. That is being handled correctly now.
629
+
630
+ ## 1.1.0 (2012-03-07)
631
+
632
+ 27 files changed, 2460 insertions(+), 849 deletions(-)
633
+
634
+ * With the usage of the URI parser from stdlib it is possible to
635
+ validate the bucket URI more strictly. Also, it is possible to
636
+ specify credentials in the URI like:
637
+ http://username:password@example.com:8091/pools/default/buckets/custom
638
+
639
+ * The "default" connection is available in thread local storage. This
640
+ mean that using the Couchbase.bucket method it is possible to get
641
+ access to current connection and there is no need to share
642
+ connections when running in multi-thread environment. Each thread
643
+ has its own connection reference.
644
+
645
+ * The direct dependency on libevent and libsasl has been removed. Now
646
+ the library doesn't require libevent headers installed.
647
+
648
+ * The disconnect and reconnect interfaces are implemented which
649
+ provide routines for explicit resource management. Connections were
650
+ freed only when the Garbage Collector found that the connection was
651
+ not being used. Now it's possible for the client to check if the
652
+ bucket was connected using 'connected?' or 'disconnect' it manually
653
+ or 'reconnect' using old settings.
654
+
655
+ * There were spurious timeout issues with a compound statement like
656
+ below. No timeout will occur unless there is a problem with the
657
+ connection.
658
+
659
+ connection.run do
660
+ connection.get("foo") {|ret| puts "got foo = #{ret.value}"}
661
+ sleep(5)
662
+ end
663
+
664
+ * It is not required to install libcouchbase or libvbucket on windows.
665
+
666
+ * It is possible to store nil as a value. It is possible to
667
+ distinguish a nil value from a missing key by looking at at the
668
+ value returned and the flags and CAS values as well.
669
+
670
+ * Based on the time out fix (CCBC-20), clients will be notified when
671
+ the connection was dropped or host isn't available.
672
+
673
+ ## 1.0.0 (2012-01-23)
674
+
675
+ 50 files changed, 4696 insertions(+), 2647 deletions(-)
676
+
677
+ * Port library to use libcouchbase instead of memcached gem.
678
+ Implemented following operations:
679
+
680
+ * get, []
681
+ * set, []=
682
+ * add
683
+ * replace
684
+ * append
685
+ * prepend
686
+ * compare-and-swap
687
+ * arithmetic (incr/decr)
688
+ * flush
689
+ * stats
690
+ * delete
691
+ * touch
692
+
693
+ * Introduce support for three data formats:
694
+
695
+ * document
696
+ * marshal
697
+ * plain
698
+
699
+ * Removed Views support
700
+
701
+ * Added benchmarks, couchbase vs. memcached vs. dalli
702
+
703
+ * Implement asynchronous protocol
704
+
705
+ ## 0.9.8 (2011-12-16)
706
+
707
+ 3 files changed, 8 insertions(+), 3 deletions(-)
708
+
709
+ * RCBC-10 Always specify credentials for non-default buckets. It was
710
+ impossible to store data in non-default buckets
711
+
712
+ ## 0.9.7 (2011-10-05)
713
+
714
+ 7 files changed, 31 insertions(+), 19 deletions(-)
715
+
716
+ * Fix design doc removing
717
+
718
+ * Fix 'set' method signature: add missing options argument
719
+
720
+ * Rename gem to 'couchbase' for easy of use. The github project still
721
+ is 'couchbase-ruby-client'
722
+
723
+ ## 0.9.6 (2011-10-04)
724
+
725
+ 13 files changed, 609 insertions(+), 99 deletions(-)
726
+
727
+ * Fix bug with decoding multiget result
728
+
729
+ * Allow create design documents from IO and String
730
+
731
+ * Rename 'json' format to 'document', and describe possible formats
732
+
733
+ * Allow to handle errors in view result stream
734
+
735
+ * Remove dependency on libyajl library: it bundled with yaji now
736
+
737
+ ## 0.9.5 (2011-08-24)
738
+
739
+ 4 files changed, 59 insertions(+), 28 deletions(-)
740
+
741
+ * Update README. Make it more human-friendly
742
+
743
+ * Removed dependency on will_paginate in development mode
744
+
745
+ ## 0.9.4 (2011-08-01)
746
+
747
+ 24 files changed, 1240 insertions(+), 78 deletions(-)
748
+
749
+ * Use streaming json parser to iterate over view results
750
+
751
+ * Update memcached gem dependency to v1.3
752
+
753
+ * Proxy TOUCH command to memcached client
754
+
755
+ * Fix minor bugs in RestClient and Document classes
756
+
757
+ * Disable CouchDB API for nodes without 'couchApiBase' key provided.
758
+
759
+ * Fix bug with unicode parsing in config listener
760
+
761
+ * 61f394e RCBC-5 Add Dave's test case: ensure memcached client
762
+ initialized. Fixes Timeout error on connecting to membase with
763
+ Couchbase.new on Ruby 1.8.7
764
+
765
+ ## 0.9.3 (2011-07-29)
766
+
767
+ 6 files changed, 167 insertions(+), 9 deletions(-)
768
+
769
+ * Use Latch (via Mutex and ConditionVariable) to wait until initial
770
+ setup will be finished.
771
+
772
+ * Update prefix for development views (from '$dev_' to 'dev_')
773
+
774
+ ## 0.9.2 (2011-07-28)
775
+
776
+ 5 files changed, 31 insertions(+), 20 deletions(-)
777
+
778
+ * Use zero TTL by default to store records forever
779
+
780
+ * Update documentation
781
+
782
+ * Wait until configuration is done
783
+
784
+ ## 0.9.1 (2011-07-25)
785
+
786
+ 3 files changed, 5 insertions(+), 2 deletions(-)
787
+
788
+ * Minor bugfix for RestClient initialization
789
+
790
+ ## 0.9.0 (2011-07-25)
791
+
792
+ 19 files changed, 1174 insertions(+)
793
+
794
+ * Initial public release. It supports most of the binary protocol
795
+ commands through memcached gem and also is able to listen to bucket
796
+ configuration and make View requests.