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.
- data/.gitignore +8 -0
- data/.yardopts +5 -0
- data/HISTORY.markdown +14 -10
- data/README.markdown +293 -98
- data/Rakefile +19 -24
- data/couchbase.gemspec +25 -7
- data/ext/couchbase_ext/couchbase_ext.c +2332 -0
- data/ext/couchbase_ext/extconf.rb +102 -0
- data/lib/couchbase.rb +20 -30
- data/lib/couchbase/bucket.rb +43 -112
- data/lib/couchbase/version.rb +3 -2
- data/tasks/benchmark.rake +6 -0
- data/tasks/compile.rake +52 -0
- data/tasks/doc.rake +27 -0
- data/tasks/test.rake +94 -0
- data/tasks/util.rake +21 -0
- data/test/profile/.gitignore +1 -0
- data/test/profile/Gemfile +6 -0
- data/test/profile/benchmark.rb +195 -0
- data/test/setup.rb +107 -18
- data/test/test_arithmetic.rb +98 -0
- data/test/test_async.rb +211 -0
- data/test/test_bucket.rb +126 -23
- data/test/test_cas.rb +59 -0
- data/test/test_couchbase.rb +22 -3
- data/test/test_delete.rb +63 -0
- data/test/test_errors.rb +82 -0
- data/test/test_flush.rb +49 -0
- data/test/test_format.rb +98 -0
- data/test/test_get.rb +236 -0
- data/test/test_stats.rb +53 -0
- data/test/test_store.rb +186 -0
- data/test/test_touch.rb +57 -0
- data/test/test_version.rb +17 -0
- metadata +72 -58
- data/lib/couchbase/couchdb.rb +0 -107
- data/lib/couchbase/document.rb +0 -71
- data/lib/couchbase/http_status.rb +0 -118
- data/lib/couchbase/latch.rb +0 -71
- data/lib/couchbase/memcached.rb +0 -372
- data/lib/couchbase/node.rb +0 -49
- data/lib/couchbase/rest_client.rb +0 -124
- data/lib/couchbase/view.rb +0 -182
- data/test/support/buckets-config.json +0 -843
- data/test/support/sample_design_doc.json +0 -9
- data/test/test_couchdb.rb +0 -98
- data/test/test_document.rb +0 -11
- data/test/test_latch.rb +0 -88
- data/test/test_memcached.rb +0 -59
- data/test/test_rest_client.rb +0 -14
- data/test/test_view.rb +0 -98
data/lib/couchbase/node.rb
DELETED
@@ -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
|
data/lib/couchbase/view.rb
DELETED
@@ -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
|
-
]
|