riak-client 2.2.0.pre1 → 2.2.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.
- 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
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA1:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 2dd52a7e386245c3d3dc1d7c1be2ba94b3dd2c91
|
|
4
|
+
data.tar.gz: 48ed739d11831361ca42d2c8291753c9d87c7124
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: dc420b627bd2854197b03468a4aaf09895eb267f601fb285280788ff73754266b098d9fac1251354f662853eb8e4c73973a75874d040e9fa3019a64adac6d86a
|
|
7
|
+
data.tar.gz: f07cc587b55e1b54662b86f3ca572df999f89511ed8ae340ed935848a410d5b9bcb7947f7cc96a569121ddc270e595eedf9e19518f1266fa0cbe7b7d04e5229a
|
data/.gitignore
CHANGED
data/Gemfile
CHANGED
data/README.markdown
CHANGED
|
@@ -5,9 +5,13 @@ distributed database that contains a basic wrapper around typical
|
|
|
5
5
|
operations, including bucket manipulation, object CRUD, link-walking,
|
|
6
6
|
and map-reduce.
|
|
7
7
|
|
|
8
|
+
Exhaustive documentation is available at
|
|
9
|
+
http://basho.github.io/riak-ruby-client/ , and API documentation can be
|
|
10
|
+
read at http://www.rubydoc.info/gems/riak-client/frames .
|
|
11
|
+
|
|
8
12
|
## Dependencies
|
|
9
13
|
|
|
10
|
-
Ruby 1.9.3, 2.0, and 2.
|
|
14
|
+
Ruby 1.9.3, 2.0, 2.1, and 2.2 are supported. JRuby in 1.9 and 2.0 modes are
|
|
11
15
|
also supported. `riak-client` is not compatible with Ruby 1.8.
|
|
12
16
|
|
|
13
17
|
In JRuby 1.7.13, OCSP validation is absent, and CRL validation always
|
|
@@ -19,25 +23,25 @@ when it works.
|
|
|
19
23
|
[1]: https://github.com/jruby/jruby-openssl/issues/5
|
|
20
24
|
[2]: https://github.com/basho/riak_api/issues/65
|
|
21
25
|
|
|
22
|
-
`riak-client` requires
|
|
23
|
-
|
|
26
|
+
`riak-client` requires beefcake, cert_validator, i18n, innertube, and
|
|
27
|
+
multi_json.
|
|
24
28
|
|
|
25
29
|
Development dependencies are handled with bundler. Install bundler
|
|
26
30
|
(`gem install bundler`) and run this command to get started:
|
|
27
31
|
|
|
28
|
-
```
|
|
32
|
+
```bash
|
|
29
33
|
$ bundle install
|
|
30
34
|
```
|
|
31
35
|
|
|
32
36
|
Run the RSpec suite using `bundle exec`:
|
|
33
37
|
|
|
34
|
-
```
|
|
38
|
+
```bash
|
|
35
39
|
$ bundle exec rake
|
|
36
40
|
```
|
|
37
41
|
|
|
38
42
|
## Basic Example
|
|
39
43
|
|
|
40
|
-
```
|
|
44
|
+
```ruby
|
|
41
45
|
require 'riak'
|
|
42
46
|
|
|
43
47
|
# Create a client interface
|
|
@@ -622,7 +626,7 @@ search.admin,search.query,riak_kv.mapreduce on any to user
|
|
|
622
626
|
|
|
623
627
|
## License & Copyright
|
|
624
628
|
|
|
625
|
-
Copyright ©2010-
|
|
629
|
+
Copyright ©2010-2015 Sean Cribbs and Basho Technologies, Inc.
|
|
626
630
|
|
|
627
631
|
Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at
|
|
628
632
|
|
data/RELEASE_NOTES.md
CHANGED
|
@@ -1,5 +1,32 @@
|
|
|
1
1
|
# Riak Ruby Client Release Notes
|
|
2
2
|
|
|
3
|
+
## 2.2.0 Release - 2015-05-27
|
|
4
|
+
|
|
5
|
+
Version 2.2.0 is a feature release.
|
|
6
|
+
|
|
7
|
+
New features:
|
|
8
|
+
|
|
9
|
+
* Object-oriented Riak Search (Yokozuna) API.
|
|
10
|
+
* Object-oriented Bucket Properties API.
|
|
11
|
+
* Bucket type properties are readable.
|
|
12
|
+
* Bucket-typed buckets without properties expose properties of bucket type.
|
|
13
|
+
* An interface to get a preflist for Riak KV objects has been added.
|
|
14
|
+
|
|
15
|
+
Small improvements and changes:
|
|
16
|
+
|
|
17
|
+
* In line with recent Riak documentation and implementation changes, `vclock`
|
|
18
|
+
can also be referred to as `causal_context`.
|
|
19
|
+
* Support for synchronous Riak Search index creation with timeouts has been
|
|
20
|
+
added.
|
|
21
|
+
|
|
22
|
+
Bug fixes:
|
|
23
|
+
|
|
24
|
+
* Accessing a flag in a non-existent CRDT map returns false now.
|
|
25
|
+
* Escaping text in situations that require it is faster, thanks to Jordan
|
|
26
|
+
Goldstein.
|
|
27
|
+
* Loading and storing objects from bucket-typed buckets is more reliable and
|
|
28
|
+
correct thanks to Takeshi Akima.
|
|
29
|
+
|
|
3
30
|
## 2.1.0 Release - 2014-10-03
|
|
4
31
|
|
|
5
32
|
Version 2.1.0 is a feature release.
|
|
@@ -88,7 +115,7 @@ Features for all Riak versions:
|
|
|
88
115
|
|
|
89
116
|
* Multi-get parallelizes fetching multiple objects from one or more
|
|
90
117
|
buckets.
|
|
91
|
-
|
|
118
|
+
|
|
92
119
|
Features for Riak 1.4 and newer:
|
|
93
120
|
|
|
94
121
|
* Bucket properties are settable and resettable over Protocol Buffers.
|
|
@@ -209,7 +236,7 @@ Changes in 1.0.4:
|
|
|
209
236
|
* A function in the `app_helper` module that does not exist on Riak
|
|
210
237
|
1.1 and earlier was copied into the KV test backend.
|
|
211
238
|
* Excon's configuration logic was made more idempotent.
|
|
212
|
-
* Added timeout support to the Excon HTTP backend. [Mat Brown]
|
|
239
|
+
* Added timeout support to the Excon HTTP backend. [Mat Brown]
|
|
213
240
|
* Corrected an misnamed constant in Excon which would cause timeouts
|
|
214
241
|
not to be recognized as network errors.
|
|
215
242
|
* The `Riak::TestServer` is now compatible with Riak 1.2.
|
data/Rakefile
CHANGED
|
@@ -92,13 +92,13 @@ namespace :beefcake do
|
|
|
92
92
|
|
|
93
93
|
PROTO_FILES = %w{riak_kv riak_search riak_yokozuna riak_dt}
|
|
94
94
|
PROTO_TMP = PROTO_FILES.map{|f| "tmp/#{f}.pb.rb"}
|
|
95
|
-
|
|
95
|
+
|
|
96
96
|
task :clean do
|
|
97
97
|
sh "rm -rf tmp/riak_pb"
|
|
98
98
|
sh "rm -rf #{PROTO_TMP.join ' '}"
|
|
99
99
|
end
|
|
100
100
|
|
|
101
|
-
|
|
101
|
+
|
|
102
102
|
file 'lib/riak/client/beefcake/messages.rb' => PROTO_TMP do |t|
|
|
103
103
|
sh "cat lib/riak/client/beefcake/header tmp/riak.pb.rb #{t.prerequisites.join ' '} lib/riak/client/beefcake/footer > #{t.name}"
|
|
104
104
|
end
|
|
@@ -109,7 +109,9 @@ namespace :beefcake do
|
|
|
109
109
|
end
|
|
110
110
|
end
|
|
111
111
|
|
|
112
|
-
directory 'tmp
|
|
112
|
+
directory 'tmp'
|
|
113
|
+
|
|
114
|
+
directory 'tmp/riak_pb' => 'tmp' do
|
|
113
115
|
cd 'tmp' do
|
|
114
116
|
sh "git clone -b develop https://github.com/basho/riak_pb.git"
|
|
115
117
|
end
|
data/lib/riak/bucket.rb
CHANGED
|
@@ -37,7 +37,7 @@ module Riak
|
|
|
37
37
|
# @return [Array<String>] Keys in this bucket
|
|
38
38
|
# @note This operation has serious performance implications and
|
|
39
39
|
# should not be used in production applications.
|
|
40
|
-
def keys(options={}, &block)
|
|
40
|
+
def keys(options = {}, &block)
|
|
41
41
|
warn(t('list_keys', :backtrace => caller.join("\n "))) unless Riak.disable_list_keys_warnings
|
|
42
42
|
if block_given?
|
|
43
43
|
@client.list_keys(self, options, &block)
|
|
@@ -51,7 +51,8 @@ module Riak
|
|
|
51
51
|
# @param [Hash] properties new properties for the bucket
|
|
52
52
|
# @option properties [Fixnum] :n_val (3) The N value (replication factor)
|
|
53
53
|
# @option properties [true,false] :allow_mult (false) Whether to permit object siblings
|
|
54
|
-
# @option properties [true,false] :last_write_wins (false) Whether to ignore
|
|
54
|
+
# @option properties [true,false] :last_write_wins (false) Whether to ignore
|
|
55
|
+
# causal context in regular key-value buckets
|
|
55
56
|
# @option properties [Array<Hash>] :precommit ([]) precommit hooks
|
|
56
57
|
# @option properties [Array<Hash>] :postcommit ([])postcommit hooks
|
|
57
58
|
# @option properties [Fixnum,String] :r ("quorum") read quorum (numeric or
|
|
@@ -92,10 +93,12 @@ module Riak
|
|
|
92
93
|
# Retrieve an object from within the bucket.
|
|
93
94
|
# @param [String] key the key of the object to retrieve
|
|
94
95
|
# @param [Hash] options query parameters for the request
|
|
95
|
-
# @option options [Fixnum] :r - the read quorum for the request - how many
|
|
96
|
+
# @option options [Fixnum] :r - the read quorum for the request - how many
|
|
97
|
+
# nodes should concur on the read
|
|
96
98
|
# @return [Riak::RObject] the object
|
|
97
|
-
# @raise [FailedRequest] if the object is not found or some other error
|
|
98
|
-
|
|
99
|
+
# @raise [FailedRequest] if the object is not found or some other error
|
|
100
|
+
# occurs
|
|
101
|
+
def get(key, options = {})
|
|
99
102
|
@client.get_object(self, key, options)
|
|
100
103
|
end
|
|
101
104
|
alias :[] :get
|
|
@@ -106,22 +109,26 @@ module Riak
|
|
|
106
109
|
def get_many(keys)
|
|
107
110
|
pairs = keys.map{|k| [self, k]}
|
|
108
111
|
results = Multiget.get_all @client, pairs
|
|
109
|
-
results.keys.inject(Hash.new)
|
|
112
|
+
results.keys.inject(Hash.new) do |mem, var|
|
|
113
|
+
mem[var[1]] = results[var]
|
|
114
|
+
mem
|
|
115
|
+
end
|
|
110
116
|
end
|
|
111
117
|
|
|
112
118
|
# Create a new blank object
|
|
113
119
|
# @param [String] key the key of the new object
|
|
114
120
|
# @return [RObject] the new, unsaved object
|
|
115
|
-
def new(key=nil)
|
|
121
|
+
def new(key = nil)
|
|
116
122
|
RObject.new(self, key).tap do |obj|
|
|
117
123
|
obj.content_type = "application/json"
|
|
118
124
|
end
|
|
119
125
|
end
|
|
120
126
|
|
|
121
|
-
# Fetches an object if it exists, otherwise creates a new one with the
|
|
127
|
+
# Fetches an object if it exists, otherwise creates a new one with the
|
|
128
|
+
# given key
|
|
122
129
|
# @param [String] key the key to fetch or create
|
|
123
130
|
# @return [RObject] the new or existing object
|
|
124
|
-
def get_or_new(key, options={})
|
|
131
|
+
def get_or_new(key, options = {})
|
|
125
132
|
begin
|
|
126
133
|
get(key, options)
|
|
127
134
|
rescue Riak::FailedRequest => fr
|
|
@@ -146,7 +153,7 @@ module Riak
|
|
|
146
153
|
# @param [Hash] options quorum options
|
|
147
154
|
# @option options [Fixnum] :r - the read quorum value for the request (R)
|
|
148
155
|
# @return [true, false] whether the key exists in this bucket
|
|
149
|
-
def exists?(key, options={})
|
|
156
|
+
def exists?(key, options = {})
|
|
150
157
|
begin
|
|
151
158
|
get(key, options.merge({ :head => true }))
|
|
152
159
|
true
|
|
@@ -162,9 +169,9 @@ module Riak
|
|
|
162
169
|
# @param [Hash] options quorum options
|
|
163
170
|
# @option options [Fixnum] :rw - the read/write quorum for the
|
|
164
171
|
# delete
|
|
165
|
-
# @option options [String] :vclock - the vector clock of the
|
|
172
|
+
# @option options [String] :vclock - the causal context/vector clock of the
|
|
166
173
|
# object being deleted
|
|
167
|
-
def delete(key, options={})
|
|
174
|
+
def delete(key, options = {})
|
|
168
175
|
client.delete_object(self, key, options)
|
|
169
176
|
end
|
|
170
177
|
|
|
@@ -175,16 +182,27 @@ module Riak
|
|
|
175
182
|
# Range of values to query
|
|
176
183
|
# @return [Array<String>] a list of keys that match the index
|
|
177
184
|
# query
|
|
178
|
-
def get_index(index, query, options={})
|
|
185
|
+
def get_index(index, query, options = {})
|
|
179
186
|
client.get_index(self, index, query, options)
|
|
180
187
|
end
|
|
181
188
|
|
|
189
|
+
|
|
190
|
+
# Retrieves a preflist for the given key; useful for
|
|
191
|
+
# figuring out where in the cluster an object is stored.
|
|
192
|
+
# @param [String] key the key
|
|
193
|
+
# @return [Array<PreflistItem>] an array of preflist entries
|
|
194
|
+
def get_preflist(key, options = { })
|
|
195
|
+
type = self.type.name if needs_type?
|
|
196
|
+
client.get_preflist self, key, type, options
|
|
197
|
+
end
|
|
198
|
+
|
|
182
199
|
# @return [true, false] whether the bucket allows divergent siblings
|
|
183
200
|
def allow_mult
|
|
184
201
|
props['allow_mult']
|
|
185
202
|
end
|
|
186
203
|
|
|
187
|
-
# Set the allow_mult property. *NOTE* This will result in a PUT request to
|
|
204
|
+
# Set the allow_mult property. *NOTE* This will result in a PUT request to
|
|
205
|
+
# Riak.
|
|
188
206
|
# @param [true, false] value whether the bucket should allow siblings
|
|
189
207
|
def allow_mult=(value)
|
|
190
208
|
self.props = {'allow_mult' => value}
|
|
@@ -197,9 +215,11 @@ module Riak
|
|
|
197
215
|
end
|
|
198
216
|
alias :n_val :n_value
|
|
199
217
|
|
|
200
|
-
# Set the N value (number of replicas). *NOTE* This will result in a PUT
|
|
201
|
-
# Setting this value after the bucket has objects stored in
|
|
202
|
-
#
|
|
218
|
+
# Set the N value (number of replicas). *NOTE* This will result in a PUT
|
|
219
|
+
# request to Riak. Setting this value after the bucket has objects stored in
|
|
220
|
+
# it may have unpredictable results.
|
|
221
|
+
# @param [Fixnum] value the number of replicas the bucket should keep of
|
|
222
|
+
# each object
|
|
203
223
|
def n_value=(value)
|
|
204
224
|
self.props = {'n_val' => value}
|
|
205
225
|
value
|
|
@@ -218,15 +238,21 @@ module Riak
|
|
|
218
238
|
# into riak_search.
|
|
219
239
|
def enable_index!
|
|
220
240
|
unless is_indexed?
|
|
221
|
-
self.props = {
|
|
241
|
+
self.props = {
|
|
242
|
+
"precommit" => (props['precommit'] + [SEARCH_PRECOMMIT_HOOK]),
|
|
243
|
+
"search" => true
|
|
244
|
+
}
|
|
222
245
|
end
|
|
223
246
|
end
|
|
224
247
|
|
|
225
|
-
# (Riak Search) Removes the precommit hook that automatically indexes
|
|
226
|
-
# into riak_search.
|
|
248
|
+
# (Riak Search) Removes the precommit hook that automatically indexes
|
|
249
|
+
# objects into riak_search.
|
|
227
250
|
def disable_index!
|
|
228
251
|
if is_indexed?
|
|
229
|
-
self.props = {
|
|
252
|
+
self.props = {
|
|
253
|
+
"precommit" => (props['precommit'] - [SEARCH_PRECOMMIT_HOOK]),
|
|
254
|
+
"search" => false
|
|
255
|
+
}
|
|
230
256
|
end
|
|
231
257
|
end
|
|
232
258
|
|
|
@@ -234,7 +260,10 @@ module Riak
|
|
|
234
260
|
# riak_search.
|
|
235
261
|
# @return [true,false] whether the bucket includes the search indexing hook
|
|
236
262
|
def is_indexed?
|
|
237
|
-
props['search'] == true
|
|
263
|
+
return true if props['search'] == true
|
|
264
|
+
return true if props.has_key?('precommit') &&
|
|
265
|
+
props['precommit'].include?(SEARCH_PRECOMMIT_HOOK)
|
|
266
|
+
false
|
|
238
267
|
end
|
|
239
268
|
|
|
240
269
|
# @return [String] a representation suitable for IRB and debugging output
|
|
@@ -259,7 +288,10 @@ module Riak
|
|
|
259
288
|
|
|
260
289
|
# @return [true,false] whether the other is equivalent
|
|
261
290
|
def ==(other)
|
|
262
|
-
|
|
291
|
+
return false unless self.class == other.class
|
|
292
|
+
return false unless self.client == other.client
|
|
293
|
+
return false unless self.name == other.name
|
|
294
|
+
true
|
|
263
295
|
end
|
|
264
296
|
end
|
|
265
297
|
end
|
|
@@ -30,7 +30,7 @@ module Riak
|
|
|
30
30
|
return true
|
|
31
31
|
end
|
|
32
32
|
|
|
33
|
-
# Take bucket properties from a given {Hash} or {Riak::BucketProperties}
|
|
33
|
+
# Take bucket properties from a given {Hash} or {Riak::BucketProperties}
|
|
34
34
|
# object.
|
|
35
35
|
# @param [Hash<String, Object>, Riak::BucketProperties] other
|
|
36
36
|
def merge!(other)
|
|
@@ -54,6 +54,7 @@ module Riak
|
|
|
54
54
|
# @param [String] property_name
|
|
55
55
|
# @param [Object] value
|
|
56
56
|
def []=(property_name, value)
|
|
57
|
+
value = unwrap_index(value) if property_name == 'search_index'
|
|
57
58
|
cached_props[property_name.to_s] = value
|
|
58
59
|
end
|
|
59
60
|
|
|
@@ -63,5 +64,11 @@ module Riak
|
|
|
63
64
|
be.bucket_properties_operator.get bucket
|
|
64
65
|
end
|
|
65
66
|
end
|
|
67
|
+
|
|
68
|
+
def unwrap_index(value)
|
|
69
|
+
return value.name if value.is_a? Riak::Search::Index
|
|
70
|
+
|
|
71
|
+
value
|
|
72
|
+
end
|
|
66
73
|
end
|
|
67
74
|
end
|
data/lib/riak/bucket_type.rb
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
require 'riak/bucket_typed/bucket'
|
|
2
|
+
require 'riak/errors/crdt_error'
|
|
2
3
|
|
|
3
4
|
module Riak
|
|
4
5
|
# A representation of a bucket type
|
|
@@ -44,5 +45,33 @@ module Riak
|
|
|
44
45
|
end
|
|
45
46
|
alias :props :properties
|
|
46
47
|
|
|
48
|
+
# Return the data type used for handling the CRDT stored in this bucket
|
|
49
|
+
# type.
|
|
50
|
+
# Returns `nil` for a non-CRDT bucket type.
|
|
51
|
+
# @raise [Riak::CrdtError::UnrecognizedDataType] if the bucket type has an
|
|
52
|
+
# unknown datatype
|
|
53
|
+
# @return [Class<Riak::Crdt::Base>] CRDT subclass to use with this bucket
|
|
54
|
+
# type
|
|
55
|
+
def data_type_class
|
|
56
|
+
return nil unless dt = properties[:datatype]
|
|
57
|
+
parent = Riak::Crdt
|
|
58
|
+
case dt
|
|
59
|
+
when 'counter'
|
|
60
|
+
parent::Counter
|
|
61
|
+
when 'map'
|
|
62
|
+
parent::Map
|
|
63
|
+
when 'set'
|
|
64
|
+
parent::Set
|
|
65
|
+
else
|
|
66
|
+
raise CrdtError::UnrecognizedDataType.new dt
|
|
67
|
+
end
|
|
68
|
+
end
|
|
69
|
+
|
|
70
|
+
def ==(other)
|
|
71
|
+
return false unless self.class == other.class
|
|
72
|
+
return false unless self.client == other.client
|
|
73
|
+
return false unless self.name == other.name
|
|
74
|
+
true
|
|
75
|
+
end
|
|
47
76
|
end
|
|
48
77
|
end
|
|
@@ -2,16 +2,16 @@ require 'riak/bucket'
|
|
|
2
2
|
require 'riak/bucket_type'
|
|
3
3
|
|
|
4
4
|
module Riak
|
|
5
|
-
|
|
5
|
+
|
|
6
6
|
# Container module for subclasses of objects with bucket type data attached.
|
|
7
7
|
# Currently only used for {BucketTyped::Bucket}.
|
|
8
8
|
module BucketTyped
|
|
9
|
-
|
|
9
|
+
|
|
10
10
|
# A bucket that has a {BucketType} attached to it. Normally created using
|
|
11
11
|
# the {BucketType#bucket} method. Inherits most of its behavior from the
|
|
12
12
|
# {Riak::Bucket} class.
|
|
13
13
|
class Bucket < Riak::Bucket
|
|
14
|
-
|
|
14
|
+
|
|
15
15
|
# @return [BucketType] the bucket type used with this bucket
|
|
16
16
|
attr_reader :type
|
|
17
17
|
|
|
@@ -37,8 +37,10 @@ module Riak
|
|
|
37
37
|
# @option options [Fixnum] :r - the read quorum for the request - how many nodes should concur on the read
|
|
38
38
|
# @return [Riak::RObject] the object
|
|
39
39
|
# @raise [FailedRequest] if the object is not found or some other error occurs
|
|
40
|
-
def get(key, options={ })
|
|
41
|
-
super key, o(options)
|
|
40
|
+
def get(key, options = { })
|
|
41
|
+
object = super key, o(options)
|
|
42
|
+
object.bucket = self
|
|
43
|
+
return object
|
|
42
44
|
end
|
|
43
45
|
alias :[] :get
|
|
44
46
|
|
|
@@ -49,7 +51,7 @@ module Riak
|
|
|
49
51
|
# delete
|
|
50
52
|
# @option options [String] :vclock - the vector clock of the
|
|
51
53
|
# object being deleted
|
|
52
|
-
def delete(key, options={ })
|
|
54
|
+
def delete(key, options = { })
|
|
53
55
|
super key, o(options)
|
|
54
56
|
end
|
|
55
57
|
|
|
@@ -61,7 +63,7 @@ module Riak
|
|
|
61
63
|
# @return [Array<String>] Keys in this bucket
|
|
62
64
|
# @note This operation has serious performance implications and
|
|
63
65
|
# should not be used in production applications.
|
|
64
|
-
def keys(options={ }, &block)
|
|
66
|
+
def keys(options = { }, &block)
|
|
65
67
|
super o(options), &block
|
|
66
68
|
end
|
|
67
69
|
|
|
@@ -103,6 +105,12 @@ module Riak
|
|
|
103
105
|
return false
|
|
104
106
|
end
|
|
105
107
|
|
|
108
|
+
def ==(other)
|
|
109
|
+
return false unless self.class == other.class
|
|
110
|
+
return false unless self.type == other.type
|
|
111
|
+
super
|
|
112
|
+
end
|
|
113
|
+
|
|
106
114
|
private
|
|
107
115
|
# merge in the type name with options
|
|
108
116
|
def o(options)
|