riak-client 2.2.0.pre1 → 2.2.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.gitignore +1 -0
- data/Gemfile +0 -2
- data/README.markdown +11 -7
- data/RELEASE_NOTES.md +29 -2
- data/Rakefile +5 -3
- data/lib/riak/bucket.rb +55 -23
- data/lib/riak/bucket_properties.rb +8 -1
- data/lib/riak/bucket_type.rb +29 -0
- data/lib/riak/bucket_typed/bucket.rb +15 -7
- data/lib/riak/client.rb +24 -8
- data/lib/riak/client/beefcake/bucket_properties_operator.rb +8 -8
- data/lib/riak/client/beefcake/crdt/set_loader.rb +1 -1
- data/lib/riak/client/beefcake/crdt_loader.rb +1 -1
- data/lib/riak/client/beefcake/crdt_operator.rb +9 -9
- data/lib/riak/client/beefcake/message_codes.rb +4 -0
- data/lib/riak/client/beefcake/message_overlay.rb +4 -0
- data/lib/riak/client/beefcake/messages.rb +35 -5
- data/lib/riak/client/beefcake/object_methods.rb +21 -13
- data/lib/riak/client/beefcake/protocol.rb +7 -7
- data/lib/riak/client/beefcake/socket.rb +2 -2
- data/lib/riak/client/beefcake_protobuffs_backend.rb +58 -33
- data/lib/riak/client/protobuffs_backend.rb +5 -5
- data/lib/riak/client/yokozuna.rb +3 -3
- data/lib/riak/core_ext/deep_dup.rb +1 -1
- data/lib/riak/counter.rb +10 -10
- data/lib/riak/crdt/base.rb +39 -21
- data/lib/riak/crdt/batch_counter.rb +5 -5
- data/lib/riak/crdt/batch_map.rb +2 -2
- data/lib/riak/crdt/counter.rb +7 -7
- data/lib/riak/crdt/inner_counter.rb +4 -4
- data/lib/riak/crdt/inner_flag.rb +3 -3
- data/lib/riak/crdt/inner_map.rb +1 -1
- data/lib/riak/crdt/inner_register.rb +1 -1
- data/lib/riak/crdt/inner_set.rb +5 -5
- data/lib/riak/crdt/map.rb +9 -9
- data/lib/riak/crdt/set.rb +10 -10
- data/lib/riak/crdt/typed_collection.rb +39 -36
- data/lib/riak/errors/base.rb +1 -1
- data/lib/riak/errors/crdt_error.rb +20 -0
- data/lib/riak/errors/search_error.rb +6 -0
- data/lib/riak/index_collection.rb +1 -1
- data/lib/riak/link.rb +5 -3
- data/lib/riak/locale/en.yml +5 -1
- data/lib/riak/map_reduce.rb +7 -7
- data/lib/riak/map_reduce/filter_builder.rb +2 -2
- data/lib/riak/map_reduce/phase.rb +2 -2
- data/lib/riak/preflist_item.rb +7 -0
- data/lib/riak/rcontent.rb +8 -8
- data/lib/riak/robject.rb +27 -14
- data/lib/riak/search.rb +1 -0
- data/lib/riak/search/index.rb +17 -3
- data/lib/riak/search/query.rb +14 -6
- data/lib/riak/search/result_collection.rb +56 -3
- data/lib/riak/search/result_document.rb +71 -1
- data/lib/riak/search/schema.rb +6 -6
- data/lib/riak/secondary_index.rb +20 -12
- data/lib/riak/serializers.rb +0 -1
- data/lib/riak/util/escape.rb +2 -2
- data/lib/riak/util/translation.rb +1 -2
- data/lib/riak/version.rb +1 -1
- data/lib/riak/walk_spec.rb +67 -32
- data/riak-client.gemspec +5 -4
- data/spec/integration/riak/bucket_types_spec.rb +35 -5
- data/spec/integration/riak/conflict_resolution_spec.rb +1 -1
- data/spec/integration/riak/counters_spec.rb +1 -1
- data/spec/integration/riak/crdt/configuration_spec.rb +37 -0
- data/spec/integration/riak/crdt_search_spec.rb +176 -0
- data/spec/integration/riak/crdt_spec.rb +9 -33
- data/spec/integration/riak/crdt_validation/map_spec.rb +4 -4
- data/spec/integration/riak/crdt_validation/set_spec.rb +13 -13
- data/spec/integration/riak/preflist_spec.rb +31 -0
- data/spec/integration/riak/protobuffs/interrupted_request_spec.rb +2 -2
- data/spec/integration/riak/protobuffs_backends_spec.rb +9 -2
- data/spec/integration/riak/search_spec.rb +3 -3
- data/spec/integration/riak/secondary_index_spec.rb +3 -3
- data/spec/integration/riak/security_spec.rb +7 -7
- data/spec/integration/yokozuna/queries_spec.rb +1 -1
- data/spec/riak/beefcake_protobuffs_backend/bucket_properties_operator_spec.rb +9 -9
- data/spec/riak/beefcake_protobuffs_backend/crdt_operator_spec.rb +9 -9
- data/spec/riak/beefcake_protobuffs_backend/protocol_spec.rb +5 -5
- data/spec/riak/beefcake_protobuffs_backend_spec.rb +8 -8
- data/spec/riak/bucket_properties_spec.rb +27 -6
- data/spec/riak/bucket_spec.rb +5 -5
- data/spec/riak/bucket_type_spec.rb +21 -5
- data/spec/riak/bucket_typed/bucket_spec.rb +62 -0
- data/spec/riak/client_spec.rb +36 -18
- data/spec/riak/counter_spec.rb +4 -4
- data/spec/riak/crdt/counter_spec.rb +2 -2
- data/spec/riak/crdt/inner_flag_spec.rb +2 -2
- data/spec/riak/crdt/inner_map_spec.rb +4 -4
- data/spec/riak/crdt/inner_register_spec.rb +1 -1
- data/spec/riak/crdt/map_spec.rb +4 -4
- data/spec/riak/crdt/shared_examples.rb +5 -5
- data/spec/riak/crdt/typed_collection_spec.rb +21 -21
- data/spec/riak/map_reduce/filter_builder_spec.rb +2 -2
- data/spec/riak/map_reduce/phase_spec.rb +4 -4
- data/spec/riak/map_reduce_spec.rb +60 -42
- data/spec/riak/multiget_spec.rb +2 -2
- data/spec/riak/robject_spec.rb +55 -14
- data/spec/riak/search/index_spec.rb +12 -2
- data/spec/riak/search/query_spec.rb +4 -4
- data/spec/riak/search/result_collection_spec.rb +6 -4
- data/spec/riak/search/result_document_spec.rb +52 -9
- data/spec/riak/search/schema_spec.rb +2 -2
- data/spec/riak/secondary_index_spec.rb +6 -6
- data/spec/riak/serializers_spec.rb +27 -10
- data/spec/riak/walk_spec_spec.rb +10 -6
- data/spec/spec_helper.rb +11 -2
- data/spec/support/crdt_search_config.rb +112 -0
- data/spec/support/crdt_search_fixtures.rb +42 -0
- data/spec/support/search_config.rb +7 -5
- data/spec/support/search_corpus_setup.rb +2 -2
- data/spec/support/test_client.rb +2 -2
- data/spec/support/unified_backend_examples.rb +5 -5
- data/spec/support/version_filter.rb +5 -3
- data/spec/support/wait_until.rb +9 -3
- metadata +36 -13
- data/spec/riak/bucket_typed/bucket.rb +0 -43
data/lib/riak/client.rb
CHANGED
@@ -12,11 +12,14 @@ require 'riak/client/node'
|
|
12
12
|
require 'riak/client/search'
|
13
13
|
require 'riak/client/yokozuna'
|
14
14
|
require 'riak/client/protobuffs_backend'
|
15
|
+
require 'riak/preflist_item'
|
15
16
|
require 'riak/client/beefcake_protobuffs_backend'
|
16
17
|
require 'riak/bucket'
|
18
|
+
require 'riak/bucket_properties'
|
17
19
|
require 'riak/bucket_type'
|
18
20
|
require 'riak/multiget'
|
19
21
|
require 'riak/secondary_index'
|
22
|
+
require 'riak/search'
|
20
23
|
require 'riak/stamp'
|
21
24
|
require 'riak/list_buckets'
|
22
25
|
|
@@ -81,7 +84,7 @@ module Riak
|
|
81
84
|
# @option options [Fixnum, String] :client_id (rand(MAX_CLIENT_ID)) The internal client ID used by Riak to route responses
|
82
85
|
# @option options [String, Symbol] :protobuffs_backend (:Beefcake) which Protocol Buffers backend to use
|
83
86
|
# @raise [ArgumentError] raised if any invalid options are given
|
84
|
-
def initialize(options={})
|
87
|
+
def initialize(options = {})
|
85
88
|
if options.include? :port
|
86
89
|
warn(t('deprecated.port', :backtrace => caller[0..2].join("\n ")))
|
87
90
|
end
|
@@ -120,7 +123,7 @@ module Riak
|
|
120
123
|
# @param [Hash] options options for retrieving the bucket
|
121
124
|
# @option options [Boolean] :props (false) whether to retreive the bucket properties
|
122
125
|
# @return [Bucket] the requested bucket
|
123
|
-
def bucket(name, options={})
|
126
|
+
def bucket(name, options = {})
|
124
127
|
raise ArgumentError, t('zero_length_bucket') if name == ''
|
125
128
|
unless (options.keys - [:props]).empty?
|
126
129
|
raise ArgumentError, "invalid options"
|
@@ -140,7 +143,7 @@ module Riak
|
|
140
143
|
# @note This is an expensive operation and should be used only
|
141
144
|
# in development.
|
142
145
|
# @return [Array<Bucket>] a list of buckets
|
143
|
-
def buckets(options={}, &block)
|
146
|
+
def buckets(options = {}, &block)
|
144
147
|
warn(t('list_buckets', :backtrace => caller.join("\n "))) unless Riak.disable_list_keys_warnings
|
145
148
|
|
146
149
|
return ListBuckets.new self, options, block if block_given?
|
@@ -224,19 +227,32 @@ module Riak
|
|
224
227
|
end
|
225
228
|
|
226
229
|
# Bucket properties. See Bucket#props
|
227
|
-
def get_bucket_props(bucket, options={ })
|
230
|
+
def get_bucket_props(bucket, options = { })
|
228
231
|
backend do |b|
|
229
232
|
b.get_bucket_props bucket, options
|
230
233
|
end
|
231
234
|
end
|
232
235
|
|
233
236
|
# Queries a secondary index on a bucket. See Bucket#get_index
|
234
|
-
def get_index(bucket, index, query, options={})
|
237
|
+
def get_index(bucket, index, query, options = {})
|
235
238
|
backend do |b|
|
236
239
|
b.get_index bucket, index, query, options
|
237
240
|
end
|
238
241
|
end
|
239
242
|
|
243
|
+
# Retrieves a preflist for the given bucket, key, and type; useful for
|
244
|
+
# figuring out where in the cluster an object is stored.
|
245
|
+
# @param [Bucket, String] bucket the Bucket or name of the bucket
|
246
|
+
# @param [String] key the key
|
247
|
+
# @param [BucketType, String] type the bucket type or name of the bucket
|
248
|
+
# type
|
249
|
+
# @return [Array<PreflistItem>] an array of preflist entries
|
250
|
+
def get_preflist(bucket, key, type = nil, options = { })
|
251
|
+
backend do |b|
|
252
|
+
b.get_preflist bucket, key, type, options
|
253
|
+
end
|
254
|
+
end
|
255
|
+
|
240
256
|
# Get multiple objects in parallel.
|
241
257
|
def get_many(pairs)
|
242
258
|
Multiget.get_all self, pairs
|
@@ -256,7 +272,7 @@ module Riak
|
|
256
272
|
end
|
257
273
|
|
258
274
|
# Retrieves a list of keys in the given bucket. See Bucket#keys
|
259
|
-
def list_keys(bucket, options={}, &block)
|
275
|
+
def list_keys(bucket, options = {}, &block)
|
260
276
|
if block_given?
|
261
277
|
backend do |b|
|
262
278
|
b.list_keys bucket, options, &block
|
@@ -367,14 +383,14 @@ module Riak
|
|
367
383
|
end
|
368
384
|
|
369
385
|
# Sets the properties on a bucket. See Bucket#props=
|
370
|
-
def set_bucket_props(bucket, properties, type=nil)
|
386
|
+
def set_bucket_props(bucket, properties, type = nil)
|
371
387
|
backend do |b|
|
372
388
|
b.set_bucket_props(bucket, properties, type)
|
373
389
|
end
|
374
390
|
end
|
375
391
|
|
376
392
|
# Clears the properties on a bucket. See Bucket#clear_props
|
377
|
-
def clear_bucket_props(bucket, options={ })
|
393
|
+
def clear_bucket_props(bucket, options = { })
|
378
394
|
backend do |b|
|
379
395
|
b.reset_bucket_props(bucket, options)
|
380
396
|
end
|
@@ -13,7 +13,7 @@ class Riak::Client::BeefcakeProtobuffsBackend
|
|
13
13
|
@backend = backend
|
14
14
|
end
|
15
15
|
|
16
|
-
def get(bucket, options={})
|
16
|
+
def get(bucket, options = {})
|
17
17
|
response = backend.protocol do |p|
|
18
18
|
p.write :GetBucketReq, get_request(bucket, options)
|
19
19
|
p.expect :GetBucketResp, RpbGetBucketResp
|
@@ -24,11 +24,11 @@ class Riak::Client::BeefcakeProtobuffsBackend
|
|
24
24
|
return rubyfy(properties)
|
25
25
|
end
|
26
26
|
|
27
|
-
def put(bucket, props={}, options={})
|
27
|
+
def put(bucket, props = {}, options = {})
|
28
28
|
properties = riakify props
|
29
29
|
|
30
30
|
request = put_request bucket, properties, options
|
31
|
-
|
31
|
+
|
32
32
|
backend.protocol do |p|
|
33
33
|
p.write :SetBucketReq, request
|
34
34
|
p.expect :SetBucketResp
|
@@ -42,7 +42,7 @@ class Riak::Client::BeefcakeProtobuffsBackend
|
|
42
42
|
rubyfy_quorums(props)
|
43
43
|
rubyfy_hooks(props)
|
44
44
|
rubyfy_modfuns(props)
|
45
|
-
|
45
|
+
|
46
46
|
return props
|
47
47
|
end
|
48
48
|
|
@@ -126,7 +126,7 @@ class Riak::Client::BeefcakeProtobuffsBackend
|
|
126
126
|
end
|
127
127
|
|
128
128
|
def rubyfy_modfun(modfun)
|
129
|
-
{
|
129
|
+
{
|
130
130
|
'mod' => modfun[:module],
|
131
131
|
'fun' => modfun[:function]
|
132
132
|
}
|
@@ -151,16 +151,16 @@ class Riak::Client::BeefcakeProtobuffsBackend
|
|
151
151
|
3
|
152
152
|
end
|
153
153
|
end
|
154
|
-
|
154
|
+
|
155
155
|
def name_options(bucket)
|
156
156
|
o = {}
|
157
157
|
if bucket.is_a? Riak::Bucket
|
158
|
-
o[:bucket] = bucket.name
|
158
|
+
o[:bucket] = bucket.name
|
159
159
|
o[:type] = bucket.type.name if bucket.needs_type?
|
160
160
|
else
|
161
161
|
o[:bucket] = bucket
|
162
162
|
end
|
163
|
-
|
163
|
+
|
164
164
|
return o
|
165
165
|
end
|
166
166
|
|
@@ -26,7 +26,7 @@ module Riak
|
|
26
26
|
end
|
27
27
|
|
28
28
|
# Perform the protobuffs request and return a deserialized CRDT.
|
29
|
-
def load(bucket, key, bucket_type, options={})
|
29
|
+
def load(bucket, key, bucket_type, options = {})
|
30
30
|
bucket = bucket.name if bucket.is_a? ::Riak::Bucket
|
31
31
|
fetch_args = options.merge(
|
32
32
|
bucket: bucket,
|
@@ -4,13 +4,13 @@ module Riak
|
|
4
4
|
class Client
|
5
5
|
class BeefcakeProtobuffsBackend
|
6
6
|
|
7
|
-
# Returns a new {CrdtOperator} for serializing CRDT operations into
|
7
|
+
# Returns a new {CrdtOperator} for serializing CRDT operations into
|
8
8
|
# protobuffs and sending them to a Riak cluster.
|
9
9
|
# @api private
|
10
10
|
def crdt_operator
|
11
11
|
return CrdtOperator.new self
|
12
12
|
end
|
13
|
-
|
13
|
+
|
14
14
|
# Serializes and writes CRDT operations from {Riak::Crdt::Operation} members
|
15
15
|
# into protobuffs, and writes them to a Riak cluster.
|
16
16
|
# @api private
|
@@ -18,13 +18,13 @@ module Riak
|
|
18
18
|
include Util::Translation
|
19
19
|
|
20
20
|
attr_reader :backend
|
21
|
-
|
21
|
+
|
22
22
|
def initialize(backend)
|
23
23
|
@backend = backend
|
24
24
|
end
|
25
25
|
|
26
26
|
# Serializes and writes CRDT operations.
|
27
|
-
def operate(bucket, key, bucket_type, operation, options={})
|
27
|
+
def operate(bucket, key, bucket_type, operation, options = {})
|
28
28
|
serialized = serialize(operation)
|
29
29
|
args = {
|
30
30
|
bucket: bucket,
|
@@ -63,7 +63,7 @@ module Riak
|
|
63
63
|
def wrap_field_for(ops)
|
64
64
|
"#{ops.first.type.to_s}_op".to_sym
|
65
65
|
end
|
66
|
-
|
66
|
+
|
67
67
|
def serialize_group(operations)
|
68
68
|
case operations.first.type
|
69
69
|
when :counter
|
@@ -76,9 +76,9 @@ module Riak
|
|
76
76
|
raise ArgumentError, t('crdt.unknown_field', symbol: operation.type.inspect)
|
77
77
|
end
|
78
78
|
end
|
79
|
-
|
79
|
+
|
80
80
|
def inner_serialize_group(operations)
|
81
|
-
updates, deletes = operations.partition do |op|
|
81
|
+
updates, deletes = operations.partition do |op|
|
82
82
|
op.value.is_a? Riak::Crdt::Operation::Update
|
83
83
|
end
|
84
84
|
serialized_updates = updates.map do |operation|
|
@@ -117,7 +117,7 @@ module Riak
|
|
117
117
|
type: type_symbol_to_type_enum(operation.type)
|
118
118
|
)
|
119
119
|
end
|
120
|
-
|
120
|
+
|
121
121
|
def serialize_counter(counter_ops)
|
122
122
|
amount = counter_ops.inject(0){|m, o| m += o.value }
|
123
123
|
CounterOp.new(increment: amount)
|
@@ -163,7 +163,7 @@ module Riak
|
|
163
163
|
adds.add [o.value[:add]] if o.value[:add]
|
164
164
|
removes.merge [o.value[:remove]] if o.value[:remove]
|
165
165
|
end
|
166
|
-
|
166
|
+
|
167
167
|
SetOp.new(
|
168
168
|
adds: adds.to_a.flatten,
|
169
169
|
removes: removes.to_a.flatten
|
@@ -4,7 +4,7 @@ module Riak
|
|
4
4
|
class Client
|
5
5
|
# @private
|
6
6
|
class BeefcakeProtobuffsBackend
|
7
|
-
## Generated from riak.proto for
|
7
|
+
## Generated from riak.proto for
|
8
8
|
require "beefcake"
|
9
9
|
|
10
10
|
|
@@ -149,13 +149,14 @@ class RpbBucketProps
|
|
149
149
|
optional :search_index, :bytes, 25
|
150
150
|
optional :datatype, :bytes, 26
|
151
151
|
optional :consistent, :bool, 27
|
152
|
+
optional :write_once, :bool, 28
|
152
153
|
end
|
153
154
|
|
154
155
|
class RpbAuthReq
|
155
156
|
required :user, :bytes, 1
|
156
157
|
required :password, :bytes, 2
|
157
158
|
end
|
158
|
-
## Generated from riak_kv.proto for
|
159
|
+
## Generated from riak_kv.proto for
|
159
160
|
require "beefcake"
|
160
161
|
|
161
162
|
|
@@ -260,6 +261,18 @@ class RpbCounterGetResp
|
|
260
261
|
include Beefcake::Message
|
261
262
|
end
|
262
263
|
|
264
|
+
class RpbGetBucketKeyPreflistReq
|
265
|
+
include Beefcake::Message
|
266
|
+
end
|
267
|
+
|
268
|
+
class RpbGetBucketKeyPreflistResp
|
269
|
+
include Beefcake::Message
|
270
|
+
end
|
271
|
+
|
272
|
+
class RpbBucketKeyPreflistItem
|
273
|
+
include Beefcake::Message
|
274
|
+
end
|
275
|
+
|
263
276
|
class RpbGetClientIdResp
|
264
277
|
required :client_id, :bytes, 1
|
265
278
|
end
|
@@ -457,7 +470,23 @@ end
|
|
457
470
|
class RpbCounterGetResp
|
458
471
|
optional :value, :sint64, 1
|
459
472
|
end
|
460
|
-
|
473
|
+
|
474
|
+
class RpbGetBucketKeyPreflistReq
|
475
|
+
required :bucket, :bytes, 1
|
476
|
+
required :key, :bytes, 2
|
477
|
+
optional :type, :bytes, 3
|
478
|
+
end
|
479
|
+
|
480
|
+
class RpbGetBucketKeyPreflistResp
|
481
|
+
repeated :preflist, RpbBucketKeyPreflistItem, 1
|
482
|
+
end
|
483
|
+
|
484
|
+
class RpbBucketKeyPreflistItem
|
485
|
+
required :partition, :int64, 1
|
486
|
+
required :node, :bytes, 2
|
487
|
+
required :primary, :bool, 3
|
488
|
+
end
|
489
|
+
## Generated from riak_search.proto for
|
461
490
|
require "beefcake"
|
462
491
|
|
463
492
|
|
@@ -495,7 +524,7 @@ class RpbSearchQueryResp
|
|
495
524
|
optional :max_score, :float, 2
|
496
525
|
optional :num_found, :uint32, 3
|
497
526
|
end
|
498
|
-
## Generated from riak_yokozuna.proto for
|
527
|
+
## Generated from riak_yokozuna.proto for
|
499
528
|
require "beefcake"
|
500
529
|
|
501
530
|
|
@@ -551,6 +580,7 @@ end
|
|
551
580
|
|
552
581
|
class RpbYokozunaIndexPutReq
|
553
582
|
required :index, RpbYokozunaIndex, 1
|
583
|
+
optional :timeout, :uint32, 2
|
554
584
|
end
|
555
585
|
|
556
586
|
class RpbYokozunaIndexDeleteReq
|
@@ -573,7 +603,7 @@ end
|
|
573
603
|
class RpbYokozunaSchemaGetResp
|
574
604
|
required :schema, RpbYokozunaSchema, 1
|
575
605
|
end
|
576
|
-
## Generated from riak_dt.proto for
|
606
|
+
## Generated from riak_dt.proto for
|
577
607
|
require "beefcake"
|
578
608
|
|
579
609
|
|
@@ -9,20 +9,15 @@ module Riak
|
|
9
9
|
ENCODING = "Riak".respond_to?(:encoding)
|
10
10
|
|
11
11
|
# Returns RpbPutReq
|
12
|
-
def dump_object(robject, options={})
|
13
|
-
|
12
|
+
def dump_object(robject, options = {})
|
13
|
+
req_opts = options.merge(:bucket => maybe_encode(robject.bucket.name))
|
14
|
+
if robject.bucket.respond_to?(:type) && t = robject.bucket.type
|
15
|
+
req_opts[:type] = maybe_encode(t.name)
|
16
|
+
end
|
17
|
+
pbuf = RpbPutReq.new(req_opts)
|
14
18
|
pbuf.key = maybe_encode(robject.key) if robject.key # Put w/o key supported!
|
15
19
|
pbuf.vclock = maybe_encode(Base64.decode64(robject.vclock)) if robject.vclock
|
16
|
-
pbuf
|
17
|
-
:content_type => maybe_encode(robject.content_type),
|
18
|
-
:links => robject.links.map {|l| encode_link(l) }.compact,
|
19
|
-
:indexes => robject.indexes.map {|k,s| encode_index(k,s) }.flatten)
|
20
|
-
|
21
|
-
pbuf.content.usermeta = robject.meta.map {|k,v| encode_meta(k,v)} if robject.meta.any?
|
22
|
-
pbuf.content.vtag = maybe_encode(robject.etag) if robject.etag.present?
|
23
|
-
if ENCODING # 1.9 support
|
24
|
-
pbuf.content.charset = maybe_encode(robject.raw_data.encoding.name)
|
25
|
-
end
|
20
|
+
dump_content pbuf, robject
|
26
21
|
pbuf
|
27
22
|
end
|
28
23
|
|
@@ -60,6 +55,19 @@ module Riak
|
|
60
55
|
rcontent
|
61
56
|
end
|
62
57
|
|
58
|
+
def dump_content(pbuf, robject)
|
59
|
+
pbuf.content = RpbContent.new(:value => maybe_encode(robject.raw_data),
|
60
|
+
:content_type => maybe_encode(robject.content_type),
|
61
|
+
:links => robject.links.map {|l| encode_link(l) }.compact,
|
62
|
+
:indexes => robject.indexes.map {|k, s| encode_index(k, s) }.flatten)
|
63
|
+
|
64
|
+
pbuf.content.usermeta = robject.meta.map {|k, v| encode_meta(k, v)} if robject.meta.any?
|
65
|
+
pbuf.content.vtag = maybe_encode(robject.etag) if robject.etag.present?
|
66
|
+
if ENCODING # 1.9 support
|
67
|
+
pbuf.content.charset = maybe_encode(robject.raw_data.encoding.name)
|
68
|
+
end
|
69
|
+
end
|
70
|
+
|
63
71
|
def decode_link(pbuf)
|
64
72
|
Riak::Link.new(pbuf.bucket, pbuf.key, pbuf.tag)
|
65
73
|
end
|
@@ -75,7 +83,7 @@ module Riak
|
|
75
83
|
hash[pbuf.key] = pbuf.value
|
76
84
|
end
|
77
85
|
|
78
|
-
def encode_meta(key,value)
|
86
|
+
def encode_meta(key, value)
|
79
87
|
return nil unless value.present?
|
80
88
|
RpbPair.new(:key => maybe_encode(key.to_s),
|
81
89
|
:value => maybe_encode(value.to_s))
|
@@ -16,12 +16,12 @@ module Riak
|
|
16
16
|
|
17
17
|
# Encodes and writes a Riak-formatted message, including protocol buffer
|
18
18
|
# payload if given.
|
19
|
-
#
|
20
|
-
# @param [Symbol, Integer] code the symbolic or numeric code for the
|
19
|
+
#
|
20
|
+
# @param [Symbol, Integer] code the symbolic or numeric code for the
|
21
21
|
# message
|
22
22
|
# @param [Beefcake::Message, nil] message the protocol buffer message
|
23
23
|
# payload, or nil if the message carries no payload
|
24
|
-
def write(code, message=nil)
|
24
|
+
def write(code, message = nil)
|
25
25
|
if code.is_a? Symbol
|
26
26
|
code = BeefcakeMessageCodes.index code
|
27
27
|
end
|
@@ -42,7 +42,7 @@ module Riak
|
|
42
42
|
# @return [Array<Symbol, String>]
|
43
43
|
def receive
|
44
44
|
header = socket.read 5
|
45
|
-
|
45
|
+
|
46
46
|
raise ProtobuffsFailedHeader.new if header.nil?
|
47
47
|
message_length, code = header.unpack 'NC'
|
48
48
|
body_length = message_length - 1
|
@@ -59,7 +59,7 @@ module Riak
|
|
59
59
|
# success if the payload is empty.
|
60
60
|
#
|
61
61
|
# @param [Symbol] code the code for the message
|
62
|
-
# @param [Class, nil] decoder_class the class to attempt to decode
|
62
|
+
# @param [Class, nil] decoder_class the class to attempt to decode
|
63
63
|
# the payload with
|
64
64
|
# @param [Hash] options
|
65
65
|
# @option options [Boolean] :empty_body_acceptable Whether to accept
|
@@ -71,10 +71,10 @@ module Riak
|
|
71
71
|
# 255-ErrorResp
|
72
72
|
# @raise {ProtobuffsUnexpectedResponse} if the message from riak did
|
73
73
|
# not match `code`
|
74
|
-
def expect(code, decoder_class=nil, options={ })
|
74
|
+
def expect(code, decoder_class = nil, options = { })
|
75
75
|
code = BeefcakeMessageCodes[code] unless code.is_a? Symbol
|
76
76
|
name, body = receive
|
77
|
-
|
77
|
+
|
78
78
|
if name == :ErrorResp
|
79
79
|
raise ProtobuffsErrorResponse.new RpbErrorResp.decode(body)
|
80
80
|
end
|