couchbase 1.2.0 → 1.2.1
Sign up to get free protection for your applications and to get access to all the features.
- data/RELEASE_NOTES.markdown +98 -85
- data/ext/couchbase_ext/multithread_plugin.c +54 -17
- data/ext/couchbase_ext/store.c +2 -1
- data/lib/couchbase/version.rb +1 -1
- metadata +4 -4
data/RELEASE_NOTES.markdown
CHANGED
@@ -3,116 +3,129 @@
|
|
3
3
|
This document is a list of user visible feature changes and important
|
4
4
|
bugfixes. Do not forget to update this doc in every important patch.
|
5
5
|
|
6
|
+
## 1.2.1 (2012-12-28)
|
7
|
+
|
8
|
+
* [major] RCBC-101 Persistence constraints were not passed to mutation
|
9
|
+
methods, so they were not applied properly.
|
10
|
+
|
11
|
+
* [major] RCBC-102 Inconsistent return values in case of storage
|
12
|
+
functions with persistence constraints. It always returns a Hash
|
13
|
+
in case of multi-set, even if there is only one document is being
|
14
|
+
set.
|
15
|
+
|
16
|
+
* [minor] Improve internal structures of multi-threaded IO plugin to
|
17
|
+
protect it from memory leaks when the Fiber object is forgotten.
|
18
|
+
|
6
19
|
## 1.2.0 (2012-12-12)
|
7
20
|
|
8
21
|
30 files changed, 2079 insertions(+), 662 deletions(-)
|
9
22
|
|
10
|
-
*
|
23
|
+
* New specialized io plugin for releasing Ruby GVL (thanks to
|
11
24
|
Sokolov Yura aka funny_falcon).
|
12
25
|
|
13
|
-
* Ruby 1.9.x uses global lock for ensuring integrity, and blocking
|
26
|
+
* Ruby 1.9.x uses a global lock for ensuring integrity, and blocking
|
14
27
|
calls should be called inside rb_thread_blocking_region to allow
|
15
|
-
other threads to be
|
28
|
+
other threads to be run.
|
16
29
|
|
17
|
-
* Ruby 1.8.7
|
30
|
+
* Ruby 1.8.7 has only green threads, so rb_thread_schedule
|
18
31
|
should be called manually.
|
19
32
|
|
20
|
-
* RCBC-42 Catch exceptions from ruby callbacks
|
33
|
+
* RCBC-42 Catch exceptions from ruby callbacks.
|
21
34
|
|
22
|
-
* RCBC-99 read out the StringIO contents in json gem monkey patch
|
35
|
+
* RCBC-99 read out the StringIO contents in json gem monkey patch.
|
23
36
|
|
24
|
-
* Use marshal serializer by default for session store
|
37
|
+
* Use marshal serializer by default for session store.
|
25
38
|
|
26
|
-
* Remove debugger development dependency
|
39
|
+
* Remove debugger development dependency.
|
27
40
|
|
28
|
-
* Fix memory leaks and performance improvements
|
41
|
+
* Fix memory leaks and performance improvements.
|
29
42
|
|
30
43
|
## 1.2.0.z.beta5 (2012-11-29)
|
31
44
|
|
32
45
|
25 files changed, 1419 insertions(+), 1230 deletions(-)
|
33
46
|
|
34
|
-
* RCBC-95 Use response body to clarify Couchbase::Error::HTTP
|
47
|
+
* RCBC-95 Use response body to clarify Couchbase::Error::HTTP.
|
35
48
|
|
36
|
-
* Fix memory leaks: in async mode context wasn't freed
|
49
|
+
* Fix memory leaks: in async mode context wasn't freed.
|
37
50
|
|
38
|
-
* Allow to setup default initial value for INCR/DECR on per
|
39
|
-
level.
|
51
|
+
* Allow caller to setup default initial value for INCR/DECR on per
|
52
|
+
connection level.
|
40
53
|
|
41
|
-
* Make error message about libcouchbase dependency more verbose
|
54
|
+
* Make error message about libcouchbase dependency more verbose.
|
42
55
|
|
43
56
|
## 1.2.0.z.beta4 (2012-11-21)
|
44
57
|
|
45
58
|
27 files changed, 311 insertions(+), 123 deletions(-)
|
46
59
|
|
47
|
-
* Increase default connection timeout for Views up to 75 seconds
|
60
|
+
* Increase default connection timeout for Views up to 75 seconds.
|
48
61
|
|
49
|
-
* RCBC-94 Reset global exception after usage
|
62
|
+
* RCBC-94 Reset global exception after usage.
|
50
63
|
|
51
64
|
* RCBC-89 Do not expose docs embedded in HTTP response. Use binary
|
52
65
|
protocol for it.
|
53
66
|
|
54
67
|
* Remove all_docs mentions. It isn't recommended to use it because of
|
55
|
-
performance
|
68
|
+
performance and support concerns.
|
56
69
|
|
57
70
|
* Protect against non string values in :plain mode. Will raise error
|
58
71
|
if the value given isn't a string.
|
59
72
|
|
60
|
-
* RCBC-90 Update documentation about session store
|
73
|
+
* RCBC-90 Update documentation about session store.
|
61
74
|
|
62
|
-
* Make rack session store adapter quiet
|
75
|
+
* Make rack session store adapter quiet.
|
63
76
|
|
64
|
-
* Update to recent libcouchbase API
|
77
|
+
* Update to recent libcouchbase API.
|
65
78
|
|
66
|
-
* Adjust version check for MultiJson monkeypatch (8098da1)
|
79
|
+
* Adjust version check for MultiJson monkeypatch (8098da1).
|
67
80
|
|
68
|
-
* Do not hide ValueFormat reason
|
81
|
+
* Do not hide ValueFormat reason.
|
69
82
|
|
70
83
|
## 1.2.0.z.beta3 (2012-10-16)
|
71
84
|
|
72
85
|
18 files changed, 241 insertions(+), 57 deletions(-)
|
73
86
|
|
74
|
-
* RCBC-52 Implement bucket create/delete operations
|
87
|
+
* RCBC-52 Implement bucket create/delete operations.
|
75
88
|
|
76
|
-
* Propogate status code for HTTP responses
|
89
|
+
* Propogate status code for HTTP responses.
|
77
90
|
|
78
|
-
* RCBC-87 Fix build error on macos
|
91
|
+
* RCBC-87 Fix build error on macos.
|
79
92
|
|
80
|
-
* Use global scope to find Error classes (thanks to @wr0ngway)
|
93
|
+
* Use global scope to find Error classes (thanks to @wr0ngway).
|
81
94
|
|
82
|
-
* Fix memory leaks
|
95
|
+
* Fix memory leaks.
|
83
96
|
|
84
|
-
* Update to recent libcouchbase API
|
97
|
+
* Update to recent libcouchbase API.
|
85
98
|
|
86
99
|
## 1.2.0.z.beta2 (2012-09-21)
|
87
100
|
|
88
101
|
3 files changed, 6 insertions(+), 2 deletions(-)
|
89
102
|
|
90
|
-
* RCBC-82 Not all rubies are fat on MacOS. Fixes build
|
103
|
+
* RCBC-82 Not all rubies are fat on MacOS. Fixes build.
|
91
104
|
|
92
105
|
## 1.2.0.z.beta (2012-09-18)
|
93
106
|
|
94
107
|
2 files changed, 5 insertions(+), 1 deletion(-)
|
95
108
|
|
96
|
-
* Fix version ordering by using ".z" prefix before .beta
|
109
|
+
* Fix version ordering by using ".z" prefix before .beta.
|
97
110
|
|
98
111
|
## 1.2.0.beta (2012-09-18)
|
99
112
|
|
100
113
|
51 files changed, 9301 insertions(+), 3364 deletions(-)
|
101
114
|
|
102
115
|
* RCBC-81 Protect against NoMethodError in extconf.rb. Fixes
|
103
|
-
gem installation
|
116
|
+
gem installation.
|
104
117
|
|
105
|
-
* RCBC-79 Use RESTful flush
|
118
|
+
* RCBC-79 Use RESTful flush.
|
106
119
|
|
107
|
-
* Various build fixes
|
120
|
+
* Various build fixes.
|
108
121
|
|
109
|
-
* Add attribute reader for Error::Base status code
|
122
|
+
* Add attribute reader for Error::Base status code.
|
110
123
|
|
111
|
-
* CCBC-98 Expose client temporary failure error
|
124
|
+
* CCBC-98 Expose client temporary failure error.
|
112
125
|
|
113
|
-
* RCBC-28 Implement Bucket#unlock
|
126
|
+
* RCBC-28 Implement Bucket#unlock.
|
114
127
|
|
115
|
-
* Fix CAS conversion for Bucket#delete method for 32-bit systems
|
128
|
+
* Fix CAS conversion for Bucket#delete method for 32-bit systems.
|
116
129
|
|
117
130
|
## 1.1.5 (2012-09-17)
|
118
131
|
|
@@ -124,10 +137,10 @@ bugfixes. Do not forget to update this doc in every important patch.
|
|
124
137
|
|
125
138
|
5 files changed, 64 insertions(+), 30 deletions(-)
|
126
139
|
|
127
|
-
* RCBC-37 Allow to pass intial list of nodes which will
|
128
|
-
iterate addresses until alive node
|
140
|
+
* RCBC-37 Allow app to pass intial list of nodes which will let client
|
141
|
+
iterate addresses until an alive node is found.
|
129
142
|
|
130
|
-
Couchbase.connect(:node_list => ['example.com:8091', 'example.org:8091', 'example.
|
143
|
+
Couchbase.connect(:node_list => ['node1.example.com:8091', 'node2.example.org:8091', 'node3.example.com:8091'])
|
131
144
|
|
132
145
|
* RCBC-70 Fixed UTF-8 in the keys. Original discussion
|
133
146
|
https://groups.google.com/d/topic/couchbase/bya0lSf9uGE/discussion
|
@@ -139,23 +152,23 @@ bugfixes. Do not forget to update this doc in every important patch.
|
|
139
152
|
* RCBC-47 Allow to skip username for protected buckets. The will use
|
140
153
|
bucket name for credentials.
|
141
154
|
|
142
|
-
* Expose number of replicas to the user
|
155
|
+
* Expose the number of replicas to the user.
|
143
156
|
|
144
|
-
* RCBC-6 Implement OBSERVE command
|
157
|
+
* RCBC-6 Implement OBSERVE command.
|
145
158
|
|
146
|
-
* RCBC-49 :observe option for storage functions
|
159
|
+
* RCBC-49 :observe option for storage functions.
|
147
160
|
|
148
|
-
* RCBC-50 Allow to read keys from replica
|
161
|
+
* RCBC-50 Allow to read keys from replica.
|
149
162
|
|
150
|
-
* RCBC-57 Expose timers API from libcouchbase
|
163
|
+
* RCBC-57 Expose timers API from libcouchbase.
|
151
164
|
|
152
|
-
* RCBC-59 Replicate flags in Bucket#cas operation
|
165
|
+
* RCBC-59 Replicate flags in Bucket#cas operation.
|
153
166
|
|
154
167
|
* Apply timeout value before connection. Currently libcouchbase shares
|
155
168
|
timeouts for connection and IO operations. This patch allows to
|
156
|
-
setup timeout
|
169
|
+
setup a timeout when instantiating the connection.
|
157
170
|
|
158
|
-
* RCBC-39 Allow to specify delta for incr/decr in options
|
171
|
+
* RCBC-39 Allow to specify delta for incr/decr in options.
|
159
172
|
|
160
173
|
* RCBC-40 Fix Bucket#cas operation behaviour in async mode. The
|
161
174
|
callback of the Bucket#cas method is triggered only once, when it
|
@@ -179,9 +192,9 @@ bugfixes. Do not forget to update this doc in every important patch.
|
|
179
192
|
end
|
180
193
|
c.get("foo") #=> {"bar" => 1, "baz" => 2}
|
181
194
|
|
182
|
-
* RCBC-43 More docs and examples on views
|
195
|
+
* RCBC-43 More docs and examples on views.
|
183
196
|
|
184
|
-
* RCBC-37 Bootstrapping using multiple nodes
|
197
|
+
* RCBC-37 Bootstrapping using multiple nodes.
|
185
198
|
|
186
199
|
Couchbase.connect(:node_list => ['example.com:8091', 'example.org:8091', 'example.net'])
|
187
200
|
|
@@ -191,7 +204,7 @@ bugfixes. Do not forget to update this doc in every important patch.
|
|
191
204
|
|
192
205
|
12 files changed, 939 insertions(+), 20 deletions(-)
|
193
206
|
|
194
|
-
* Integrate with Rack and Rails session store
|
207
|
+
* Integrate with Rack and Rails session store.
|
195
208
|
|
196
209
|
# rack
|
197
210
|
require 'rack/session/couchbase'
|
@@ -201,7 +214,7 @@ bugfixes. Do not forget to update this doc in every important patch.
|
|
201
214
|
require 'action_dispatch/middleware/session/couchbase_store'
|
202
215
|
AppName::Application.config.session_store :couchbase_store
|
203
216
|
|
204
|
-
* Implement cache store adapter for Rails
|
217
|
+
* Implement cache store adapter for Rails.
|
205
218
|
|
206
219
|
cache_options = {
|
207
220
|
:bucket => 'protected',
|
@@ -211,11 +224,11 @@ bugfixes. Do not forget to update this doc in every important patch.
|
|
211
224
|
}
|
212
225
|
config.cache_store = :couchbase_store, cache_options
|
213
226
|
|
214
|
-
* Implement key prefix (simple namespacing)
|
227
|
+
* Implement key prefix (simple namespacing).
|
215
228
|
|
216
229
|
Couchbase.connect(:key_prefix => "prefix:")
|
217
230
|
|
218
|
-
* Allow to force assembling result Hash for multi-get
|
231
|
+
* Allow to force assembling result Hash for multi-get.
|
219
232
|
|
220
233
|
connection.get("foo", "bar")
|
221
234
|
#=> [1, 2]
|
@@ -226,7 +239,7 @@ bugfixes. Do not forget to update this doc in every important patch.
|
|
226
239
|
|
227
240
|
4 files changed, 34 insertions(+), 19 deletions(-)
|
228
241
|
|
229
|
-
* Update replace documentation: it accepts :cas option
|
242
|
+
* Update replace documentation: it accepts :cas option.
|
230
243
|
|
231
244
|
* RCBC-36 Fix segfault. Ocassional segfault when accessing the
|
232
245
|
results of a View. https://gist.github.com/2883925
|
@@ -235,10 +248,10 @@ bugfixes. Do not forget to update this doc in every important patch.
|
|
235
248
|
|
236
249
|
4 files changed, 22 insertions(+), 4 deletions(-)
|
237
250
|
|
238
|
-
* Fix for multi_json < 1.3.3
|
251
|
+
* Fix for multi_json < 1.3.3.
|
239
252
|
|
240
253
|
* Break out from event loop for non-chunked responses (fix creating
|
241
|
-
design create)
|
254
|
+
design create).
|
242
255
|
|
243
256
|
## 1.2.0.dp2 (2012-06-06)
|
244
257
|
|
@@ -254,11 +267,11 @@ bugfixes. Do not forget to update this doc in every important patch.
|
|
254
267
|
get("foo") #=> "bar"
|
255
268
|
get(["x"], :extended => true) #=> {"x"=>["xval", 0, 18336939621176836096]}
|
256
269
|
|
257
|
-
* Use monotonic high resolution clock
|
270
|
+
* Use monotonic high resolution clock.
|
258
271
|
|
259
|
-
* Implement threshold for outgoing commands
|
272
|
+
* Implement threshold for outgoing commands.
|
260
273
|
|
261
|
-
* Allow to
|
274
|
+
* Allow event loop to be stopped from ruby.
|
262
275
|
|
263
276
|
* RCBC-35 Fix the View parameters escaping. More info at
|
264
277
|
https://gist.github.com/2775050
|
@@ -268,17 +281,17 @@ bugfixes. Do not forget to update this doc in every important patch.
|
|
268
281
|
various gems. The most compatible way to use yajl is to call
|
269
282
|
Yajl::Parser and Yajl::Encoder directly.
|
270
283
|
|
271
|
-
* Allow
|
284
|
+
* Allow block and wait for part of the request.
|
272
285
|
|
273
|
-
* Fix view iterator
|
286
|
+
* Fix view iterator to not lock the event loop anymore.
|
274
287
|
|
275
|
-
* Define views only if "views" key presented
|
288
|
+
* Define views only if "views" key presented.
|
276
289
|
|
277
|
-
* Require yajl as development dependency
|
290
|
+
* Require yajl as development dependency.
|
278
291
|
|
279
|
-
* Implement get with lock operation
|
292
|
+
* Implement get with lock operation.
|
280
293
|
|
281
|
-
* Update documentation
|
294
|
+
* Update documentation.
|
282
295
|
|
283
296
|
## 1.1.3 (2012-07-27)
|
284
297
|
|
@@ -411,28 +424,28 @@ bugfixes. Do not forget to update this doc in every important patch.
|
|
411
424
|
* marshal
|
412
425
|
* plain
|
413
426
|
|
414
|
-
* Removed Views support
|
427
|
+
* Removed Views support.
|
415
428
|
|
416
429
|
* Added benchmarks, couchbase vs. memcached vs. dalli
|
417
430
|
|
418
|
-
* Implement asynchronous protocol
|
431
|
+
* Implement asynchronous protocol.
|
419
432
|
|
420
|
-
* e36c2e7 Implement basic commands
|
433
|
+
* e36c2e7 Implement basic commands.
|
421
434
|
|
422
435
|
## 0.9.8 (2011-12-16)
|
423
436
|
|
424
437
|
3 files changed, 8 insertions(+), 3 deletions(-)
|
425
438
|
|
426
439
|
* RCBC-10 Always specify credentials for non-default buckets. It was
|
427
|
-
impossible to store data in non-default buckets
|
440
|
+
impossible to store data in non-default buckets.
|
428
441
|
|
429
442
|
## 0.9.7 (2011-10-05)
|
430
443
|
|
431
444
|
7 files changed, 31 insertions(+), 19 deletions(-)
|
432
445
|
|
433
|
-
* Fix design doc
|
446
|
+
* Fix design doc removal.
|
434
447
|
|
435
|
-
* Fix 'set' method signature: add missing options argument
|
448
|
+
* Fix 'set' method signature: add missing options argument.
|
436
449
|
|
437
450
|
* Rename gem to 'couchbase' for easy of use. The github project still
|
438
451
|
is 'couchbase-ruby-client'
|
@@ -455,29 +468,29 @@ bugfixes. Do not forget to update this doc in every important patch.
|
|
455
468
|
|
456
469
|
4 files changed, 59 insertions(+), 28 deletions(-)
|
457
470
|
|
458
|
-
* Update README. Make it more human-friendly
|
471
|
+
* Update README. Make it more human-friendly.
|
459
472
|
|
460
|
-
* Removed depency on will_paginate in development mode
|
473
|
+
* Removed depency on will_paginate in development mode.
|
461
474
|
|
462
475
|
## 0.9.4 (2011-08-01)
|
463
476
|
|
464
477
|
24 files changed, 1240 insertions(+), 78 deletions(-)
|
465
478
|
|
466
|
-
* Use streaming json parser to iterate over view results
|
479
|
+
* Use streaming json parser to iterate over view results.
|
467
480
|
|
468
|
-
* Update memcached gem dependency to v1.3
|
481
|
+
* Update memcached gem dependency to v1.3.
|
469
482
|
|
470
|
-
* Proxy TOUCH command to memcached client
|
483
|
+
* Proxy TOUCH command to memcached client.
|
471
484
|
|
472
|
-
* Fix minor bugs in RestClient and Document classes
|
485
|
+
* Fix minor bugs in RestClient and Document classes.
|
473
486
|
|
474
487
|
* Disable CouchDB API for nodes without 'couchApiBase' key provided.
|
475
488
|
|
476
|
-
* Fix bug with unicode parsing in config listener
|
489
|
+
* Fix bug with unicode parsing in config listener.
|
477
490
|
|
478
491
|
* 61f394e RCBC-5 Add Dave's test case: ensure memcached client
|
479
492
|
initialized. Fixes Timeout error on connecting to membase with
|
480
|
-
Couchbase.new on Ruby 1.8.7
|
493
|
+
Couchbase.new on Ruby 1.8.7.
|
481
494
|
|
482
495
|
## 0.9.3 (2011-07-29)
|
483
496
|
|
@@ -486,23 +499,23 @@ bugfixes. Do not forget to update this doc in every important patch.
|
|
486
499
|
* Use Latch (via Mutex and ConditionVariable) to wait until initial
|
487
500
|
setup will be finished.
|
488
501
|
|
489
|
-
* Update prefix for development views (from '$dev_' to 'dev_')
|
502
|
+
* Update prefix for development views (from '$dev_' to 'dev_').
|
490
503
|
|
491
504
|
## 0.9.2 (2011-07-28)
|
492
505
|
|
493
506
|
5 files changed, 31 insertions(+), 20 deletions(-)
|
494
507
|
|
495
|
-
* Use zero TTL by default to store records forever
|
508
|
+
* Use zero TTL by default to store records forever.
|
496
509
|
|
497
|
-
* Update documentation
|
510
|
+
* Update documentation.
|
498
511
|
|
499
|
-
* Wait until configuration is done
|
512
|
+
* Wait until configuration is done.
|
500
513
|
|
501
514
|
## 0.9.1 (2011-07-25)
|
502
515
|
|
503
516
|
3 files changed, 5 insertions(+), 2 deletions(-)
|
504
517
|
|
505
|
-
* Minor bugfix for RestClient initialization
|
518
|
+
* Minor bugfix for RestClient initialization.
|
506
519
|
|
507
520
|
## 0.9.0 (2011-07-25)
|
508
521
|
|
@@ -690,6 +690,22 @@ typedef struct loop_select_arg {
|
|
690
690
|
rb_fdset_t in, out;
|
691
691
|
} ls_arg;
|
692
692
|
|
693
|
+
static void
|
694
|
+
ls_arg_free(void *p) {
|
695
|
+
ls_arg *args = p;
|
696
|
+
if (args) {
|
697
|
+
rb_fd_term(&args->in);
|
698
|
+
rb_fd_term(&args->out);
|
699
|
+
xfree(args);
|
700
|
+
}
|
701
|
+
}
|
702
|
+
|
703
|
+
static VALUE
|
704
|
+
ls_arg_alloc(ls_arg **args)
|
705
|
+
{
|
706
|
+
return Data_Make_Struct(rb_cObject, ls_arg, 0, ls_arg_free, *args);
|
707
|
+
}
|
708
|
+
|
693
709
|
static VALUE
|
694
710
|
loop_run_select(VALUE argp)
|
695
711
|
{
|
@@ -776,10 +792,12 @@ loop_run_select(VALUE argp)
|
|
776
792
|
static VALUE
|
777
793
|
loop_select_cleanup(VALUE argp)
|
778
794
|
{
|
779
|
-
ls_arg *args = (
|
780
|
-
|
781
|
-
|
782
|
-
|
795
|
+
ls_arg *args = DATA_PTR(argp);
|
796
|
+
if (args) {
|
797
|
+
callbacks_clean(&args->loop->callbacks);
|
798
|
+
ls_arg_free(args);
|
799
|
+
DATA_PTR(argp) = 0;
|
800
|
+
}
|
783
801
|
return Qnil;
|
784
802
|
}
|
785
803
|
/* loop select implementaion end */
|
@@ -841,6 +859,24 @@ struct poll_args {
|
|
841
859
|
int lerrno;
|
842
860
|
};
|
843
861
|
|
862
|
+
static void
|
863
|
+
lp_arg_free(void *p)
|
864
|
+
{
|
865
|
+
lp_arg *args = p;
|
866
|
+
if (args) {
|
867
|
+
if (args->fds) {
|
868
|
+
free(args->fds);
|
869
|
+
}
|
870
|
+
xfree(args);
|
871
|
+
}
|
872
|
+
}
|
873
|
+
|
874
|
+
static VALUE
|
875
|
+
lp_arg_alloc(lp_arg **args)
|
876
|
+
{
|
877
|
+
return Data_Make_Struct(rb_cObject, lp_arg, 0, lp_arg_free, *args);
|
878
|
+
}
|
879
|
+
|
844
880
|
#ifdef HAVE_RB_THREAD_BLOCKING_REGION
|
845
881
|
static VALUE
|
846
882
|
loop_blocking_poll(void *argp)
|
@@ -855,7 +891,7 @@ loop_blocking_poll(void *argp)
|
|
855
891
|
static VALUE
|
856
892
|
loop_run_poll(VALUE argp)
|
857
893
|
{
|
858
|
-
lp_arg *args = (
|
894
|
+
lp_arg *args = (lp_arg*)argp;
|
859
895
|
rb_mt_loop *loop = args->loop;
|
860
896
|
struct timespec ts;
|
861
897
|
hrtime_t now, next_time;
|
@@ -984,11 +1020,12 @@ retry:
|
|
984
1020
|
static VALUE
|
985
1021
|
loop_poll_cleanup(VALUE argp)
|
986
1022
|
{
|
987
|
-
lp_arg *args = (
|
988
|
-
if (args
|
989
|
-
|
1023
|
+
lp_arg *args = DATA_PTR(argp);
|
1024
|
+
if (args) {
|
1025
|
+
callbacks_clean(&args->loop->callbacks);
|
1026
|
+
lp_arg_free(args);
|
1027
|
+
DATA_PTR(argp) = 0;
|
990
1028
|
}
|
991
|
-
callbacks_clean(&args->loop->callbacks);
|
992
1029
|
return Qnil;
|
993
1030
|
}
|
994
1031
|
#endif
|
@@ -1006,17 +1043,17 @@ loop_run(rb_mt_loop *loop)
|
|
1006
1043
|
lcb_socket_t max = events_max_fd(&loop->events);
|
1007
1044
|
int use_poll = max >= 128;
|
1008
1045
|
if (use_poll) {
|
1009
|
-
lp_arg args;
|
1010
|
-
|
1011
|
-
args
|
1012
|
-
rb_ensure(loop_run_poll, (VALUE)
|
1046
|
+
lp_arg *args;
|
1047
|
+
VALUE argp = lp_arg_alloc(&args);
|
1048
|
+
args->loop = loop;
|
1049
|
+
rb_ensure(loop_run_poll, (VALUE)args, loop_poll_cleanup, argp);
|
1013
1050
|
} else
|
1014
1051
|
#endif
|
1015
1052
|
{
|
1016
|
-
ls_arg args;
|
1017
|
-
|
1018
|
-
args
|
1019
|
-
rb_ensure(loop_run_select, (VALUE)
|
1053
|
+
ls_arg *args;
|
1054
|
+
VALUE argp = ls_arg_alloc(&args);
|
1055
|
+
args->loop = loop;
|
1056
|
+
rb_ensure(loop_run_select, (VALUE)args, loop_select_cleanup, argp);
|
1020
1057
|
}
|
1021
1058
|
}
|
1022
1059
|
}
|
data/ext/couchbase_ext/store.c
CHANGED
@@ -142,6 +142,7 @@ cb_bucket_store(lcb_storage_t cmd, int argc, VALUE *argv, VALUE self)
|
|
142
142
|
ctx->proc = cb_gc_protect(bucket, proc);
|
143
143
|
ctx->observe_options = cb_gc_protect(bucket, obs);
|
144
144
|
ctx->exception = Qnil;
|
145
|
+
obs = params.cmd.store.observe;
|
145
146
|
ctx->nqueries = params.cmd.store.num;
|
146
147
|
err = lcb_store(bucket->handle, (const void *)ctx,
|
147
148
|
params.cmd.store.num, params.cmd.store.ptr);
|
@@ -173,7 +174,7 @@ cb_bucket_store(lcb_storage_t cmd, int argc, VALUE *argv, VALUE self)
|
|
173
174
|
}
|
174
175
|
if (RTEST(obs)) {
|
175
176
|
cb_gc_unprotect(bucket, obs);
|
176
|
-
|
177
|
+
rv = rb_funcall(bucket->self, cb_id_observe_and_wait, 2, rv, obs);
|
177
178
|
}
|
178
179
|
if (params.cmd.store.num > 1) {
|
179
180
|
return rv; /* return as a hash {key => cas, ...} */
|
data/lib/couchbase/version.rb
CHANGED
metadata
CHANGED
@@ -1,13 +1,13 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: couchbase
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
hash:
|
4
|
+
hash: 29
|
5
5
|
prerelease:
|
6
6
|
segments:
|
7
7
|
- 1
|
8
8
|
- 2
|
9
|
-
-
|
10
|
-
version: 1.2.
|
9
|
+
- 1
|
10
|
+
version: 1.2.1
|
11
11
|
platform: ruby
|
12
12
|
authors:
|
13
13
|
- Couchbase
|
@@ -15,7 +15,7 @@ autorequire:
|
|
15
15
|
bindir: bin
|
16
16
|
cert_chain: []
|
17
17
|
|
18
|
-
date: 2012-12-
|
18
|
+
date: 2012-12-28 00:00:00 +03:00
|
19
19
|
default_executable:
|
20
20
|
dependencies:
|
21
21
|
- !ruby/object:Gem::Dependency
|