couchbase 0.9.8 → 1.0.0

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.
Files changed (51) hide show
  1. data/.gitignore +8 -0
  2. data/.yardopts +5 -0
  3. data/HISTORY.markdown +14 -10
  4. data/README.markdown +293 -98
  5. data/Rakefile +19 -24
  6. data/couchbase.gemspec +25 -7
  7. data/ext/couchbase_ext/couchbase_ext.c +2332 -0
  8. data/ext/couchbase_ext/extconf.rb +102 -0
  9. data/lib/couchbase.rb +20 -30
  10. data/lib/couchbase/bucket.rb +43 -112
  11. data/lib/couchbase/version.rb +3 -2
  12. data/tasks/benchmark.rake +6 -0
  13. data/tasks/compile.rake +52 -0
  14. data/tasks/doc.rake +27 -0
  15. data/tasks/test.rake +94 -0
  16. data/tasks/util.rake +21 -0
  17. data/test/profile/.gitignore +1 -0
  18. data/test/profile/Gemfile +6 -0
  19. data/test/profile/benchmark.rb +195 -0
  20. data/test/setup.rb +107 -18
  21. data/test/test_arithmetic.rb +98 -0
  22. data/test/test_async.rb +211 -0
  23. data/test/test_bucket.rb +126 -23
  24. data/test/test_cas.rb +59 -0
  25. data/test/test_couchbase.rb +22 -3
  26. data/test/test_delete.rb +63 -0
  27. data/test/test_errors.rb +82 -0
  28. data/test/test_flush.rb +49 -0
  29. data/test/test_format.rb +98 -0
  30. data/test/test_get.rb +236 -0
  31. data/test/test_stats.rb +53 -0
  32. data/test/test_store.rb +186 -0
  33. data/test/test_touch.rb +57 -0
  34. data/test/test_version.rb +17 -0
  35. metadata +72 -58
  36. data/lib/couchbase/couchdb.rb +0 -107
  37. data/lib/couchbase/document.rb +0 -71
  38. data/lib/couchbase/http_status.rb +0 -118
  39. data/lib/couchbase/latch.rb +0 -71
  40. data/lib/couchbase/memcached.rb +0 -372
  41. data/lib/couchbase/node.rb +0 -49
  42. data/lib/couchbase/rest_client.rb +0 -124
  43. data/lib/couchbase/view.rb +0 -182
  44. data/test/support/buckets-config.json +0 -843
  45. data/test/support/sample_design_doc.json +0 -9
  46. data/test/test_couchdb.rb +0 -98
  47. data/test/test_document.rb +0 -11
  48. data/test/test_latch.rb +0 -88
  49. data/test/test_memcached.rb +0 -59
  50. data/test/test_rest_client.rb +0 -14
  51. data/test/test_view.rb +0 -98
@@ -1,49 +0,0 @@
1
- # Author:: Couchbase <info@couchbase.com>
2
- # Copyright:: 2011 Couchbase, Inc.
3
- # License:: Apache License, Version 2.0
4
- #
5
- # Licensed under the Apache License, Version 2.0 (the "License");
6
- # you may not use this file except in compliance with the License.
7
- # You may obtain a copy of the License at
8
- #
9
- # http://www.apache.org/licenses/LICENSE-2.0
10
- #
11
- # Unless required by applicable law or agreed to in writing, software
12
- # distributed under the License is distributed on an "AS IS" BASIS,
13
- # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14
- # See the License for the specific language governing permissions and
15
- # limitations under the License.
16
- #
17
-
18
- module Couchbase
19
- class Node
20
- attr_accessor :status, :hostname, :ports, :couch_api_base
21
-
22
- def initialize(status, hostname, ports, couch_api_base)
23
- @status = status
24
- @hostname = hostname
25
- @ports = ports
26
- @couch_api_base = couch_api_base
27
- end
28
-
29
- %w(healthy warmup unhealthy).each do |status|
30
- class_eval(<<-EOM)
31
- def #{status}?
32
- @status == '#{status}'
33
- end
34
- EOM
35
- end
36
-
37
- def have_couch_api?
38
- !! @couch_api_base
39
- end
40
-
41
- def couch_api_base
42
- if @couch_api_base
43
- @couch_api_base
44
- else
45
- raise NotImplemented, "CouchDB API isn't available for the node #{@hostname}"
46
- end
47
- end
48
- end
49
- end
@@ -1,124 +0,0 @@
1
- # Author:: Couchbase <info@couchbase.com>
2
- # Copyright:: 2011 Couchbase, Inc.
3
- # License:: Apache License, Version 2.0
4
- #
5
- # Licensed under the Apache License, Version 2.0 (the "License");
6
- # you may not use this file except in compliance with the License.
7
- # You may obtain a copy of the License at
8
- #
9
- # http://www.apache.org/licenses/LICENSE-2.0
10
- #
11
- # Unless required by applicable law or agreed to in writing, software
12
- # distributed under the License is distributed on an "AS IS" BASIS,
13
- # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14
- # See the License for the specific language governing permissions and
15
- # limitations under the License.
16
- #
17
-
18
- require 'yajl'
19
- require 'curb'
20
-
21
- module Couchbase
22
- module RestClient
23
- def initialize(pool_uri, options = {}); end
24
-
25
- def http_get(uri, options = {})
26
- execute(:get, uri, options)
27
- end
28
-
29
- def http_head(uri, options = {})
30
- execute(:head, uri, options)
31
- end
32
-
33
- def http_delete(uri, options = {})
34
- execute(:delete, uri, options)
35
- end
36
-
37
- def http_post(uri, options = {}, payload = nil)
38
- execute(:post, uri, options, payload)
39
- end
40
-
41
- def http_put(uri, options = {}, payload = nil)
42
- execute(:put, uri, options, payload)
43
- end
44
-
45
- def curl_easy(uri, options = {})
46
- curl = Curl::Easy.new(build_query(uri, options[:params]))
47
- curl.useragent = "couchbase-ruby-client/#{Couchbase::VERSION}"
48
- if @credentials
49
- curl.http_auth_types = :basic
50
- curl.username = @credentials[:username]
51
- curl.password = @credentials[:password]
52
- end
53
- curl.verbose = true if Kernel.respond_to?(:debugger)
54
- curl.headers.update(options[:headers] || {})
55
- curl
56
- end
57
-
58
- protected
59
-
60
- def execute(method, uri, options = {}, payload = nil)
61
- curl = curl_easy(uri, options)
62
- data = case payload
63
- when IO
64
- payload
65
- when Hash
66
- Yajl::Encoder.encode(payload)
67
- when Couchbase::Document
68
- Yajl::Encoder.encode(payload.data)
69
- end
70
- case method
71
- when :put
72
- curl.http_put(data)
73
- when :post
74
- curl.http_post(data)
75
- when :delete
76
- curl.http_delete
77
- when :head
78
- curl.http_head
79
- when :get
80
- curl.http_get
81
- end
82
- data = Yajl::Parser.parse(curl.body_str)
83
- if error = HttpStatus::Errors[curl.response_code]
84
- raise error.new(data['error'], data['reason'])
85
- else
86
- data
87
- end
88
- end
89
-
90
- def build_query(uri, params = nil)
91
- uri = uri.dup
92
- return uri if params.nil? || params.empty?
93
- uri << "?"
94
- uri << params.map do |k, v|
95
- if v.class == Array
96
- build_query(v.map { |x| [k, x] })
97
- else
98
- if %w{key startkey endkey}.include?(k.to_s)
99
- v = Yajl::Encoder.encode(v)
100
- end
101
- "#{escape(k)}=#{escape(v)}"
102
- end
103
- end.join("&")
104
- end
105
-
106
- def escape(s)
107
- s.to_s.gsub(/([^ a-zA-Z0-9_.-]+)/n) {
108
- '%'+$1.unpack('H2'*bytesize($1)).join('%').upcase
109
- }.tr(' ', '+')
110
- end
111
-
112
- # Return the bytesize of String; uses String#size under Ruby 1.8 and
113
- # String#bytesize under 1.9.
114
- if ''.respond_to?(:bytesize)
115
- def bytesize(string)
116
- string.bytesize
117
- end
118
- else
119
- def bytesize(string)
120
- string.size
121
- end
122
- end
123
- end
124
- end
@@ -1,182 +0,0 @@
1
- # Author:: Couchbase <info@couchbase.com>
2
- # Copyright:: 2011 Couchbase, Inc.
3
- # License:: Apache License, Version 2.0
4
- #
5
- # Licensed under the Apache License, Version 2.0 (the "License");
6
- # you may not use this file except in compliance with the License.
7
- # You may obtain a copy of the License at
8
- #
9
- # http://www.apache.org/licenses/LICENSE-2.0
10
- #
11
- # Unless required by applicable law or agreed to in writing, software
12
- # distributed under the License is distributed on an "AS IS" BASIS,
13
- # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14
- # See the License for the specific language governing permissions and
15
- # limitations under the License.
16
- #
17
-
18
- require 'yaji'
19
-
20
- module Couchbase
21
- class View
22
- include Enumerable
23
-
24
- # Set up view endpoint and optional params
25
- #
26
- # @param [ Couchbase::Bucket ] connection Connection object which
27
- # stores all info about how to make requests to Couchbase views.
28
- #
29
- # @param [ String ] endpoint Full CouchDB view URI.
30
- #
31
- # @param [ Hash ] params Optional parameter which will be passed to
32
- # Couchbase::View#each
33
- #
34
- def initialize(connection, endpoint, params = {})
35
- @connection = connection
36
- @endpoint = endpoint
37
- @params = params
38
- end
39
-
40
- # Yields each document that was fetched by view. It doesn't instantiate
41
- # all the results because of streaming JSON parser. Returns Enumerator
42
- # unless block given.
43
- #
44
- # @example Use each method with block
45
- #
46
- # view.each do |doc|
47
- # # do something with doc
48
- # end
49
- #
50
- # @example Use Enumerator version
51
- #
52
- # enum = view.each # request hasn't issued yet
53
- # enum.map{|doc| doc.title.upcase}
54
- #
55
- # @example Pass options during view initialization
56
- #
57
- # endpoint = "http://localhost:5984/default/_design/blog/_view/recent"
58
- # view = View.new(conn, endpoint, :descending => true)
59
- # view.each do |document|
60
- # # do something with document
61
- # end
62
- #
63
- # @param [ Hash ] params Params for Couchdb query. Some useful are:
64
- # :startkey, :startkey_docid, :descending.
65
- #
66
- def each(params = {})
67
- return enum_for(:each, params) unless block_given?
68
- fetch(params) {|doc| yield(doc)}
69
- end
70
-
71
- # Registers callback function for handling error objects in view
72
- # results stream.
73
- #
74
- # @yieldparam [String] from Location of the node where error occured
75
- # @yieldparam [String] reason The reason message describing what
76
- # happened.
77
- #
78
- # @example Using <tt>#on_error</tt> to log all errors in view result
79
- #
80
- # # JSON-encoded view result
81
- # #
82
- # # {
83
- # # "total_rows": 0,
84
- # # "rows": [ ],
85
- # # "errors": [
86
- # # {
87
- # # "from": "127.0.0.1:5984",
88
- # # "reason": "Design document `_design/testfoobar` missing in database `test_db_b`."
89
- # # },
90
- # # {
91
- # # "from": "http:// localhost:5984/_view_merge/",
92
- # # "reason": "Design document `_design/testfoobar` missing in database `test_db_c`."
93
- # # }
94
- # # ]
95
- # # }
96
- #
97
- # view.on_error do |from, reason|
98
- # logger.warn("#{view.inspect} received the error '#{reason}' from #{from}")
99
- # end
100
- # docs = view.fetch
101
- #
102
- # @example More concise example to just count errors
103
- #
104
- # errcount = 0
105
- # view.on_error{|f,r| errcount += 1}.fetch
106
- #
107
- def on_error(&callback)
108
- @on_error = callback
109
- self # enable call chains
110
- end
111
-
112
- # Performs query to CouchDB view. This method will stream results if block
113
- # given or return complete result set otherwise. In latter case it defines
114
- # method <tt>total_entries</tt> returning <tt>total_rows</tt> entry from
115
- # CouchDB result object.
116
- #
117
- # @param [Hash] params parameters for CouchDB query. See here the full
118
- # list: http://wiki.apache.org/couchdb/HTTP_view_API#Querying_Options
119
- #
120
- # @yieldparam [Couchbase::Document] document
121
- #
122
- # @return [Array] with documents. There will be <tt>total_entries</tt>
123
- # method defined on this array if it's possible.
124
- #
125
- # @raise [Couchbase::ViewError] when <tt>on_error</tt> callback is nil and
126
- # error object found in the result stream.
127
- #
128
- def fetch(params = {})
129
- curl = @connection.curl_easy(@endpoint, :params => @params.merge(params))
130
- if block_given?
131
- iter = YAJI::Parser.new(curl).each(["rows/", "errors/"], :with_path => true)
132
- begin
133
- loop do
134
- path, obj = iter.next
135
- if path == "errors/"
136
- from, reason = obj["from"], obj["reason"]
137
- if @on_error
138
- @on_error.call(from, reason)
139
- else
140
- raise ViewError.new(from, reason)
141
- end
142
- else
143
- yield Document.new(self, obj)
144
- end
145
- end
146
- rescue StopIteration
147
- end
148
- else
149
- iter = YAJI::Parser.new(curl).each(["total_rows", "rows/", "errors/"], :with_path => true)
150
- docs = []
151
- begin
152
- path, obj = iter.next
153
- if path == "total_rows"
154
- # if total_rows key present, save it and take next object
155
- total_rows = obj
156
- path, obj = iter.next
157
- end
158
- loop do
159
- if path == "errors/"
160
- from, reason = obj["from"], obj["reason"]
161
- if @on_error
162
- @on_error.call(from, reason)
163
- else
164
- raise ViewError.new(from, reason)
165
- end
166
- else
167
- docs << Document.new(self, obj)
168
- end
169
- path, obj = iter.next
170
- end
171
- rescue StopIteration
172
- end
173
- docs.instance_eval("def total_entries; #{total_rows}; end")
174
- return docs
175
- end
176
- end
177
-
178
- def inspect
179
- %(#<#{self.class.name}:#{self.object_id} @endpoint=#{@endpoint.inspect} @params=#{@params.inspect}>)
180
- end
181
- end
182
- end
@@ -1,843 +0,0 @@
1
- [
2
- {
3
- "name": "default",
4
- "bucketType": "membase",
5
- "authType": "sasl",
6
- "saslPassword": "",
7
- "proxyPort": 0,
8
- "uri": "/pools/default/buckets/default",
9
- "streamingUri": "/pools/default/bucketsStreaming/default",
10
- "flushCacheUri": "/pools/default/buckets/default/controller/doFlush",
11
- "nodes": [
12
- {
13
- "systemStats": {
14
- "cpu_utilization_rate": 1.9950124688279303,
15
- "swap_total": 7999582208,
16
- "swap_used": 0
17
- },
18
- "interestingStats": {
19
- },
20
- "uptime": "4118",
21
- "memoryTotal": 8308645888,
22
- "memoryFree": 4128649216,
23
- "mcdMemoryReserved": 6338,
24
- "mcdMemoryAllocated": 6338,
25
- "couchApiBase": "http://127.0.0.1:5984/default",
26
- "replication": 1.0,
27
- "clusterMembership": "active",
28
- "status": "warmup",
29
- "thisNode": true,
30
- "hostname": "127.0.0.1:8091",
31
- "clusterCompatibility": 1,
32
- "version": "1.7.1_272_g0e7de99",
33
- "os": "x86_64-pc-linux-gnu",
34
- "ports": {
35
- "proxy": 11211,
36
- "direct": 11210
37
- }
38
- }
39
- ],
40
- "stats": {
41
- "uri": "/pools/default/buckets/default/stats",
42
- "directoryURI": "/pools/default/buckets/default/statsDirectory",
43
- "nodeStatsListURI": "/pools/default/buckets/default/nodes"
44
- },
45
- "nodeLocator": "vbucket",
46
- "vBucketServerMap": {
47
- "hashAlgorithm": "CRC",
48
- "numReplicas": 0,
49
- "serverList": [
50
- "127.0.0.1:11210"
51
- ],
52
- "vBucketMap": [
53
- [
54
- 0
55
- ],
56
- [
57
- 0
58
- ],
59
- [
60
- 0
61
- ],
62
- [
63
- 0
64
- ],
65
- [
66
- 0
67
- ],
68
- [
69
- 0
70
- ],
71
- [
72
- 0
73
- ],
74
- [
75
- 0
76
- ],
77
- [
78
- 0
79
- ],
80
- [
81
- 0
82
- ],
83
- [
84
- 0
85
- ],
86
- [
87
- 0
88
- ],
89
- [
90
- 0
91
- ],
92
- [
93
- 0
94
- ],
95
- [
96
- 0
97
- ],
98
- [
99
- 0
100
- ],
101
- [
102
- 0
103
- ],
104
- [
105
- 0
106
- ],
107
- [
108
- 0
109
- ],
110
- [
111
- 0
112
- ],
113
- [
114
- 0
115
- ],
116
- [
117
- 0
118
- ],
119
- [
120
- 0
121
- ],
122
- [
123
- 0
124
- ],
125
- [
126
- 0
127
- ],
128
- [
129
- 0
130
- ],
131
- [
132
- 0
133
- ],
134
- [
135
- 0
136
- ],
137
- [
138
- 0
139
- ],
140
- [
141
- 0
142
- ],
143
- [
144
- 0
145
- ],
146
- [
147
- 0
148
- ],
149
- [
150
- 0
151
- ],
152
- [
153
- 0
154
- ],
155
- [
156
- 0
157
- ],
158
- [
159
- 0
160
- ],
161
- [
162
- 0
163
- ],
164
- [
165
- 0
166
- ],
167
- [
168
- 0
169
- ],
170
- [
171
- 0
172
- ],
173
- [
174
- 0
175
- ],
176
- [
177
- 0
178
- ],
179
- [
180
- 0
181
- ],
182
- [
183
- 0
184
- ],
185
- [
186
- 0
187
- ],
188
- [
189
- 0
190
- ],
191
- [
192
- 0
193
- ],
194
- [
195
- 0
196
- ],
197
- [
198
- 0
199
- ],
200
- [
201
- 0
202
- ],
203
- [
204
- 0
205
- ],
206
- [
207
- 0
208
- ],
209
- [
210
- 0
211
- ],
212
- [
213
- 0
214
- ],
215
- [
216
- 0
217
- ],
218
- [
219
- 0
220
- ],
221
- [
222
- 0
223
- ],
224
- [
225
- 0
226
- ],
227
- [
228
- 0
229
- ],
230
- [
231
- 0
232
- ],
233
- [
234
- 0
235
- ],
236
- [
237
- 0
238
- ],
239
- [
240
- 0
241
- ],
242
- [
243
- 0
244
- ],
245
- [
246
- 0
247
- ],
248
- [
249
- 0
250
- ],
251
- [
252
- 0
253
- ],
254
- [
255
- 0
256
- ],
257
- [
258
- 0
259
- ],
260
- [
261
- 0
262
- ],
263
- [
264
- 0
265
- ],
266
- [
267
- 0
268
- ],
269
- [
270
- 0
271
- ],
272
- [
273
- 0
274
- ],
275
- [
276
- 0
277
- ],
278
- [
279
- 0
280
- ],
281
- [
282
- 0
283
- ],
284
- [
285
- 0
286
- ],
287
- [
288
- 0
289
- ],
290
- [
291
- 0
292
- ],
293
- [
294
- 0
295
- ],
296
- [
297
- 0
298
- ],
299
- [
300
- 0
301
- ],
302
- [
303
- 0
304
- ],
305
- [
306
- 0
307
- ],
308
- [
309
- 0
310
- ],
311
- [
312
- 0
313
- ],
314
- [
315
- 0
316
- ],
317
- [
318
- 0
319
- ],
320
- [
321
- 0
322
- ],
323
- [
324
- 0
325
- ],
326
- [
327
- 0
328
- ],
329
- [
330
- 0
331
- ],
332
- [
333
- 0
334
- ],
335
- [
336
- 0
337
- ],
338
- [
339
- 0
340
- ],
341
- [
342
- 0
343
- ],
344
- [
345
- 0
346
- ],
347
- [
348
- 0
349
- ],
350
- [
351
- 0
352
- ],
353
- [
354
- 0
355
- ],
356
- [
357
- 0
358
- ],
359
- [
360
- 0
361
- ],
362
- [
363
- 0
364
- ],
365
- [
366
- 0
367
- ],
368
- [
369
- 0
370
- ],
371
- [
372
- 0
373
- ],
374
- [
375
- 0
376
- ],
377
- [
378
- 0
379
- ],
380
- [
381
- 0
382
- ],
383
- [
384
- 0
385
- ],
386
- [
387
- 0
388
- ],
389
- [
390
- 0
391
- ],
392
- [
393
- 0
394
- ],
395
- [
396
- 0
397
- ],
398
- [
399
- 0
400
- ],
401
- [
402
- 0
403
- ],
404
- [
405
- 0
406
- ],
407
- [
408
- 0
409
- ],
410
- [
411
- 0
412
- ],
413
- [
414
- 0
415
- ],
416
- [
417
- 0
418
- ],
419
- [
420
- 0
421
- ],
422
- [
423
- 0
424
- ],
425
- [
426
- 0
427
- ],
428
- [
429
- 0
430
- ],
431
- [
432
- 0
433
- ],
434
- [
435
- 0
436
- ],
437
- [
438
- 0
439
- ],
440
- [
441
- 0
442
- ],
443
- [
444
- 0
445
- ],
446
- [
447
- 0
448
- ],
449
- [
450
- 0
451
- ],
452
- [
453
- 0
454
- ],
455
- [
456
- 0
457
- ],
458
- [
459
- 0
460
- ],
461
- [
462
- 0
463
- ],
464
- [
465
- 0
466
- ],
467
- [
468
- 0
469
- ],
470
- [
471
- 0
472
- ],
473
- [
474
- 0
475
- ],
476
- [
477
- 0
478
- ],
479
- [
480
- 0
481
- ],
482
- [
483
- 0
484
- ],
485
- [
486
- 0
487
- ],
488
- [
489
- 0
490
- ],
491
- [
492
- 0
493
- ],
494
- [
495
- 0
496
- ],
497
- [
498
- 0
499
- ],
500
- [
501
- 0
502
- ],
503
- [
504
- 0
505
- ],
506
- [
507
- 0
508
- ],
509
- [
510
- 0
511
- ],
512
- [
513
- 0
514
- ],
515
- [
516
- 0
517
- ],
518
- [
519
- 0
520
- ],
521
- [
522
- 0
523
- ],
524
- [
525
- 0
526
- ],
527
- [
528
- 0
529
- ],
530
- [
531
- 0
532
- ],
533
- [
534
- 0
535
- ],
536
- [
537
- 0
538
- ],
539
- [
540
- 0
541
- ],
542
- [
543
- 0
544
- ],
545
- [
546
- 0
547
- ],
548
- [
549
- 0
550
- ],
551
- [
552
- 0
553
- ],
554
- [
555
- 0
556
- ],
557
- [
558
- 0
559
- ],
560
- [
561
- 0
562
- ],
563
- [
564
- 0
565
- ],
566
- [
567
- 0
568
- ],
569
- [
570
- 0
571
- ],
572
- [
573
- 0
574
- ],
575
- [
576
- 0
577
- ],
578
- [
579
- 0
580
- ],
581
- [
582
- 0
583
- ],
584
- [
585
- 0
586
- ],
587
- [
588
- 0
589
- ],
590
- [
591
- 0
592
- ],
593
- [
594
- 0
595
- ],
596
- [
597
- 0
598
- ],
599
- [
600
- 0
601
- ],
602
- [
603
- 0
604
- ],
605
- [
606
- 0
607
- ],
608
- [
609
- 0
610
- ],
611
- [
612
- 0
613
- ],
614
- [
615
- 0
616
- ],
617
- [
618
- 0
619
- ],
620
- [
621
- 0
622
- ],
623
- [
624
- 0
625
- ],
626
- [
627
- 0
628
- ],
629
- [
630
- 0
631
- ],
632
- [
633
- 0
634
- ],
635
- [
636
- 0
637
- ],
638
- [
639
- 0
640
- ],
641
- [
642
- 0
643
- ],
644
- [
645
- 0
646
- ],
647
- [
648
- 0
649
- ],
650
- [
651
- 0
652
- ],
653
- [
654
- 0
655
- ],
656
- [
657
- 0
658
- ],
659
- [
660
- 0
661
- ],
662
- [
663
- 0
664
- ],
665
- [
666
- 0
667
- ],
668
- [
669
- 0
670
- ],
671
- [
672
- 0
673
- ],
674
- [
675
- 0
676
- ],
677
- [
678
- 0
679
- ],
680
- [
681
- 0
682
- ],
683
- [
684
- 0
685
- ],
686
- [
687
- 0
688
- ],
689
- [
690
- 0
691
- ],
692
- [
693
- 0
694
- ],
695
- [
696
- 0
697
- ],
698
- [
699
- 0
700
- ],
701
- [
702
- 0
703
- ],
704
- [
705
- 0
706
- ],
707
- [
708
- 0
709
- ],
710
- [
711
- 0
712
- ],
713
- [
714
- 0
715
- ],
716
- [
717
- 0
718
- ],
719
- [
720
- 0
721
- ],
722
- [
723
- 0
724
- ],
725
- [
726
- 0
727
- ],
728
- [
729
- 0
730
- ],
731
- [
732
- 0
733
- ],
734
- [
735
- 0
736
- ],
737
- [
738
- 0
739
- ],
740
- [
741
- 0
742
- ],
743
- [
744
- 0
745
- ],
746
- [
747
- 0
748
- ],
749
- [
750
- 0
751
- ],
752
- [
753
- 0
754
- ],
755
- [
756
- 0
757
- ],
758
- [
759
- 0
760
- ],
761
- [
762
- 0
763
- ],
764
- [
765
- 0
766
- ],
767
- [
768
- 0
769
- ],
770
- [
771
- 0
772
- ],
773
- [
774
- 0
775
- ],
776
- [
777
- 0
778
- ],
779
- [
780
- 0
781
- ],
782
- [
783
- 0
784
- ],
785
- [
786
- 0
787
- ],
788
- [
789
- 0
790
- ],
791
- [
792
- 0
793
- ],
794
- [
795
- 0
796
- ],
797
- [
798
- 0
799
- ],
800
- [
801
- 0
802
- ],
803
- [
804
- 0
805
- ],
806
- [
807
- 0
808
- ],
809
- [
810
- 0
811
- ],
812
- [
813
- 0
814
- ],
815
- [
816
- 0
817
- ],
818
- [
819
- 0
820
- ]
821
- ]
822
- },
823
- "replicaNumber": 0,
824
- "quota": {
825
- "ram": 3257925632,
826
- "rawRAM": 3257925632
827
- },
828
- "basicStats": {
829
- "quotaPercentUsed": 0.0,
830
- "opsPerSec": 0,
831
- "diskFetches": 0,
832
- "itemCount": 0,
833
- "diskUsed": 0,
834
- "memUsed": 0
835
- },
836
- "bucketCapabilitiesVer": "sync-1.0",
837
- "bucketCapabilities": [
838
- "touch",
839
- "sync",
840
- "couchapi"
841
- ]
842
- }
843
- ]